Warum nicht OTP verwenden, um mehr als eine Nachricht zu verschlüsseln, aber jede Verschlüsselung nach der XOR-Operation macht so etwas wie eine Substitution/Ceasar-Verschlüsselung auf der CT?OTP-Verschlüsselung mit Ceasar-Verschlüsselung
Antwort
Die Wiederverwendung eines One-Time-Pad ist schlecht, weil es Informationen über den Schlüssel gibt.
p: a plaintext message to be encrypted: p_1 p_2 ... p_n
e_i: encryption of p_i with key k_i
otp: e_i = p_i^k_i for ii in 1..n
Wenn Sie mehrere Nachrichten verschlüsseln und Sie sie xor zusammen, um Ihnen so etwas wie
e1_1^e2_1 = p1_1^k_1^k_1^p2_1
bekommen und da k_1^k_1
das wird annulliert
e1_1^e2_1 = p1_1^p2_1
So Informationen zu den Nachrichten erfahren Sie sofort, Aber wenn Sie etwas über die Eingabe wissen, erfahren Sie auch etwas über den Schlüssel.
Durch so etwas wie Caesar-Chiffre Sie
e2_1 = p2_1^(k_1+13)
bedeuten könnte, die für Ihre Schlüssel und Nachrichtenraum einen 26-Buchstaben-Alphabet ist vorausgesetzt. Leider wird Ihr Schlüssel nach 2 Nachrichten erneut umgebrochen und Sie befinden sich wieder bei demselben Problem wie zuvor. (es gibt andere große Probleme auch)
allgemeiner, egal was einfache Sache, die Sie tun, geben Sie Informationen über die Nachrichten und in der Regel Schlüssel. Der Angreifer kann typischerweise eine große Matrix von Gleichungen aufstellen und lineare Algebra verwenden, um nach dem Schlüssel zu suchen, sobald Sie ihm genügend Informationen gegeben haben.
Allerdings, wenn Sie die einfache Sache, nehmen Sie tun und es mehr und komplexere und schließlich zu einem Punkt, wo
kn: the key for the nth message
kn = f(k,n) for some function k
, so dass ein Angreifer nicht signifikante Informationen über f(k,n) given
f (k lernen kann, m) for
n! = m , you've invented a stream cipher. People do use stream ciphers all the time; they are not as secure as OTP, but they are a core of internet security. The trick of course is figuring out a good function
f`; zu beschreiben, wie dies zu tun ist, ist jenseits der Grenzen dieser Frage. (Und außerdem habe ich diese Fähigkeit nicht wirklich).
- 1. Mit zwei Befehlen (Rohr mit |) mit Laich
- 2. Umgang mit Daten mit MVC mit AngularJS
- 3. mit Vorgänger-Geschwister mit mit xsl: sort
- 4. Mit ImageCaptureCore mit PyObjC
- 5. Mit Konstruktorargumente mit NinjectModule
- 6. mit Arrays.sort mit Lambda
- 7. Mit jQuery mit DevExpress
- 8. Mit NodeJS mit Typoskript
- 9. Mit MaterializeCSS mit Aurelia
- 10. Mit OpenBLAS mit GSL
- 11. mit ffmpeg mit Xcode
- 12. Mit AngularJS mit MeteorJS
- 13. Mit SUMIF mit INDIREKTE
- 14. mit Deklaration mit enum?
- 15. Mit 'fs' mit browserify
- 16. mit Rückruf mit node.js
- 17. Mit .appendRow mit Formeln
- 18. Mit Tinker mit OctoberCMS
- 19. "mit" mit ansible
- 20. mit ++ mit jquery $ .each()
- 21. Mit GraphiQL mit Foxx
- 22. Mit Promise.all mit Behauptung
- 23. Mit DateTimeFormatter mit ObjectMapper
- 24. Mit DISTINCT mit FIND_IN_SET
- 25. Mit REGEXP_REPLACE mit Leerzeichen
- 26. Mit forever.js mit Python
- 27. mit DBMS_APPLICATION_INFO mit Jboss
- 28. Mit MvxCommand Mit Command
- 29. Mit Supercollider mit Python
- 30. Mit SweetAlert2 mit vis.js
Und so etwas: cipher = m^Schlüssel und dann die Charaktere mischen? Der Angreifer erhält keine Informationen über unseren Schlüssel oder unseren Klartext, wenn er unsere Shuffling-Funktion nicht kennt –
Wenn es tatsächlich wahr ist, dass der Angreifer keine Informationen bekommt, dann ist es sicher. Es wird nicht sein. Beachten Sie auch, dass die Shuffling-Funktion nicht mehr als einmal identisch sein kann. Es wird allgemein angenommen, dass der Angreifer alle Ihre Funktionen kennt, seine Schlüssel jedoch nicht kennt. –