wizzard: (Default)
wizzard ([personal profile] wizzard) wrote2014-09-08 08:11 pm

It is impossible to safely implement any cryptosystem providing forward secrecy in C.

TLDR: Все без исключения реализации AES (ну и наверное многих других симметричных шифров) на C потенциально уязвимы к утечке ключей (а-ля Heartbleed, например), из-за того, что C, будучи портабельным ассемблером, абстрагирует от нас возможность надежно очистить память.

http://www.daemonology.net/blog/2014-09-06-zeroing-buffers-is-insufficient.html

Ну что, плюс один повод перенести системное программирование на какой-то еще язык.
Можно, конечно, повкручивать очередных прагм, или выпустить C0x, но общую проблему это не исправит, т.к. изменения в модели памяти не будут обратносовместимы.

Альтернативно, можно расслабиться и продолжать писать крипто на JS (помнится, его всячески критиковали за невозможность стереть ключи), раз уж в остальных местах всё столь же плохо.

UPD: Пример проблемы - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=8537