Все, что нужно знать

Оглавление

О приложении Zeta Paste

Это приложение с открытым исходных кодом создано для шифрования текста (или «секретных сообщений»). Оно шифрует текст с использованием сквозного шифрования (E2E), чтобы только вы или человек, которому вы доверяете и который знает пароль, могли его прочитать.

Шифрование и дешифрование происходят на вашем устройстве. Приложение работает полностью на стороне клиента и может использоваться офлайн. Ваши данные никуда не передаются и нигде не хранятся.

После шифрования вы получаете три самодостаточных части:

  • Соль (SALT)
  • IV (Initialization Vector — Вектор инициализации)
  • Зашифрованные данные (DATA)

Эти части необходимы для расшифровки, они не хранятся в приложении или на серверах. Для успешной расшифровки потребуются эти данные, пароль и количество итераций которые использовались при шифровании.

Кнопки

Как выглядитОписание
 EditРежим редактирования
 MarkdownПревью в markdown
Ввести пароль & итерации
Зашифровать. Нажмите чтобы зашифровать
Расшифровать. Нажмите чтобы расшифровать
Мануальный ввод данных: SALT, IV, DATA
Получить QR-код

Как использовать

Шифрование

  1. Нажмите  Edit
  2. Напишите какое-нибудь сообщение
  3. Нажмите  , придумайте пароль, и если нужно измените кол-во итераций
  4. Поделитесь этим по частям или просто поделитесь ссылкой

Дешифрование

Соберите ссылку по частям, или просто перейдите по ссылки (или QR-Code) и убедитесь что в адресной строке у вас ссылка вида # + <SALT> : <IV> : <DATA> .

Или используйте  , чтобы ввести данные вручную.

  1. Нажмите  , введите пароль и кол-во итераций используемых при шифровании
  2. Нажмите  , чтобы расшифровать сообщение

Итерации

Чем больше итераций, тем больше нагрузка, больше времени нужно чтобы зашифровать/расшифровать, тем сильнее шифрование.

Количество итераций масштабируется:

  • 100000 = 1
  • 150000 = 1.5/1,5
  • 300000 = 3
  • 340000 = 3.4/3,4
  • 600000 = 6
  • 1000000 = 10

Количество итераций не может быть меньше 1.

Как это работает

Текст сжимается и преобразуется в WordArray (массив 32-битных слов):

const compressedMessage = LZString.compressToUint8Array(message);
const messageWordArray = CryptoJS.lib.WordArray.create(compressedMessage);

Создается ключ с помощью алгоритма PBKDF2 на основе случайно сгенерированной соли, введенного пароля и кол-ва итераций:

const generateKey = (password: string, salt: string, iterations: number): CryptoJS.lib.WordArray => {
  return CryptoJS.PBKDF2(password, salt, {
    keySize: 256 / 32,
    iterations: iterations,
  });
};
const salt = CryptoJS.lib.WordArray.random(128 / 8).toString();
const key = generateKey(password, salt, iterations);

С помощью созданного ключа алгоритмом PBKDF2 и случайно сгенерированным IV (Initialization Vector - Вектор инициализации) текст шифруется алгоритмом шифрования AES-256 в режиме CBC (Cipher Block Chaining) с заполнением PKCS7

const iv = CryptoJS.lib.WordArray.random(128 / 8);
const encrypted = CryptoJS.AES.encrypt(messageWordArray, key, {
  iv: iv,
  mode: CryptoJS.mode.CBC,
  padding: CryptoJS.pad.Pkcs7,
});

Вектор инициализации (IV) необходим для обеспечения уникальности шифрования даже при повторном использовании одного и того же ключа.

На выходе получается объединенная строка в формате # + <SALT> : <IV> : <DATA>:

return salt + ":" + iv.toString() + ":" + encrypted.toString();

Расшифровка происходит также, только в обратном порядке.

Все эти данные (SALT & IV) нужны для расшифровки DATA.

