реализация шифра Вернама
Хочу представить сообществу свою программу – реализацию шифра Вернама (одноразовый блокнот) с дополнительными функциями. Программа написана на Python и может:
- Генерировать ключи, используя функцию os.urandom()
- Шифровать и расшифровывать данные
- При шифровании добавлять в конец данных контрольную сумму (sha1) и проверять ее при расшифровании
- Сжимать данные с помощью gzip или bzip2
Контрольная сумма нужна для зашиты от подмены в случае, когда злоумышленнику известна часть ключа/сообщения. Контрольная сумма и сжатие опциональны, по умолчанию программа добавляет контрольную сумму, если использовать сжатие, то sha1 добавляться уже не будет. При необходимости можно отключить оба варианта или использовать их вместе. Прилагается документация на русском и английском.
Размер – меньше 400 (четырехсот) строк.
Лицензия – MIT.
https://github.com/anton-tsyganenko/otppy
При привильном использовании и отсутствии закладок в ОС и интерпритаторе взлом абсолютно невозможен.
комментариев: 9796 документов: 488 редакций: 5664
urandom не является источником экстрагированной физической энтропии, а является источником растянутой из коротких значений псевдоэнтропии → программа не является реализацией шифра Вернама.
А насколько это надежно? Если его заменять, то на что? (радиоактивный распад не предлагать)
Так вроде же нет спецификиций.
комментариев: 9796 документов: 488 редакций: 5664
Насколько надёжно что? urandom? Он дёргает мелкие куски энтропии и растягивает их в большую гамму. Поскольку гамма наверняка генерится за один раз, то она вся будет растянута из одного внутреннего состояния, образованного мелким фрагментов энтропии. Это надёжно, примерно как некий потоковый шифр, хотя и с большим внутренним состоянием и зависит от того, какой алгоритм реализован в os.urandom. В пределе это должно быть надёжно, как обычный 256-512-битовый шифр. Истинная случайность экстрагируется только постобработкой данных физических процессов.
Да даже если б у вас стоял QRNG, дальше-то что? Нужно, чтоб одна и та же гамма была на обоих концах связи, а как вы её туда доставите? Добро пожаловать в QKD.
Передать можно при личной встрече или в сейф-пакете. Только не надо говорить, что при личной встрече можно сразу передать и данные – передача ключа может осуществляться тогда, когда данных еще нет.
Ну, если только так...
Использование системной функции создает удобную универсальную лазейку. Достаточно перехватить вызов, и сразу видно сами случайные числа, а также какому процессу, в какой момент и в какой точке они понадобились.
http://www.zas-comm.ru
Понятно, что если в системе есть закладки, трояны, кейлогеры и т.д., то каким бы не был хорошим алгоритм, он не спасет. Даже если получать случайные числа другим образом, троян может сделать дамп памяти. Предполагается, что используемая система надежна и в ваш монитор посторонние не смотрят.
комментариев: 11558 документов: 1036 редакций: 4118
В данном случае это OTP, хоть там и куча отсебятины, ключи используются только один раз.
комментариев: 11558 документов: 1036 редакций: 4118
комментариев: 9796 документов: 488 редакций: 5664