#crypto #hate
XChaCha на Хабре
https://habr.com/ru/articles/1016268/
https://habr.com/ru/articles/1015116/
Уже вторую статью за последнюю неделю вижу, где пишется такое:
XChaCha20-Poly1305: Увеличенный nonce (24 байта), что снижает риск
коллизий при очень больших объемах данных.
XChaCha20-Poly1305 [...] Дополнительный бонус — расширенный nonce
(192 бита против 96 у GCM), что снижает риск коллизий при большом
количестве сообщений в одной сессии.
Это один и тот же человек пишет? Судя по пользователю: он появился с
этой одной статьёй только пару часов назад. Или же это всё написано
БЯМ-ом? Откуда берётся эта фигня про XChaCha20?
В первой статье (про шифрование файлов), nonce используется совместно с
счётчиком блока. Берётся случайный nonce, добавляется счётчик блока. И
где здесь какая коллизия может возникнуть? Кроме того, приведён пример с
4-х байтным размером счётчика блока, хотя пишут, что можно зашифровать
любые файлы, что, очевидно не так, из-за маленького размера счётчика.
Шифрование производится в AEAD режиме. Но проверка целостности
производится над данными после расшифрования. Нафига??? И так имеется
AEAD режим, который гарантирует что данные не были битыми (ну, за
исключением invisible salamanders (6529c5c19cb52f69f65fec3d17e718cc491d2c53)).
Нужно только убедиться, что данные не были обрезаны. Это можно достичь
бесплатно, без всякой криптографии кроме уже использующейся.
Перед удалением оригинала я расшифровываю блок данных обратно и
сравниваю HMAC и SHA-256 хеши. Если не совпадает — оригинал не
трогается.
Сохранение во временный файл это здравая идея, хотя и дорогая. Но вот
только на практике это запросто не будет работать, так как чтение будет
производится из зашифрованной копии в кэше ФС. Если хотя бы сделать
umount, чтобы сбросить кэши, то тогда поверю: проверка будет иметься.
Lock-файл (.encryption_lock.json): Перед началом операции создается
файл, где записывается статус in_progress и список уже обработанных
файлов.
Вот только он совершенно не атомарно создаётся и записывается, судя по
коду.
Шифрование файла размером 10 ГБ на флешке с 4 ГБ оперативной памяти —
нетривиальная задача. Загружать файл целиком в RAM нельзя.
Зато можно сделать банальный mmap и прожевать сколько угодно данных. И
не делать деление на блоки вообще.
Блин, почему же так сложно даже просто зашифровать файл то? Ну ё моё!
[оставить комментарий]