Реалізація CTR, режим потокового шифрування

Рядок:

L77na/nrFsKvynd6HzOoG7GHTLXsTVu9qvY/2syLXzhPweyyMTJULu/6/kXX0KSvoOLSFQ==

… розшифровує щось наближене до англійської мови в режимі CTR, який є режимом блокового шифрування AES, який перетворює AES на потоковий шифр із такими параметрами:

      ключ=YELLOW SUBMARINE
      нонс=0
      формат=64 бітний беззнаковий little endian нонс,
             64 бітний little endian кількість блоків (кількість байтів / 16)

Режим CTR дуже простий.

Замість шифрування відкритого тексту режим CTR шифрує поточний лічильник, створюючи потоки 16-байтових блоків ключів, яким виконують XOR проти відкритого тексту.

Наприклад, для перших 16 байтів повідомлення з такими параметрами:

keystream = AES("YELLOW SUBMARINE",
                "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")

… для наступних 16 байтів:

keystream = AES("YELLOW SUBMARINE",
                "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\  \x00")

… а потім:

keystream = AES("YELLOW SUBMARINE",
                "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00")

Режим CTR не вимагає доповнення; коли у вас закінчується відкритий текст, ви просто припиняєте XOR’іти потоком ключів і припиняєте генерувати потік ключів.

Дешифрування ідентично шифруванню. Згенеруйте той самий потік ключів, XOR, і відновіть відкритий текст.

Розшифруйте рядок у верхній частині цієї функції, а потім використовуйте свою функцію CTR для шифрування та дешифрування інших речей.

Це єдиний режим блочного шифрування, який має значення для гарного коду.

Більшість сучасної криптографії покладається на режим CTR для адаптації блокових шифрів у потокові, тому що більшість того, що ми хочемо зашифрувати, краще описати як потік, ніж як послідовність блоків. Деніел Бернштейн якось пожартував Філу Рогавею, що хороші криптосистеми не потребують перетворень «дешифрування». Саме про такі конструкції, як CTR, він говорив.