Frage:
Was bedeutet das "Signieren" einer Datei wirklich?
zgulser
2018-11-26 19:12:53 UTC
view on stackexchange narkive permalink

Ich bin ein bisschen neu in der Sicherheit und versuche, die Konzepte richtig zu verstehen.

Ich frage mich, was genau das "Signieren" einer Datei (eines Zertifikats, einer APK-Datei oder etwas anderem) bedeutet.

  1. Signieren wir die gesamte Datei, damit sie verschlüsselt wird?
  2. Gibt es wie einen einfachen Text, den wir signieren und durchlaufen, zum Beispiel a zip, und lassen Sie die empfangende Seite das Stück anhand eines bestimmten Protokolls überprüfen, bevor Sie fortfahren?
  3. Oder etwas anderes?
  4. ol>

    Soweit ich sehen kann, wenn Wenn wir die gesamte Datei signieren, kann sie sicherer sein, da der Inhalt verschlüsselt (oder signiert) wird. Aber ich habe auch einige Beispiele gesehen / gehört, in denen Sie statt des Ganzen nur einen Text signieren.

    Alle Ideen wären sehr dankbar.

    PS: I ' habe bereits überprüft. Was bedeutet Schlüsselsignatur?

"Schlüsselsignatur" ist für Ihr Verständnis nicht hilfreich."Digitale Signatur" ist das, wonach Sie fragen.
Hast du ein Wiki oder eine andere Quelle gelesen?https://en.wikipedia.org/wiki/Digital_signature
Bei einem Dateisignaturprozess werden Fingerabdruckdaten angehängt, mit denen der Empfänger überprüfen kann, ob die Datei nicht manipuliert wurde.Es vermittelt nur ein gewisses Maß an Vertrauen, garantiert jedoch nicht, dass die Datei sicher ist.
"* Aber ich habe auch einige Beispiele gesehen / gehört, in denen Sie statt des Ganzen nur einen Text signieren. *" Haben Sie Links oder Verweise auf solche Dinge?Das scheint eine schrecklich seltsame Sache zu sein.
@DavidSchwartz In APIs ist es üblich, Schlüsselelemente der Anforderung sowie einen Zeitstempel und eine Nonce zu signieren, da a) das Risiko verringert wird, dass Übertragungscodierungen die Signatur ungültig machen;und b) es entfernt einen catch-22, bei dem Sie die Signatur in die Anfrage einfügen müssen, aber die vollständige Anfrage generieren müssen, bevor Sie sie signieren können.
Sie können auch Ihren Browser öffnen, die Ansicht in ein Symbol ändern und dann den Teil des Bildschirms, auf dem sich das Symbol befindet, mit einer dauerhaften dicken Markierung signieren.Technisch wird die Datei signiert.
@schroeder Ja, ich habe.
Dieses [NIST-Whitepaper] (https://csrc.nist.gov/CSRC/media/Publications/white-paper/2018/01/26/security-considerations-for-code-signing/final/documents/security-considerations-for-Code-Signing.pdf) sieht interessant aus.
Fünf antworten:
Lithilion
2018-11-26 19:42:13 UTC
view on stackexchange narkive permalink

Durch das Signieren einer Datei wird diese nicht verschlüsselt. Wenn Alice eine Datei signiert, signiert sie normalerweise die gesamte Datei. Also berechnet sie einen Hash der gesamten Datei und signiert nur den Hash mit ihrem privaten Schlüssel und hängt diese Information an die Datei an.
Bob verwendet ihren öffentlichen Schlüssel, um ihn zu überprüfen und erhält ihren berechneten Hash. Anschließend berechnet er den Hash der Datei selbst (natürlich ohne Unterschrift) und überprüft beide Hashes. Wenn sie übereinstimmen, entspricht dies genau der Version der Datei, die Alice gesendet hat. Wenn sie nicht übereinstimmen, könnte Mallory sie geändert haben.

Die Datei selbst wird nie verschlüsselt, und natürlich können Sie einfach die Signatur entfernen, aber dann ist sie nicht mehr signiert (und daher wertlos).

Weitere technische und detaillierte Informationen finden Sie in der Antwort auf die Gesamtstruktur: https://security.stackexchange.com/a/198473/191453

Ich glaube, ich komme dorthin, aber eines - wie ist es an die Datei angehängt?Als ob sie gezippt werden oder als Teil der ähnlichen Metadaten hinzugefügt werden, oder etwas anderes?
@zgulser hängt vom Dateiformat und / oder Protokoll ab.Sie können die Dateien sogar als separate Dateien signieren.
@zgulser Als Beispiele dafür, wovon Hauleth spricht, sind die .sig-Dateien [hier] (http://ftp.gnu.org/gnu/bash/) Signaturen in einem Binärformat für die Bash-Quellpaketdateien derselbenName (ohne `.sig`).[Hier] (https://i3wm.org/downloads/) verweisen die "Signatur" -Links auf ".asc" -Dateien für die i3 Window Manager-Quellpakete.Diese `.asc`-Dateien sind ebenfalls Signaturen, jedoch in einem Textformat.
@zgulser Als Beispiel mit einer Inline-Signatur [hier eine signierte E-Mail-Ankündigung der FreeBSD-Community] (https://lists.freebsd.org/pipermail/freebsd-announce/2018-November/001849.html).
@zgulser Ja, sie können mit dem Dokument komprimiert werden.Beispielsweise sind die docx-Dateien von Microsoft Word eigentlich nur Zip-Archive. Sie können sie sogar in 7-zip oder winrar oder einem anderen Archivmanager öffnen.
Warum sagst du "und deshalb wertlos"?Das hängt stark vom Inhalt des Dokuments ab, nicht wahr?Wenn es sich bei dem Dokument um ein gekauftes PDF eines Comics handelt, ist es dennoch zum Lesen wertvoll, auch wenn Sie nicht mehr nachweisen können, dass Sie der Käufer waren.
-1 ** Dies ist völlig falsch. ** Das Signieren eines Hashs ist nicht dasselbe wie das Verschlüsseln eines Hashs.
@forest: Möchten Sie näher darauf eingehen?AFAIK in allen Signaturschemata mit asymmetrischen Schlüsseln, genau das ist es.
@BlueRaja-DannyPflughoeft Es ist nicht und ist tatsächlich näher an der Entschlüsselung.Bei der Verschlüsselung für RSA (als Beispiel) wird _c ≡ m e (mod N) _ berechnet, wobei alle Werte außer _m_ öffentlich sind.Dies würde beim Signieren einer Datei offensichtlich nicht funktionieren, oder jeder könnte eine Datei signieren, indem er den öffentlichen Schlüssel kennt.
@forest Sie versuchen pedantisch zu sein, indem Sie über Semantik streiten, aber aus pedantischer Sicht sind Sie falsch."Mit dem privaten Schlüssel verschlüsseln" ist die richtige Formulierung - "Vor dem Verschlüsseln entschlüsseln" funktioniert nur, wenn die Verschlüsselung / Entschlüsselung kommutativ ist. Dies gilt für RSA, nicht jedoch für andere asymmetrische Schemata.
@BlueRaja-DannyPflughoeft Dies ist keine Semantik, dies ist Kryptographie.Der Vorgang des Signierens unterscheidet sich vom Vorgang des Verschlüsselns nicht nur für RSA, sondern auch für alle anderen Kryptosysteme.Beachten Sie, dass dies noch deutlicher ist, wenn Sie RSA aus der realen Welt mit Polsterung und nicht RSA aus dem Lehrbuch verwenden.Insbesondere die Verschlüsselung löst per Definition eine Nachricht an die Potenz von _e_ aus, modulo eine öffentliche zusammengesetzte Zahl (_N_), wobei _e_ ein öffentlicher Exponent ist.Der öffentliche Schlüssel wird auch als das Tupel _e, N_ definiert.
@BlueRaja-DannyPflughoeft Ich glaube nicht, dass dies bei allen Signaturschemata mit öffentlichem Schlüssel der Fall ist.ECDSA ist ein Signaturalgorithmus, der sicherlich keinen Verschlüsselungs- oder Entschlüsselungsschritt hat.ECDH ist so nah wie möglich an der "Verschlüsselung" mit dem angegebenen öffentlichen Schlüssel, und das ist es nicht einmal wirklich.Es wird für den symmetrischen Schlüsselaustausch verwendet.
@BlueRaja-DannyPflughoeft Sie könnten argumentieren, dass Verschlüsselung und Signierung einige der gleichen Vorgänge beinhalten, aber viele Unterschiede, z. B. wo Sie den Exponenten erhalten und welche Auffüllung verwendet wird, sind sehr wichtig.Ohne die Unterscheidung zwischen dem für Signaturen verwendeten Auffüllen und der Verschlüsselung (oder Entschlüsselung) wäre das Schema trivial zerbrechlich und nutzlos.Die Identität von RSA ist _ (m ^ d mod n) ^ e = m mod n_ und sowohl das Signieren als auch die Verschlüsselung nutzen dies aus, aber das ist ungefähr die einzige Ähnlichkeit, die sie haben.
@forest Ich bin mir nicht mal sicher, was Sie dagegen haben.Wird in der Antwort hier der Ausdruck * "... verwendet ihren öffentlichen Schlüssel zum Entschlüsseln" * verwendet?Ist Ihr gesamtes Argument hier, dass das Wiederherstellen des Hashs des Unterzeichners unter Verwendung seines öffentlichen Schlüssels keine "Entschlüsselung" darstellt (oder im weiteren Sinne, dass das Signieren des Hashs keine Ausgabe erzeugt, die man als "Verschlüsselung" des ursprünglichen Hashs bezeichnen kann?)?
@forest Ich würde gerne einpacken, um zu sehen, ob ich näher komme :).Wir haben also verschiedene Funktionen / Algorithmen zum Signieren und Verschlüsseln der Daten, und das Ergebnis ist jeweils unterschiedlich.Unter diesem Gesichtspunkt kann ich sehen, warum Sie darauf bestehen, dass es sich um unterschiedliche Operationen handelt.Eine andere Sache, die ich nicht ganz verstanden habe, ist - Sie haben gesagt, dass "... jeder eine Datei signieren kann, wenn er den öffentlichen Schlüssel kennt".Was wäre dann der Sinn, etw mit Ihrem öffentlichen Schlüssel zu signieren?Vielleicht vermisse ich dort etwas.
@zgulser Bei asymmetrischer Krypto verschlüsseln Sie eine geheime Nachricht mit dem öffentlichen Schlüssel, sodass nur jemand mit dem geheimen privaten Schlüssel sie entschlüsseln kann.Sie signieren etwas mit dem geheimen privaten Schlüssel, damit jeder mit dem öffentlichen Schlüssel überprüfen kann, ob er genau die Daten hat, die Sie signiert haben.Forest ist verärgert, weil in der Antwort ursprünglich das Wort "verschlüsseln" anstelle von "signieren" verwendet wurde, was "den öffentlichen Schlüssel zum Signieren verwenden" bedeutet, was sinnlos wäre.
@zgulser "Jeder könnte eine Datei signieren, indem er Ihren öffentlichen Schlüssel kennt" wäre das, was passieren würde, wenn es mit der Verschlüsselung identisch wäre.Der Punkt ist, dass das den Zweck zunichte machen würde.
Die Bearbeitung ist besser, aber "_Bob verwendet ihren öffentlichen Schlüssel, um ihn zu entschlüsseln und ihren berechneten Hash_ zu erhalten" ist immer noch falsch.Um eine RSA-Signatur zu überprüfen, muss überprüft werden, ob _s ^ e ≡ m (mod N) _ ist, und es muss nichts entschlüsselt und verglichen werden.Ich habe die Antwort bearbeitet, um diese Aussage mit der Änderung von "verschlüsseln" in "signieren" in Einklang zu bringen.Sie können die Bearbeitung jederzeit rückgängig machen, wenn Sie dies nicht beabsichtigt haben.
@zgulser Richtig.Bei der Überprüfung wird geprüft, ob die Signatur für den öffentlichen Schlüssel korrekt ist.
@J ... "* dass das Wiederherstellen des Hash des Unterzeichners *" Das Überprüfen einer Signatur hat konzeptionell nichts mit dem "Wiederherstellen" des Hash des Unterzeichners zu tun.Dass es möglicherweise ein bestimmtes Kryptosystem gibt, in dem Sie dies tun, ist kein guter Grund, den Schritt so zu beschreiben, wenn Sie nicht über dieses bestimmte Kryptosystem sprechen.Es ist so schade, dass die Leute dazu neigen, zuerst RSA zu lernen, weil es in vielerlei Hinsicht ein Ausreißer ist und die Leute dazu veranlassen, asymmetrische Kryptographie im Allgemeinen so zu beschreiben, als ob diese äußeren Eigenschaften grundlegend wären.
forest
2018-11-27 06:44:26 UTC
view on stackexchange narkive permalink

Leider sind die Antworten hier, die behaupten, dass das Signieren der Verschlüsselung des Message Digest entspricht, nicht ganz richtig. Beim Signieren wird kein Digest der Nachricht verschlüsselt. Während es richtig ist, dass eine kryptografische Operation auf einen Auszug der Nachricht angewendet wird, die durch einen kryptografischen Hash-Algorithmus erstellt wurde, und nicht auf die Nachricht selbst, unterscheidet sich der Vorgang des Signierens von der Verschlüsselung.

Entnommen aus https : //www.cs.cornell.edu/courses/cs5430/2015sp/notes/rsa_sign_vs_dec.php:

In der abstrakten Welt der Lehrbücher tun dies RSA-Signierung und RSA-Entschlüsselung sich als dasselbe herausstellen. In der realen Welt der Implementierungen sind sie es nicht. Verwenden Sie daher niemals eine reale Implementierung der RSA-Entschlüsselung, um RSA-Signaturen zu berechnen. Im besten Fall wird Ihre Implementierung auf eine Weise unterbrochen, die Sie bemerken. Im schlimmsten Fall führen Sie eine Sicherheitsanfälligkeit ein, die ein Angreifer ausnutzen könnte.

Machen Sie außerdem nicht den Fehler, von RSA zu verallgemeinern, um zu dem Schluss zu gelangen, dass jedes Verschlüsselungsschema als Algorithmus für digitale Signaturen angepasst werden kann. Diese Art der Anpassung funktioniert für RSA und El Gamal, jedoch nicht im Allgemeinen.


Das Erstellen einer digitalen Signatur für eine Nachricht umfasst das Ausführen der Nachricht über eine Hash-Funktion, Erstellen eines Digests (eine Darstellung mit fester Größe) für die Nachricht. Eine mathematische Operation wird für den Digest unter Verwendung eines geheimen Werts (einer Komponente des privaten Schlüssels) und eines öffentlichen Werts (einer Komponente des öffentlichen Schlüssels) durchgeführt. Das Ergebnis dieser Operation ist die Signatur, die normalerweise entweder an die Nachricht angehängt oder auf andere Weise daneben zugestellt wird. Jeder kann anhand der Signatur und des öffentlichen Schlüssels feststellen, ob die Nachricht von jemandem signiert wurde, der den privaten Schlüssel besitzt. Wie funktioniert das?

Ich werde RSA als Beispielalgorithmus verwenden. Zunächst ein kleiner Hintergrund zur Funktionsweise von RSA. Bei der RSA-Verschlüsselung wird die als Ganzzahl dargestellte Nachricht auf die Potenz eines bekannten Werts angehoben (dieser Wert beträgt meistens 3 oder 65537). Dieser Wert wird dann durch einen öffentlichen Wert geteilt, der für jeden öffentlichen Schlüssel eindeutig ist. Der Rest ist die verschlüsselte Nachricht. Dies wird als Modulo-Operation bezeichnet. Das Signieren mit RSA ist etwas anders. Die Nachricht wird zuerst gehasht, und der Hash-Digest wird auf die Potenz einer geheimen Nummer angehoben und schließlich durch denselben eindeutigen öffentlichen Wert im öffentlichen Schlüssel geteilt. Der Rest ist die Unterschrift. Dies unterscheidet sich von der Verschlüsselung dadurch, dass eine Zahl nicht auf einen bekannten öffentlichen Wert angehoben wird, sondern auf einen geheimen Wert, den nur der Unterzeichner kennt.

Obwohl die Generierung von RSA-Signaturen ähnlich ist Bei der RSA-Entschlüsselung auf Papier gibt es einen großen Unterschied zur Funktionsweise in der realen Welt. In der realen Welt wird eine Funktion namens Auffüllen verwendet, die für die Sicherheit des Algorithmus von entscheidender Bedeutung ist. Die Art und Weise, wie das Auffüllen zum Ver- oder Entschlüsseln verwendet wird, unterscheidet sich von der Art und Weise, wie es für eine Signatur verwendet wird. Die folgenden Details sind technischer ...


Um Lehrbuch RSA als Beispiel für asymmetrische Kryptographie zu verwenden, erfolgt die Verschlüsselung einer Nachricht m in Chiffretext c durch Berechnung von c ≡ m e sup> (mod N) , wobei e ein öffentlicher Wert ist (normalerweise eine Fermat-Primzahl), und N ist das nicht geheime Produkt zweier geheimer Primzahlen. Das Signieren eines Hashs m beinhaltet andererseits das Berechnen von s ≡ m d sup> (mod N) , wobei d ist die modulare Umkehrung von e und ist ein geheimer Wert, der aus den geheimen Primzahlen abgeleitet wird. Dies ist der Entschlüsselung viel näher als der Verschlüsselung, obwohl die Entschlüsselung durch Aufrufen von Signaturen immer noch nicht ganz richtig ist. Beachten Sie, dass andere asymmetrische Algorithmen möglicherweise völlig andere Techniken verwenden. RSA ist lediglich ein Algorithmus, der häufig genug ist, um als Beispiel verwendet zu werden.

Die Sicherheit des Signierens beruht auf der Tatsache, dass d ohne Kenntnis der geheimen Primzahlen schwer zu erhalten ist. Tatsächlich besteht der einzige bekannte Weg, um d von N zu erhalten, darin, N in seine Komponentenprimzahlen p einzubeziehen und q und berechne d ≡ e sup> -1 sup> mod (p - 1) (q - 1) . Es wird angenommen, dass das Faktorisieren sehr großer Ganzzahlen für klassische Computer ein unlösbares Problem darstellt. Dies ermöglicht die einfache Überprüfung einer Signatur, da dabei ermittelt werden muss, ob s e sup> ≡ m (mod N) ist. Das Erstellen einer Signatur erfordert jedoch Kenntnisse des privaten Schlüssels.

weil ich denke, dass es "nicht nützlich" ist (durch den Downvote-Tooltip-Wortlaut).Ich denke, es wird die Anfängerfragen von OP nicht beantworten, und Ihr Punkt ist nicht klar erklärt oder gerechtfertigt.Inwiefern ist die zweite Gleichung der Entschlüsselung näher und warum ist dies ein relevanter Teil, auf den man sich konzentrieren muss?Warum dann ein Link, der besagt, dass es keine Entschlüsselung ist, wenn Sie versuchen, streng korrekt zu sein?Das Ändern der Antwort von @Lithilion's auf "* verarbeitet * nur den Hash" würde es weniger falsch machen, aber einfach genug, um für OP nützlich zu sein.
@TessellatingHeckler Vielen Dank für das Feedback.Ich habe angegeben, dass es der Entschlüsselung ähnlicher ist als der Verschlüsselung, aber immer noch nicht wirklich verschlüsselt (daher der Link).Ich werde auch die Frage bearbeiten, um eine einfachere Erklärung hinzuzufügen und die technischen Details als Extra zu belassen.
@TessellatingHeckler Leider erhalten Sie manchmal viele falsche Antworten mit verwirrenden Kommentaren und sogar Gegenstimmen zu einer einfachen Frage.In diesem Fall ist es sehr schwierig, eine einfache Antwort zu erstellen, die erklärt, was mit den scheinbar einfachen Antworten nicht stimmt.
Möglicherweise möchten Sie einen Algorithmus verwenden, bei dem Signieren und Verschlüsselung für Ihr Beispiel offensichtlich unterschiedlich aussehen.
Warum wird diese Methode der Verschlüsselung des Hashs vorgezogen?Welche Probleme hat die Verschlüsselung des Hashs, die dies nicht tut?
@forest RSA ist aufgrund der Beziehung zwischen Verschlüsselungs- und Signaturalgorithmen ein äußerst ungewöhnlicher Algorithmus.Dies macht es zum schlechtesten Beispielalgorithmus, den Sie hätten wählen können, und wenn Sie ihn wählen, können Sie leicht jemanden verwirren, der glaubt, dass die einzigartigen Eigenschaften von RSA allgemeine Eigenschaften von Kryptosystemen sind.Diese unglückliche Verwirrung ist überall in den Antworten auf diese einfache Frage zu finden. Ihre Antwort trägt viel zu dieser Verwirrung bei und nichts, um sie zu korrigieren.
Der Hash ist völlig optional.Es ist üblich und eine Optimierung, aber Sie können einfach die gesamte Nachricht signieren.
@HenkHolterman Nein, das konnten Sie nicht.Die Größe der Nachricht selbst ist begrenzt.Ich nehme an, Sie könnten eine Nachricht in mehrere Blöcke aufteilen und einzeln signieren, aber genau wie Sie einen großen Wert nicht verschlüsseln können, können Sie keinen großen Wert signieren.Die Verschlüsselung mit öffentlichen Schlüsseln unterscheidet sich erheblich von der symmetrischen Verschlüsselung.
@DavidSchwartz Ich habe RSA als Beispiel verwendet, nicht nur, weil es extrem häufig ist, sondern weil es leicht zu verstehen ist (ich werde auch nicht versuchen zu erklären, wie elliptische Kurvensignaturen funktionieren).Ich habe jedoch auf Inhalte verlinkt und diese zitiert, um zu erklären, dass auf IFP und DLP basierende Algorithmen wie RSA und El Gamal (oder DSA) in dieser Hinsicht einzigartig sind, um Missverständnisse zu vermeiden.Hast du irgendwelche Vorschläge?
Nachdem ich mir 30 Minuten Zeit genommen habe, um die Antwort und das verknüpfte Material sorgfältig zu lesen, komme ich zu dem Schluss, dass ich meine Zeit verschwendet habe und mein ursprüngliches Verständnis korrekt war: Der Unterzeichner verschlüsselt mit dem privaten Schlüssel und alle anderen können ihn mit dem öffentlichen Schlüssel entschlüsseln.Es ist bekannt, dass RSA sehr langsam ist, daher möchten wir dies nur für kleine Nachrichten tun, daher das Hashing.und es ist bekannt, dass Lehrbuch RSA unsicher ist, daher die "Polsterung".Das macht das Signieren nicht zu einer ganz anderen Operation: Es wird immer noch eine Nachricht an einen privaten Exponenten-Mod N gesendet. Ich finde die Prämisse Ihrer Antwort für mein Verständnis überhaupt nicht hilfreich.
@Luc Dieselbe Falltür wird für das Signieren, Überprüfen, Verschlüsseln und Entschlüsseln verwendet.RSA als Kryptosystem ist jedoch viel mehr als nur die Falltürfunktion (die die Leute oft vergessen).Wenn Sie etwas in der realen Welt signieren, geht viel mehr als nur modulare Potenzierung.Ich mache nichts weiter als den allgemeinen Konsens über [crypto.se] zu papageien.
@Luc Ihr ursprüngliches Verständnis ist immer noch falsch.RSA-PKCS # 1v1.5 ist eine spezielle Art von Signatur, die die Wiederherstellung ermöglicht: Sie können den Hash der Nachricht anhand des Signaturwerts ermitteln.Eine Signatur mit Wiederherstellung ähnelt oberflächlich der Verschlüsselung des Hashs, weist jedoch unterschiedliche Sicherheitseigenschaften auf.Sie sollten sich ansehen, wie andere gängige Signaturschemata funktionieren. Das häufigste ist ECDSA.ECDSA erlaubt keine Wiederherstellung und ähnelt nicht einmal oberflächlich der „Verschlüsselung“ mit dem privaten Schlüssel.
@Gilles Ich wusste, dass ECC in Bezug auf die Unterzeichnung anders funktionierte, hatte es aber noch nicht untersucht.Danke, dass du mich daran erinnert hast, das werde ich tun!
@Luc Die Mathematik von ECC ist etwas kompliziert.Wenn Sie sich mit Mathematik befassen möchten, verwendet [DSA] (https://en.wikipedia.org/wiki/Digital_Signature_Algorithm) denselben Signaturmechanismus wie ECDSA für verschiedene mathematische Grundlagen.Wenn Sie eine übergeordnete Ansicht wünschen, habe ich jetzt eine Antwort auf diese Frage veröffentlicht, die sich nicht mit der Funktionsweise von Signaturalgorithmen im Inneren befasst und stattdessen deren Verwendung erläutert.
@Luc Beachten Sie außerdem, dass beim Überprüfen einer RSA-Signatur der ursprüngliche Hash nicht "wiederhergestellt" werden muss.Zur Überprüfung erhöhen Sie die Signatur auf die Potenz des öffentlichen Exponenten und prüfen, ob sie mit dem Hash der Nachricht modulo dem öffentlichen Modul übereinstimmt.Das ist keine Ver- oder Entschlüsselung.
papajony
2018-11-26 19:31:30 UTC
view on stackexchange narkive permalink

Natürlich kann man wählen, ob man (einen Teil) der gewünschten Informationen signieren und andere Teile nicht signieren möchte. Wenn wir jedoch "eine Datei signieren" sagen, beziehen wir uns normalerweise auf das Signieren der gesamten Datei plus der Datei-Metadaten (z. B. Zeitstempel für Dateimodifikationen). So funktionieren OpenPGP und GPG.

Wenn es sich jedoch nicht um eine Datei handelt, beispielsweise um eine XML-Signatur, müssen Sie angeben, welche Teile des XML-Inhalts tatsächlich von der Signatur abgedeckt werden.

Versuchen Sie außerdem, Signaturen von der Verschlüsselung zu unterscheiden. Dies sind zwei unabhängige Angelegenheiten. Eine Datei kann unverschlüsselt + signiert oder verschlüsselt + nicht signiert oder eine andere Kombination sein.

Wenn ich die gesamte Datei signiere, bedeutet dies, dass der Empfänger nicht darauf zugreifen kann (oder auf den Inhalt), bis er durch den entsprechenden öffentlichen Schlüssel überprüft wurde, oder?
@zgulser Falsch ... im Allgemeinen.Das Signieren einer Datei (im Allgemeinen) ändert nichts an der zu signierenden Datei (andere Protokollebenen könnten dies ungefähr zur gleichen Zeit tun, dies ist jedoch nicht erforderlich).Ein "reiner" Signaturprozess würde "die signierten Daten" (unberührt) und "eine verschlüsselte Signatur dieser Daten" (die beweist, dass Sie die Daten signiert haben) belassen.
Das Signieren einer Datei bedeutet, dass Sie eine Signatur erstellen, die von der Datei selbst getrennt ist.Die empfangende Partei kann die Signatur validieren, um zu überprüfen, ob die Datei tatsächlich von Ihnen stammt, und in diesem Fall benötigt sie den Schlüssel.Möglicherweise ignoriert er die Signatur.
Versuchen Sie, sich die Unterschrift als Papierdokument mit einer menschlichen Unterschrift unten vorzustellen.Sie überprüfen die Signatur (validieren sie), um sicherzustellen, dass der Dokumentinhalt tatsächlich vom Absender erstellt wurde.Sie können das Dokument jedoch auch akzeptieren, ohne sich um die Unterschrift zu kümmern.Aber warum sollten Sie das tun wollen?Mit der Signatur können Sie feststellen, ob das Dokument (oder die Datei) authentisch ist.
@TripeHound thx.Ich habe die Idee.Mir bleibt nur noch ein Punkt übrig - wie werden die Datei und die Signatur angehängt?Enthält die Datei beispielsweise die Signatur als Metadaten?Oder werden sie als separate Einheiten über das Netzwerk an den Empfänger übertragen?
Nun, Sie haben verschiedene Arten von Signaturen.Sie können die Datei + Signatur in einer bündeln oder eine separate Signaturdatei (sogenannte getrennte Signatur) erstellen.
"Versuchen Sie auch, Signaturen von Verschlüsselung zu unterscheiden. Dies sind zwei unabhängige Aspekte."Sie sind aus algorithmischer Sicht im Wesentlichen der gleiche Prozess.
@Acccumulation Nein, das sind sie nicht.Das sind zwei völlig verschiedene Dinge.Ein bestimmtes Kryptosystem verwendet möglicherweise für beide Vorgänge denselben Prozess, dies ist jedoch ein Attribut dieses bestimmten Kryptosystems.Diese Frage * betrifft * kein bestimmtes Kryptosystem, daher sind die Eigenschaften bestimmter Cyrptosysteme nur relevant, wenn Sie mehrere vergleichen.
Dies erklärt immer noch nicht, was das Signieren ist.
@DavidSchwartz TMe: "Sie sind im Wesentlichen der gleiche Prozess."Sie: "Nein, sie sind nicht ... [sie sind] der gleiche Prozess."Wenn Sie bestreiten möchten, dass die Tatsache, dass es sich um denselben Prozess handelt, relevant ist, ist dies eine Sache, aber bestreiten Sie nicht die Tatsache, dass es sich um denselben Prozess handelt, wenn Sie in Ihrem nächsten Satz anerkennen, dass es sich um (oder als) handeltSie sagen, "könnte passieren", um der gleiche Prozess zu sein.
@Acccumulation Versuchen Sie absichtlich, Menschen zu verwirren?Autos und Fahrräder sind grundsätzlich verschiedene Dinge.Jemand könnte in der Lage sein, ein Fahrzeug zu bauen, das sowohl ein Auto als auch ein Fahrrad ist, aber die Existenz dieses Fahrzeugs als Ausrede zu verwenden, um zu sagen, dass Autos und Fahrräder im Wesentlichen gleich sind, ist absurd, wenn wir nicht speziell über dieses eine seltsame sprechenAuto / Fahrrad.
@DavidSchwartz Das ist kaum eine passende Analogie.Dinge werden nach ihrer Form als Autos oder Fahrräder klassifiziert.Sie bestehen darauf, Dinge nach ihrer Verwendung zu klassifizieren.Als ich darauf hinwies, dass zwei Dinge in ihrer Form gleich sind, haben Sie zwischen ihrer Verwendung und ihrer Form unterschieden.Ich habe nie gesagt, dass Verschlüsselung und Signieren dasselbe sind, ich habe gesagt, dass sie denselben Prozess verwenden.Wenn Sie mich beschuldigen, Menschen zu verwirren, sollten Sie nicht falsch darstellen, was ich sage.
@Acccumulation Aber sie verwenden nicht den gleichen Prozess.Schauen Sie sich zum Beispiel elliptische Kurvensignaturen im Vergleich zur elliptischen Kurvenverschlüsselung an.Sie verwenden völlig unterschiedliche Prozesse.Dass Sie sich einen Fall vorstellen können, in dem sie zufällig der gleiche Prozess sind, macht sie nicht zum gleichen Prozess, es sei denn, wir sprechen über diesen einen speziellen Fall.Möglicherweise gibt es ein Produkt, das Sie auf die gleiche Weise reinigen und für die Lagerung vorbereiten.Aber das macht das Reinigen und Vorbereiten der Lagerung nicht zum selben Prozess, es sei denn, wir sprechen zufällig über diese bestimmte Sache.
Gilles 'SO- stop being evil'
2018-12-15 20:59:32 UTC
view on stackexchange narkive permalink

Das Signieren einer Datei oder allgemeiner das Signieren eines Inhalts (eine E-Mail-Nachricht, der Text einer E-Mail-Nachricht, ein Teilbaum eines XML-Dokuments, ein Teil eines Zertifikats, ein TLS-Handshake usw.) bedeutet das Erstellen eines Folge von Bytes, die als Signatur bezeichnet wird. Dieser Prozess hat bestimmte Eigenschaften:

  • Es gibt eine Methode zum Überprüfen der Signatur. Wenn Sie die Signatur überprüfen, erhalten Sie ein boolesches Ergebnis: "Dies ist eine gute Signatur der Datei" oder "Dies ist keine gute Signatur der Datei".
  • Eine gute Signatur für eine Datei ist niemals eine gute Signatur für eine andere Datei. Daher garantiert eine gute Signatur, dass die Datei authentisch ist. Authentizität bedeutet in Bezug auf die Sicherheit, dass einige Daten tatsächlich von dem Ort stammen, von dem sie stammen sollen.
  • Es gibt einen geheimen Wert, der als privater Schlüssel oder bezeichnet wird geheimer Schlüssel . Es ist unmöglich, eine gute Signatur einer Datei zu erstellen, wenn Sie diesen geheimen Wert nicht kennen.
  • In einem Schema mit öffentlichem Schlüssel ist dem privaten Schlüssel ein Wert zugeordnet, der als öffentlicher Schlüssel . Wenn Sie den öffentlichen Schlüssel kennen, können Sie Signaturen überprüfen, aber keine Signatur einer anderen Datei erstellen.

Es ist wichtig zu wissen, dass jeder eine Datei signieren kann, aber er kann Unterschreiben Sie es nur mit ihrem eigenen privaten Schlüssel. Sie können eine Datei nicht mit dem privaten Schlüssel eines anderen signieren, es sei denn, Sie schaffen es irgendwie, den privaten Schlüssel zu erhalten, indem Sie beispielsweise dessen Computer hacken. Zu wissen, dass eine Datei mit einer guten Signatur geliefert wird, sagt also nichts aus: Wichtig ist zu wissen, dass eine gute Signatur mit dem erwarteten privaten Schlüssel erstellt wurde. Dies bedeutet, dass der Prüfer den öffentlichen Schlüssel im Voraus kennen muss. Wenn der öffentliche Schlüssel zusammen mit der Signatur und der Nachricht übertragen wird, beweist er nichts an sich, aber es kann nützlich sein, wenn es einen Mechanismus gibt, der es dem Prüfer ermöglicht, den öffentlichen Schlüssel zu überprüfen. Ein solcher Mechanismus wird als öffentliche Schlüsselinfrastruktur bezeichnet. Mit anderen Worten, die Signaturoperation verwandelt ein Versprechen der Vertraulichkeit des privaten Schlüssels und ein Versprechen der Authentizität des öffentlichen Schlüssels in eine Garantie für die Authentizität der Datei.

Eine Signatur bedeutet im Allgemeinen „Ich stimme zu dieses Inhalts ”. Was "genehmigen" bedeutet, hängt vom Kontext ab. Beispiel:

  • Wenn Microsoft ein Windows-Update verteilt, das mit dem Windows-Update-Signaturschlüssel von Microsoft signiert ist, bedeutet die Signatur, dass dieses bestimmte Code-Update von Microsoft genehmigt wurde. Wenn jemand Malware verbreiten und als Windows-Update weitergeben möchte, kann er keine gute Signatur dafür erstellen. Daher lehnt die Windows-Update-Anwendung das Update ab.
  • Wenn Sie es erhalten Eine E-Mail, die signiert ist, bedeutet, dass sie wirklich von der Person geschrieben wurde, die sie signiert hat (oder dass ihr Computer kompromittiert wurde). Sie erhalten diese Garantie im Allgemeinen nicht aus der Zeile From: einer E-Mail, da jeder dort schreiben kann, was er will. (Einige Verteilungssysteme machen es schwieriger, aber im Internet gibt es im Allgemeinen keine Möglichkeit, Personen daran zu hindern, in die Zeile From: zu schreiben, was sie wollen.)
  • Wenn eine Zertifizierungsstelle Unterzeichnet ein Zertifikat. Sie sagen, dass sie überprüft haben, dass der Eigentümer des im Zertifikat aufgeführten Domainnamens der Eigentümer des privaten Schlüssels ist, für den sich der entsprechende öffentliche Schlüssel im Zertifikat befindet. Diese Art von Anweisung, die einen Namen mit einem öffentlichen Schlüssel verknüpft, ist die Grundlage für Infrastrukturen mit öffentlichen Schlüsseln.
  • Wenn ein TLS-Server den Handshake einer TLS-Verbindung signiert, kann der Client dies tun Überprüfen Sie, ob sie der sind, für den sie sich ausgeben. Jeder kann einen TLS-Handshake signieren, aber nur Google kann einen TLS-Handshake mit der öffentlichen Signatur für google.com signieren.

Die Signatur ist ein separates Datenelement. Es kann zusammen mit den signierten Daten in einer Zip-Datei gebündelt, als Anhang zu einer E-Mail hinzugefügt, als separater Knoten zu einer XML-Datei hinzugefügt usw. In einem Zertifikat wird die Signatur neben den signierten Daten gebündelt. Bei einem TLS-Handshake ist die Signatur ein separater Teil der vom Server gesendeten Nachrichten.

Signieren wir die gesamte Datei, damit sie verschlüsselt wird?

Nein. Die Signatur hängt vom Inhalt der Datei ab, Sie können den Inhalt der Datei jedoch nicht aus der Signatur wiederherstellen. Der Inhalt muss zusammen mit der Signatur übertragen werden. Der Inhalt kann verschlüsselt werden, ist jedoch unabhängig von der Signatur.

Gibt es einen einfachen Text, den wir signieren und weiterleiten, z. B. eine Zip-Datei, und die empfangende Seite lassen Überprüft dieses Teil anhand eines bestimmten Protokolls, bevor Sie fortfahren?

Ja, genau. Der Absender übergibt den Dateiinhalt (die Zip-Datei oder den Text oder was auch immer) zum Signieren und den privaten Schlüssel an die Signaturfunktion und gibt die Signatur heraus. (Das Wort "Signatur" kann sich entweder auf diesen Prozess oder auf die Ausgabe dieses Prozesses beziehen.) Der Empfänger übergibt den Inhalt und den öffentlichen Schlüssel an die Überprüfungsfunktion und erhält das Ergebnis "es ist gut" oder "es ist schlecht". Im Allgemeinen weigert sich der Empfänger, irgendetwas mit dem Inhalt zu tun, wenn die Signatur schlecht ist.

Wenn wir die gesamte Datei signieren, kann sie meines Erachtens sicherer sein als der Inhalt verschlüsselt (oder signiert) sein.

Wenn Sie etwas signieren, wird nichts verschlüsselt. Das Signieren der gesamten Datei ist sicherer als das Signieren eines Teils einer Datei in dem Sinne, dass die Signatur nur eine gewisse Sicherheit für den signierten Teil bietet. Wenn Sie einen Teil einer Datei signieren, kann der nicht signierte Teil alles sein.

Acccumulation
2018-11-27 03:10:38 UTC
view on stackexchange narkive permalink

Im allgemeinsten Sinne bedeutet "Signieren" in diesem Zusammenhang einen Prozess, der vom Text und etwas geheimem Wissen abhängt, so dass jeder, der Zugriff auf den Text und geheimes Wissen hat, die Ausgabe erstellen kann, und jeder, dem das gegeben wird Text und die Ausgabe können überprüfen, ob die Ausgabe korrekt ist, aber es ist für jeden, der keinen Zugriff auf das geheime Wissen hat, unmöglich, unabhängig die richtige Ausgabe zu erstellen.

Eine Methode hierfür ist die Verwendung der Verschlüsselung mit öffentlichem Schlüssel. Hierbei handelt es sich um ein System, bei dem zwei Schlüssel und ein kryptografischer Prozess vorhanden sind, sodass der kryptografische Prozess mit einem Schlüssel angewendet wird. Anschließend wird das Ergebnis verwendet und der kryptografische Prozess angewendet Wenn Sie mit der anderen Taste arbeiten, erhalten Sie die ursprüngliche Eingabe. Einer dieser Schlüssel ist öffentlich verteilt und wird als "öffentlicher Schlüssel" bezeichnet. Der andere Schlüssel wird geheim gehalten und als "privater Schlüssel" bezeichnet.

Wenn der Zugriff auf Informationen eingeschränkt wird, worauf sich „Verschlüsselung“ im Allgemeinen bezieht, besteht die Verschlüsselung mit öffentlichem Schlüssel darin, dass der Absender den öffentlichen Schlüssel des Empfängers in der Datei verwendet und der Empfänger seinen privaten Schlüssel in der Datei verwendet Ergebnis; Somit kann nur der beabsichtigte Empfänger die Datei lesen. Das Signieren kann erfolgen, indem der Absender seinen privaten Schlüssel und der Empfänger den öffentlichen Schlüssel des Absenders verwendet. Während im ersten Fall nur der Empfänger die Datei lesen kann (da nur er seinen privaten Schlüssel hat), kann im zweiten Fall nur der Absender die Datei senden (da nur er seinen privaten Schlüssel kennt). Im ersten Fall kann jeder schreiben, aber nur einer kann lesen, während im zweiten Fall nur eine Person schreiben kann, aber jeder lesen kann.

Wenn nur das Ergebnis der Verwendung des privaten Schlüssels des Absenders gesendet wird, muss jeder den öffentlichen Schlüssel des Absenders abrufen, um die Datei lesen zu können. So oft wird auch die Originaldatei gesendet, damit die Leute sie lesen können, ohne diesen Prozess durchlaufen zu müssen. Da das Senden sowohl der Datei als auch des Ergebnisses der Anwendung des kryptografischen Prozesses auf die gesamte Datei das Senden von doppelt so vielen Daten wie nur der Datei bedeutet, wird normalerweise ein Hash verwendet, um die Größe der Signatur zu verringern. Dies kann durch Hashing der Datei und anschließendes Signieren des Hash erfolgen (und dann kann der Empfänger die Datei hashen und den kryptografischen Prozess mit dem öffentlichen Schlüssel auf die Hash-Datei anwenden und prüfen, ob dieser mit dem gesendeten signierten Hash übereinstimmt) / p>

Obwohl das Signieren einer Datei, das Überprüfen einer Signatur und die Verschlüsselung denselben kryptografischen Prozess verwenden können, bezieht sich der Begriff "Verschlüsselung" hauptsächlich darauf, wann dieser Prozess verwendet wird, um andere Personen vom Lesen der Datei abzuhalten. eher als zur Authentifizierung. Wenn wir den Prozess zur Geheimhaltung anwenden, senden wir nur das Ergebnis, da wir nicht möchten, dass nicht autorisierte Personen Zugriff auf den Klartext haben. Wenn wir uns authentifizieren, senden wir beide, damit der Empfänger überprüfen kann, ob sie übereinstimmen.

Wenn ein Absender möchte, dass nur der beabsichtigte Empfänger eine Datei lesen kann, kann der Absender als separate Datei verschlüsseln Prozess. Das würde also funktionieren, wenn der Absender die Datei hasht, ihren privaten Schlüssel auf das Ergebnis anwendet, das Ergebnis an die Datei anhängt, dann den privaten Schlüssel des Empfängers auf die Datei + Signatur anwendet und dann Senden Sie das an den Empfänger. Somit würde der Empfänger message = recept.public (Datei + sender.private (Hash (Datei)) erhalten. Der Empfänger würde dann seinen privaten Schlüssel auf die Nachricht anwenden, den ursprünglichen Dateiteil des Hashs Ergebnis und prüfen Sie, ob dies mit dem öffentlichen Schlüssel des Absenders übereinstimmt, der auf die Signatur angewendet wird:

Hash ((Empfänger.Privat (Nachricht)). Datei) == Sender.Public ((Empfänger.Privat () Nachricht)). Unterschrift)

Lassen Sie uns [diese Diskussion im Chat fortsetzen] (https://chat.stackexchange.com/rooms/86853/discussion-between-david-schwartz-and-acccumulation).


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...