Пример

  • Итераций: 6
  • Пароль: qwerty

Ссылка


SALT, IV, DATA

SALT: 05f2cc85783d31c30d27fbdd3482eefe
IV: 5879f308fdda0f58bc2a2dc25e8f5a14
DATA: TyoQu72aMK1oXboMPA64IhjDXWkFo/tnywQZY6OWGQ99fcSSR3VrHnOrC35UNIvyajLkumEnDYuCYdn79vq0Wtf9J/tHhUZYDqf6+AFhLjGlWYv3P0Pyv6tC6reVuDBQ9gjz+1JWMi+GeRz6JFmoB65eA+f8+EO3MCQ2ko8KH5pvvDvgwZBbje8zHxXiFNchlB0dIdljxdY12yoCia1b6xX+KV/ihoEmXtRmhHptiBpyJDfbwzABxv0dxT4+OI+N0JCQmDSQF1iMpsmHUHzYCSVlVP4JRp8PzaHRkI+iJWIsXOD+FOoCJmCHOqwBBZ/jYLq277S0g8hr/TsBrVxcbpdnA4b6RluF+RdgUSfMYOhWeH5twwkceg6FfSNF2F+1b7GyzGDq5lxgMXewiaoOpGhaLgkNllKAQbG8rS31j7nknhM2dyURu3QCmTvwGnaTPMgVEHFO0pqoKxOKojwo4dR4Q4jsK6sxcHa50U/bPNi3LGd0H/hY4SKt1wLsTUiYuM2g/zRdAtg4GekJo0EhF3zWmITDNUjiqHYK+wiX5fRCIrlnnEvbMZjRziUDRX26nrQPs6fYMVAF5YgQVGzLlIs0uKO3EC0WyPqtNAVxuFBfLdygKeXnoCr2U7CwOMf0B7OY4I6NSpC5++YITcsZzQ==

Соль (SALT):

05f2cc85783d31c30d27fbdd3482eefe

IV:

5879f308fdda0f58bc2a2dc25e8f5a14

Зашифрованные данные (DATA):

TyoQu72aMK1oXboMPA64IhjDXWkFo/tnywQZY6OWGQ99fcSSR3VrHnOrC35UNIvyajLkumEnDYuCYdn79vq0Wtf9J/tHhUZYDqf6+AFhLjGlWYv3P0Pyv6tC6reVuDBQ9gjz+1JWMi+GeRz6JFmoB65eA+f8+EO3MCQ2ko8KH5pvvDvgwZBbje8zHxXiFNchlB0dIdljxdY12yoCia1b6xX+KV/ihoEmXtRmhHptiBpyJDfbwzABxv0dxT4+OI+N0JCQmDSQF1iMpsmHUHzYCSVlVP4JRp8PzaHRkI+iJWIsXOD+FOoCJmCHOqwBBZ/jYLq277S0g8hr/TsBrVxcbpdnA4b6RluF+RdgUSfMYOhWeH5twwkceg6FfSNF2F+1b7GyzGDq5lxgMXewiaoOpGhaLgkNllKAQbG8rS31j7nknhM2dyURu3QCmTvwGnaTPMgVEHFO0pqoKxOKojwo4dR4Q4jsK6sxcHa50U/bPNi3LGd0H/hY4SKt1wLsTUiYuM2g/zRdAtg4GekJo0EhF3zWmITDNUjiqHYK+wiX5fRCIrlnnEvbMZjRziUDRX26nrQPs6fYMVAF5YgQVGzLlIs0uKO3EC0WyPqtNAVxuFBfLdygKeXnoCr2U7CwOMf0B7OY4I6NSpC5++YITcsZzQ==

Ресурсы (активы)

Наборы, из которых взяты иконки


Приложение работает на клиенте.
Ничего не хранится в базе данных.
Базы данных не существует.
v1.0.1 | Zeta ©