Komplemente
Voraussetzung für die Nutzung von Komplementen ist das Anschalten des entsprechenden Features.
Komplemente sind Geheimnisse, deren Inhalt nicht von key.matiq gespeichert wird. key.matiq speichert lediglich einen Hinweis in einem Komplement-Objekt ab.
Tutorial
Neben dieser Beschreibung, gibt es auch ein eigenes Tutorial, das die Handhabung von Komplementen illustriert.
Einzufügende Komplemente
Beispiel: In einem Geheimnis-Objekt "Meins" wird das Kennwort
Mein-geheimes#Passwort
gespeichert.
Das Komplement mit Namen "Mag" lautet
No.10
mit dem Hinweis "Untergasse".
Der Box-Inhaber muss bei diesem Hinweis immer an die Downing Street denken, in deren Nummer 10 einst Magaret Thatcher residierte.
Wenn er jetzt sein Kennwort für "Meins" in
Mein-geheimes#Passwort{ Mag }
ändert, dann wird ihm bei der Anzeige der Hinweis
Untergasse
eingeblendet und er kann wählen, den Komplement-Inhalt (No.10
)
direkt einzugeben. Dann wird in der Anzeige
{ Mag }
durch
No.10
ersetzt. Es wird also angezeigt:
Mein-geheimes#PasswortNo.10
Sie brauchen aber
No.10
gar nicht einzugeben. Genauso gut können Sie auch
{ Mag }
erst bei Verwendung des Kennworts händisch ersetzen.
Der Komplement-Bezug
{ Mag }
kann übrigens irgendwo im Kennwort eingefügt werden. Er wird – wenn
die automatische Ersetzung gewählt wird – an genau dieser Stelle
durch den Komplement-Inhalt (No.10
) ersetzt.
Zu addierende Komplemente
Achtung: Bitte lesen Sie die kommenden Abschnitte bis zur "Zusammenfassung: additive Komplemente" , wenn Sie diese Methode benutzen wollen, da wichtige Details erst nach und nach erläutert werden, um es möglichst einfach zu halten.
Bei kurzen Ziffernfolgen mit fester Länge ist ein einzufügendes Komplement nicht sehr sinnvoll, da dadurch nur noch ein kleiner Informationsteil vor key.matiq verborgen gehalten werden kann. Z. B. bestehen EC-Karten-PINs aus vier Dezimalziffern. Nur zwei abzuspeichern und sich zwei zu merken, wäre eine recht schwache Methode.
Wesentlich stärker ist es, von der wahren PIN eine Zahl (das Komplement) abzuziehen und in key.matiq zu speichern und sich die komplementäre Zahl zu merken.
Beispiel: Die PIN ist 4711 und das Komplement mit Namen "langweilig" ist 0815. Dann wird
3896{+ langweilig}
abgespeichert. Später kann man dann aus 3896 + 0814 den wahren Wert berechnen.
Um Ihnen die Subtraktion zu erleichtern, können Sie eigeben:
4711-0815{+ langweilig }
Das wird (ohne dass der Wert zum key.matiq-Server übertragen wird) sofort per JavaScript übersetzt in
3896{+ langweilig}
Die Ersetzung von
4711-0815
durch
3896
können Sie einfach überprüfen, indem Sie nochmals das Eingabefeld aufdecken. Somit können Sie sicherstellen, dass nicht doch versehentlich das eigentliche Geheimnis (4711) zum Server übertragen wird. Wenn Sie nämlich sich beim Komplement vertippen (z. B. statt "+" irgendein anderes Zeichen oder einen nicht existierenden Komplementname), dann wird bei der Eingabe nichts ersetzt und angenommen, dass die gesamte Eingabe das abzuspeichernde Geheimnis darstellt.
Keine Angst, Sie müssen nicht jedes Mal überprüfen, ob der Differenz-Ausdruck (im Beispiel "4711-0811") als solcher erkannt und durch seinen Wert ersetzt wurde. Da solche Ersetzungen immer durch eine Meldung angezeigt werden, sollten Sie nur stutzig werden und nachschauen, wenn diese Meldung unterbleibt.
Überlauf bei Addition (negativer Wert bei Subtraktion)
Eine PIN bei SIMs (oder EC-Karten) sollte genau vier, ein PUK genau acht Stellen haben. Damit die Ziffernzahl durch die Addition bzw. Subtraktion nicht verändert wird, arbeiten wir nicht mit der normalen Addition/Subtraktion, sondern mit der "Modulo"-Addition (bzw. -Subtraktion). Mathematikern ist das Verfahren geläufig, aber auch für Normalmenschen ist es nicht schwierig:
Stellen Sie sich für die PIN einfach einen einen Kilometerzähler mit 4 Stellen vor, der bei Überlauf wieder auf "0000" geht. 9999 plus 2 würde also 0001 ergeben. Umgekehrt würde 0001 minus 2 als Ergebnis 9999 ergeben.
Mit dem Taschenrechner können sie es so rechnen: Addieren Sie zunächst die beiden Zahlen. Kommt ein überlaufendes Ergebnis heraus, ziehen sie einfach 10000 (eine 1 mit 4 Nullen, bei einem PUK wäre es eine 1 mit 8 Nullen) ab.
Kommt bei einer Subtraktion mit dem Taschenrechner ein negatives Ergebnis heraus, so müssten Sie 10000 (bzw. 100000000) addieren.
Festlegung der Anzahl der Stellen
Bei einer PIN oder PUK ist die Stellenzahl eindeutig festgelegt. Es gibt z. B. auch 5-stellige PINs (z. B. bei manchen Online-Banking-Anwendungen). In jedem Fall werden führende Nullen mitgezählt.
Bei dem Komplement sollten Sie auch auf die Anzahl der Stellen und auf führende Nullen achten. Denn das Komplement muss genauso viele Stellen haben wie PIN oder PUK.
Was ist nun, wenn das Komplement nicht passt, also die Anzahl der Stellen unterschiedlich ist? (Dieser Fall ist nicht unwichtig, wie weiter unten erläutert wird.) Die Antwort ist einfach: Das Komplement wird passend gemacht.
Wenn das Komplement mehr Stellen hat, schneidet key.matiq für die Rechnung rechts ab. Beispiel: Die PIN hat 4 Stellen (z. B. 1234), als Komplement geben Sie aber 56789 ein. Dann wird für die Rechnung 5678 genommen. Aus
1234-56789{+ mein_komplement }
wird dann
5556{+ mein_komplement }
Denn:
1234 - 5678
ergibt
-4444
und
-4444 + 10000
ergibt
5556.
Geben Sie später bei der Geheimnisabfrage für das Komplement wieder
56789
ein, so erhalten Sie die wahre PIN
1234
angezeigt.
Wenn das Komplement weniger Stellen hat, so wird das Komplement so oft wiederholt, bis es genügend oder mehr Stellen hat und wird dann ggf. eingekürzt. Beispiel: Soll das Komplement 4 Stellen haben, heißt aber
567
so wird daraus
5675
("567567" eingekürzt auf 4 Stellen). Aus
1234-567{+ mein_komplement }
würde also
5559{+ mein_komplement }
und Sie könnten später bei der Abfrage für "mein_komplement"
wieder 567
eingeben, um die wahre PIN 1234
zu
erhalten.
Warum verlangt key.matiq nicht einfach genau dieselbe Stellenzahl? Wir wollen Ihnen ermöglichen, ein Komplement für möglichst viele Geheimnisse zu verwenden. Sie können so z. B. eine Telefonnummer verwenden, um PINs und PUKs abzuwandeln, aber auch Kennwörter, die nicht nur Ziffern erhalten (in diesem Fall als einfache Einfügung, ganz ohne ohne Addition).
Vor und nach dem Minuszeichen ("-") dürfen Leerzeichen und – in mehrzeiligen Geheimnissen – auch jeweils maximal ein Zeilenumbruch stehen.
1234 - 567{+ mein_komplement }
würde also auch erkannt und durch
5559{+ mein_komplement }
ersetzt.
Zusammenfassung: Additive Komplemente
Angenommen, Ihr Geheimnis ist "1234", das Komplement ist "567" und der Komplement-Name ist "mein_komplement", dann geben Sie
1234-567{+ mein_komplement }
in das Eingabefeld ein. Dieses wird dann automatisch ersetzt durch
5559{+ mein_komplement }
Wollen Sie das Geheimnis später wieder abfragen, so werden Sie nach dem Komplement gefragt und das eigentliche Geheimnis
1234
wird angezeigt.
Subtraktive Komplemente
Damit Sie nun nicht jedes Mal in diesem Handbuch nachschlagen müssen, ob nun zuerst (bei der Eingabe) subtrahiert und danach (bei der Abfrage) das Komplement addiert wird oder ob das Verfahren umgekehrt geht, ist auch der umgekehrte Fall implementiert: Sie geben
1234+567{- mein_komplement }
ein. Daraus wird
6909{- mein_komplement }
Bei der Abfrage des Geheimnisses (mit Eingabe von "567" für das Komplement) wird dann wieder das wahre Geheimnis "1234" ausgegeben.
Binäre Komplemente
In HTML können Sie nicht direkt binäre Daten eingegeben. Aber es gibt zwei indirekte Wege: Zum Einen können Sie binäre Dateien hochladen. Zum Anderen können Sie binäre Daten im Base64-Format kodieren, so dass diese in dieser Form nur noch aus lesbaren Zeichen bestehen.
Hochgeladene Dateien gehen direkt zum Server, ohne dass wir eine Möglichkeit sehen, diese per JavaScript zu modifizieren. Deshalb können bei key.matiq Uploads nicht mit Komplementen bearbeitet werden.
Das Base64-Format dagegen ist interessant: Wichtige Schlüssel wie private PGP-Schlüssel oder SSL-Zertifikate nutzen dieses Format. Um die Schlüssel nun nicht nur mit dem Hauptkennwort verschlüsselt auf dem Server zu speichern, sondern ihren wahren Wert der Server-Software völlig unzugänglich zu machen, bietet sich an, binäre Komplemente einzuführen. Diese bestehen aus einer Anzahl Bytes, die dann (wiederum per Base64-Kodierung) in eine lesbare Zeichenkette gewandelt werden.
Das Schöne am Base64-Format ist, dass es aus Klein- und Großbuchstaben, Ziffern und einigen Sonderzeichen besteht. Das heißt aber auch, dass normale Wörter, die man sich merken kann, in eine Byte-Folge gewandelt werden können, die mit dem wahren Schlüsselwert per bitweiser XOR-Operation verknüpft werden können.
Nehmen wir zum Beispiel die Bytefolge (in Hex-Darstellung)
E3 BD 75
In der Base64-Kodierung würde daraus
4711
Für das Komplement ist nun gar nicht so wichtig, welchen binären Wert es hat, sondern vielmehr, ob man es sich gut merken kann. Nehmen wir z. B.
1234
für die Base64-Kodierung. In der Hex-Darstellen entspricht das den Bytes:
D7 6D F8
Wir brauchen nun noch das bitweise XOR der Bytefolgen
E3 BD 75
und
D7 6D F8
Das Ergebnis ist
34 D0 8D
Dieses Ergebnis kann man wiederum in Base64 zeigen:
NNCN
Und nun versuchen wir, analog zum additiven Komplement das Geheimnis mit Komplement einzugeben:
4711^1234{^ ein_komplement }
Zu beachten: Das bitweise XOR ist gleichzeitig seine eigene Umkehroperation. Deshalb wird es sowohl für Berechnung des Eingabewertes als auch für die Abfrage verwendet. Allerdings funktioniert das nur immer für Kennworte, deren Längen durch 4 teilbar sind, siehe unten "Nicht jede Zeichenfolge taugt für XOR-Komplemente".
Nach der Eingabe, wird dieser Ausdruck automatisch ersetzt durch:
NNCN{^ ein_komplement }
Wird später dann das Geheimnis abgefragt und für das Komplement "ein_komplement" der Wert "1234" eingegeben, so erhält man die Zeichenkette
4711
also die Base64-Darstellung des wahren Geheimnisses (E3 BD 75)
Wie bei den additiven (und subtraktiven) Komplementen, müssen ggf. diese "passend gemacht" werden. Zunächst müssen Base64-Zeichenketten in der Länge ein Vielfaches von 4 ausmachen. Dazu wird je nach Ausgangslänge an das Komplement etweder gar nichts, oder "=", oder "==" oder "A==" angehängt.
Nach dem Base64-Dekodieren erhält man nun eine Bytefolge. Diese wird so oft wiederholt, bis diese zumindest so lang ist, wie die Bytefolge des eigentlichen Geheimnisses. Danach wird das wiederholte Komplement auf die benögtigte Länge beschnitten.
Wie bei Addition und Subtraktion können bei der Eingabe vor und nach dem XOR-Zeichen auch Leerzeichen und je maximal ein Zeilenumbruch stehen. (Achtung: Bei dem Komplement-Bezug
{^ ein_komplement }
darf aber zwischen "{" und "^" kein Leerzeichen stehen!)
Wichtig: Bedenken Sie, dass Sie nur gleichverteilte Geheimnisse ohne Muster unbedenklich mit XOR-Komplementen verwenden können. Anderenfalls könnte bei Kenntnis des nicht-kompletten Geheimnisses und Kenntnis des zu erwartenden Musters möglicherweise sowohl das komplette Geheimnis als auch das Komplement erraten werden. Das gilt insbesonderen, wenn das Komplement nur wenige Bytes aufweist.
ACHTUNG: Nicht jede Zeichenfolge taugt für XOR-Komplemente
Man könnte meinen, dass alle alphanumerischen Zeichenfolgen mit XOR-Komplementen behandelt werden können. Das Problem ist jedoch, dass es alphanumerische Zeichenfolgen gibt, die Base64-decodiert und dann wieder encodiert einen anderen Wert beim letzten Zeichen ergeben.
Bei Zeichenketten, die eine durch vier teilbare Länge haben, tritt dieses Problem jedoch nicht auf.
Beispiel: Die Zeichenkette "abcde===" wird beim Decoding mit Base64 in die Bytefolge 69 B7 1D umgewandelt und beim Encoding in "abcd", d. h. das "e" ist weggefallen.
Deshalb wird bei der Initialisierung der Ausdruck:
abcde^1234{^ complement }
abcd^1234{^ complement }e{}
umgewandelt, bevor "abcd^1234" durch "vtrl" ersetzt wird. Das letzte Zeichen "e" wird also nicht vom Komplement tangiert. (Da dieses Verhalten nur bis zu drei Zeichen betrifft, sollte es bei längeren Kennwörtern erträglich sein.) Die Schlusssequenz "{}" grenzt die verschobenen Zeichen gegen mögliche Folgeausdrücke ab und wird (sofern überhaupt ein Komplement in dem Kennwort enthalten ist) bei der Komplettierung entfernt.
Händische Anwendung der Komplemente
Es ist bequem, aber nicht unbedingt erforderlich, die Komplemente per JavaScript einfügen, addieren/subtrahieren oder bitweise XOR-en zu lassen. All das kann auch händisch geschehen oder mit heruntergeladenen Programmen.
Programmierer*innen können z. B. dafür den Ruby-Interpreter installieren. Mit dem Programm "irb" kann dieser interaktiv benutzt werden. Eine Subtraktion mit Überlauf kann dort wie folgt eingegen werden:
( 1234 - 5678 ) % 10000
(Die Ausgabe ist: 5556). Das Dekodieren einer Base64-Zeichenkette geht mit:
require 'base64'; Base64.decode64 '4711'
(Die Ausgabe ist: "\xE3\xBDu", das "u" enspricht dem Byte 75 (hex))
Wenn Sie die Komplemente händisch anwenden wollen, dann geben Sie bei der Abfrage von Komplement-Werten in key.matiq zunächst "Nicht anwenden" ein und führen dafür die oben beschriebenen Schritte selbst aus.
Sie werden nun verstehen, warum wir auf möglichst einfache Operationen für Komplemente geachtet haben. Händisch Einfügen kann wohl jeder, bei den additiven (und subtraktiven) Komplementen kommt schon die Schwierigkeit des Überlaufs und der Längenanpassung hinzu und für die binären Komplemente benötigt man schon Programmierkenntnisse.
Besonderheiten bei händischer Anwendung des binären Komplements
Dieser Abschnitt ist für Nutzer*innen mit Mathematik- und Programmiertkenntnissen gedacht.
Wenn Sie binäre Komplemente verwenden, beachten Sie bitte, dass es verschiedene Base64-Repräsentationen für die gleiche binäre Zeichenkette geben kann. So ergeben
abcd
abcde
abcde===
jeweils in die binäre Zeichenkette
"\x69\xb7\x1d"
Bijektivität erhalten Sie nur, wenn Sie sich auf Base64-Strings ohne White-Spaces und mit einer Länge, die durch 4 teilbar ist beschränken.
Verschieben Sie also weitere Zeichen immer hinter den Komplementsausdruck. Und grenzen Sie diese mit dem Separator "{}" (s. u.) gegen folgende Komplementsausdrücke ab.
Komplementnamen mit Sonderzeichen
Komplement-Hinweise, werden in Komplement-Objekten gespeichert und diese haben Namen. Wir wollen Ihnen für die Namenswahl möglichst wenig Restriktionen auferlegen, lassen also den gesamten UTF-8-Zeichensatz zu. Lediglich Leerzeichen am Anfang und Ende und doppelte mittendrin werden automatisch entfernt, um solch schwer sichtbare Fehlerquellen auszuschließen.
Da die Komplement-Namen auch in den Komplement-Bezügen vorkommen, dort aber einige Sonderzeichen eine wichtige Rolle spielen, müssen Komplement-Namen, die Sonderzeichen enthalten evtl. besonders geschrieben werden. Die einzige Regel, die Sie sich für diesen Fall merken müssen: Schauen Sie sich in der Komplement-Anzeige (Klicken Sie dazu einfach auf das Komplement im Baum-Bereich) die dort vorgeschlagenen Komplement-Bezüge für Einfügen, Addition und XOR an und übernehmen Sie das, was Sie brauchen.
Weitergabe von Komplement-Hinweisen
Wenn Sie Geheimnisse an Andere weitergeben und diese Komplement-Bezüge enthalten, werden diese automatisch verändert (die Absendebox wird mit eingetragen), um klar zu machen, dass es sich nicht um Komplemente der Empfänger*in handelt.
Wenn Sie für ein Komplement den Hinweis in einem solchen Fall mit weitergeben wollen, so können Sie dies beim Komplemnt-Objekt vermerken. Der Hinweis wird dann mit dem Geheimnis übertragen, und bei der Empfänge*in eingefroren, so dass eine spätere Änderung des Hinweises im Komplement-Objekt zunächst keine Auswirkung auf die Empfänger*in hätte.
Mit einer erneuten Übertragung des Geheimnisses würde jedoch auch der veränderte Hinweis neu übertragen. Übertragen sie es jedoch nicht neu, so verbleibt bei der Empfänger*in der alte Hinweis, passend zum Geheimnis, wie es zum Übertragungzeitpunkt bestand.
Veränderung des Komplement-Namens
Wenn Sie einen Komplement-Namen ändern, so wird beim nächsten Öffnen eines Geheimnisses, das dieses Komplement benutzt, der Name auch dort entsprechend abgeändert. (Keine Auswirkung hat die Namensänderung auf übertragene Geheimnisse bei der Empfänger*in, da dort diese lediglich eine unsichtbare eingefrorene Kopie des Komplements besitzt, auf die der Komplement-Bezug verweist.)
Löschung eines Komplements
Die Löschung eines Komplements bewirkt, dass die Geheimnisse, die es benutzen, nunmehr den Komplement-Bezug nicht mehr anwenden. D. h. dieser bleibt als Zeichenkette im Geheimnis und sie müssten ihn ggf. manuell anwenden (einfügen, addieren, subtrahieren oder XOR-en) um den Inhalt zu korrigieren.
Erstellen eines Komplements mit bereits existierendem Bezug
Haben Sie bereits in ein Geheimnis einen Komplement-Bezug eingebaut, z. B.
{ mein_komplement }
und existiert das Komplement "mein_komplement" zu diesem Zeitpunkt noch gar nicht, so ist der Komplement-Bezug nicht wirksam, sondern wird einfach als Text behandelt. Doch Sie können das Komplement-Objekt nachträglich erstellen. Wirksam wrd es jedoch nur, wenn Sie das Geheimnis, das es benutzen soll, erneut abspeichern.
So wird verhindert, dass eine als Text gemeinte, aber syntaktisch auch als Komplement-Bezug denkbare Zeichenkette wie z. B.
{x}
dort versehentlich nachträglich uminterpretiert wird. Was passiert, wenn Sie für ein ganz anderes Geheimnis ein Komplement "x" erstellen? Keine Angst, Sie müssen zu diesem Zeitpunkt nicht alle Geheimnisse prüfen, ob dort nicht vielleicht die Zeichenkette "{x}" enthalten ist.
Speichern Sie aber ein solches Geheimnis neu, geht key.matiq davon aus, dass Sie nun absichtlich dem Bezug zum Komplement "x" herstellen wollen.
Dieser Fall wird selten auftreten, aber Sie sollten wegen des vorgenannten Verhaltens in wahren Geheimnissen möglichst Zeichenketten vermeiden, die der Komplement-Syntax entprechen.
Falls dies nicht zu vermeiden ist, sollten Sie eine deutlichen Bemerkung mit abspeichern, dass dieser Komplementname nicht verwendet werden sollte. Dann sehen Sie beim Bearbeiten vor dem Speichern diese Warnung und können das Problem ggf. noch durch Umbennenung des Komplements vermeiden.
Dieser Hinweis sollte natürlich verschlüsselt abgespeichert werden, um nicht darüber einen Teil des Kennworts offen zulegen.
Beachten Sie bitte auch, dass Komplement-Bezüge (mit Bezug auf existierende Komplemente) bei Bearbeitung des Geheimnisses in eine Normal-Form formatiert werden. (Das ist nötig, damit zukünftige Erweiterungen der Syntax rückwärtskompatibel gestaltet werden können.)
Seperator "{}"
Sofern in einem Kennwort überhaupt ein Komplement (oder eine Komponente) enthalten ist, dient die Zeichenkette "{}" zur Trennung von Komplementausdrücken. Z. B. wird aus der Initialisierung
1{}23+456{- Number }
1{}79{- Number }
123
Wollen Sie in einem Kennwort mit Teilgeheimnissen die Zeichenkette "{}" angezeigt bekommen, so geben Sie an dieser Stelle "{{}}" ein. Aus
{{}}{ Number }
{}456
Geben Sie für den Wert eines Komplement die Zeichenkette "{}" ein, so wird dagegen diese genauso auch in der Anzeige des Geheimnisses erscheinen.
Suchen verwendeter Geheimnisse
In der Anzeige-Ansicht eines verwendeten Komplements gibt es einen zweiten Tab, der die benutzenden Geheimnisse auflistet. Das ist nützlich, falls Sie nicht mehr sicher sind, ob ein Komplement überhaupt verwendet wird, oder Sie planen es zu ändern oder ganz zu eliminieren.
Auf die umgekehrte Tabelle (Liste der verwendeten Komplemente eines Geheimnisses) wird verzichtet, da diese Information leicht über die Bearbeitungsansicht des Geheimnisses ermittelt werden kann: Schauen Sie die verschlüsselten Felder durch, um festzustellen, welche Komplemente benutzt werden! Allerdings haben Sie damit noch keine Pfadangabe für die Komplemente. Doch wir gehen davon aus, dass je Box es nur wenige Komplemente geben wird, die in einem zentralen Ordner gespeichert werden. Daher dürfte es sich nicht um ein ernsthaftes Manko handeln. Sollte aber diese Annahme irrig sein, zögern Sie bitte nicht, uns ein entsprechendes Feedback zu geben!
Achtung: Komplementbezüge sind nicht geheim!
Damit sich die Komplemente handhaben lassen, ohne unangenehme Überraschungen (z. B. bei Umbenennungen) zu präsentieren, muss key.matiq abspeichern, welche Komplemente zu welchen Geheimnissen gehören. Diese Liste ist derzeit noch unverschlüsselt.
Die Geheimnisteilung mit Komplementen, kostet also auch einen Preis: Eine Angreifer*in, die auf die Datenbank zugreifen kann, wüsste damit, welche Geheimnisse welche Komplemente verwenden. Mehr aber auch nicht. Und diese Information könnte sie auch nur verwenden, wenn sie zusätzlich zumindest den Inhalt eines Geheimnisses oder eines Komplements in Erfahrung gebracht hat.
Wenn Komplemente immer nur zusätzlich verwendet werden, können sie – auch unter Berücksichtigung des oben beschriebenen Umstands – im Saldo die Sicherheit nur erhöhen.