У меня есть следующее: let original = 'something' let passphrase = uuidv4 () let encrypted = CryptoJS.AES.encrypt (original, passphrase) // Я хочу, чтобы эта часть занимала ≈ 10 минут * минимум * let ...

0
Sprout Coder 5 Апр 2021 в 21:50

1 ответ

Лучший ответ

Не давайте ключ, дайте хеш ключа. Длина ключа к грубой силе даст вам требуемую степень детализации.

Процесс шифрования:

  1. Создайте ключ (например, hunter2) и зашифруйте свои данные с его помощью.
  2. Hash hunter2 с использованием такого алгоритма, как SHA1 (f3bbbd66a63d4bf1747940578ec3d0103530e21d)
  3. Сделайте клиентский перебор ключа

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

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

Зашифруйте свои данные не с помощью "hunter2", а с помощью MD5(hunter2) (используйте другой алгоритм).

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

Псевдокод:

// Encrypt
let key = "password";
let aesKey = md5(password);
let hint = sha1(password);

let encryptedData = data.encrypt(aesKey);

let decryptedData = data.decrypt(md5(bruteForceSha1(hint));
1
Slava Knyazev 5 Апр 2021 в 19:15