WebCrypto
Проблеми з криптографією в JavaScript на стороні клієнта (браузера) детально описані нижче. Усі, окрім однієї з цих проблем, не стосуються API WebCrypto , який зараз досить добре підтримується .
Для офлайн-програми потрібно все-таки розробити та впровадити захищену сховище ключів.
Убік: Якщо ви використовуєте Node.js, використовуйте вбудований крипто API.
Криптовалюта Native-Javascript (pre-WebCrypto)
Я припускаю, що головна проблема - це хтось із фізичним доступом до комп'ютера, який читає localStorage
ваш сайт, і ви хочете, щоб криптографія допомогла запобігти цьому доступу.
Якщо хтось має фізичний доступ, ви також відкриті для атак інших і гірших за читання. До них відносяться (але не обмежуються ними): кейлоггери, модифікація сценарію офлайн, введення локального скрипту, отруєння кешем браузера та переадресації DNS. Ці атаки спрацьовують лише у тому випадку, якщо користувач користується машиною після її злому. Тим не менш, фізичний доступ у такому сценарії означає, що у вас є більші проблеми.
Тож майте на увазі, що обмежений сценарій, коли місцева криптовалюта є цінною, була б, якщо машина викрадена.
Є бібліотеки, які реалізують потрібну функціональність, наприклад, крипто-бібліотека Stanford Javascript . Однак є властиві слабкі сторони (про що йдеться у посиланні з відповіді @ ircmaxell):
- Відсутність ентропії / генерації випадкових чисел;
- Відсутність захищеного сховища ключів, тобто приватний ключ повинен бути захищений паролем, якщо він зберігається локально або зберігається на сервері (який забороняє доступ в автономному режимі);
- Відсутність безпечного стирання;
- Відсутність часових характеристик.
Кожна з цих слабкостей відповідає категорії криптографічних компромісів. Іншими словами, хоча у вас може бути "криптовалюта" за назвою, вона буде значно нижчою жорсткості, до якої прагнемо на практиці.
Все, що говорилося, актуарна оцінка не настільки тривіальна, як "Криптовалюта Javascript слабка, не використовуйте її". Це не схвалення, суто застереження, і воно вимагає, щоб ви повністю зрозуміли викриття вищезазначених слабкостей, частоту та вартість векторів, з якими ви стикаєтеся, і вашу здатність до пом'якшення чи страхування на випадок збою: криптовалюта Javascript, в незважаючи на слабкі сторони, це може зменшити ваше опромінення, але лише проти злодіїв з обмеженими технічними можливостями. Однак, ви повинні припустити, що криптовалюта Javascript не має значення щодо рішучого та здібного зловмисника, який націлює цю інформацію. Дехто вважає оманливим називати дані "зашифрованими", коли відомо, що стільки слабких місць притаманні реалізації. Іншими словами, ви можете незначно зменшити свою технічну витримку, але ви збільшуєте свою фінансову експозицію від розкриття інформації. Кожна ситуація, звичайно, різна - і аналіз зменшення технічного впливу фінансового впливу нетривіальний. Ось наочна аналогія:Деякі банки потребують слабких паролів , незважаючи на властивий їм ризик, оскільки їх експозиція до втрат від слабких паролів менша за витрати кінцевого користувача на підтримку надійних паролів.
🔥 Якщо ви прочитали останній абзац і подумали "Хтось хлопець в Інтернеті на ім'я Брайан каже, що я можу використовувати криптовалюту Javascript", не використовуйте криптовалюту Javascript.
У випадку використання, описаному у питанні, здається, що користувачі мають більше сенсу шифрувати свій локальний розділ або домашній каталог та використовувати надійний пароль. Цей тип безпеки, як правило, добре перевірений, широко довірений і широко доступний.