Принципы работы
Все заметки шифруются и дешифруются в браузере пользователя без использования серверной части приложения. Для шифрования применяется алгоритм AES-256 в режиме GCM.
На сервере хранится только зашифрованная заметка. Это позволяет гарантировать, что ни системный администратор, ни злоумышленник, имеющий доступ к серверу на уровне операцинной системы, не смогут прочитать сохраненные заметки.
Идентификатор заметки, по которому она доступна создается случайным образом. Это препятствует попыткам угадать id заметки.
Часть информации, необходимой для расшифровки заметки сохраняется в url заметки после якоря (знака "#"). Полный url заметки с данными после знака "#" формируются в браузере пользователя. В соответствии со существующими web-стандартами при обращении по url данные после якоря (знака "#") не передаются на сервер, что делает невозможной расшифровку заметки на стороне сервера.
Дополнительно возможно защитить паролем заметку. При ключ шифрования при этом создается из объединения случайно созданного числа и пароля. Даже зная url заметки, защищенной паролем, и скачав её невозможно будет прочитать не зная пароль.
Almetibin использует реализацию шифрования AES-256 встроенную в браузер пользователя. Поэтому браузер пользователя должен поддерживать Web Crypto API. Если браузер не поддерживает Web Crypto API, то Almetibin не будет работать. На сегодняшний день большинство браузеров поддерживают Web Crypto API и ситуация неработостопосбности Almetibin мало вероятна. Точнее узнать о статусе поддержки Web Crypto API вы можете здесь: https://caniuse.com/?search=crypto%20api
Алгоритм создания заметки.
- браузер создает случайный ключ
- содержимое заметки шифруется с созданным случайным ключом используя алгоритм AES-256 GCM. Если пользователь дополнительно использовал пароль, то для шифрования используется случайный ключ плюс пароль.
- зашифрованное содержимое отправляется на сервер;
- браузер получает от сервера уникальный идентификатор заметки, по которой она будет доступна.
- браузер формирует окончательный url заметки, добавляя якорь (символ "#") и информацию для расшифровки.
URL заметки выглядит следующим образом: URL: https://example.com/view/W68GpEXZQCMNRLEe3Eaw9#9SBmtNk34hJuhYUhJprJA83wiKzbNHTAiEZjGK37Xokd
Алгоритм чтения заметки
- браузер отправляет GET запрос введенный в адресную строку. В соответствии с действующими стандартами на сервер отправляется только часть url до якоря (до знака "#"). Данные после якоря доступны только браузеру.
- получив зашифрованные данные с сервера браузер производит расшифровку. Если заметка защищена паролем, то браузер сначала ожидает ввода пароля (так как пароль является частью ключа, которым шифровали заметку) и только после этого производит расшифровку.