LINUX.ORG.RU

Симметричное шифрование строки в Javascript

 ,


0

1

Пилю я, значит, некую поделку на правах пет-проджекта. Эдакая телефонная книжка на стероидах. Поскольку русские, украинские и китайские хакеры только и думают, как бы украсть номера моих шлюх, решил я контактные данные хранимых людей держать в базе зашифрованными, и расшифровывать уже в браузере. В качестве ключа — либо пароль, либо производное от него, либо ключ хранится там же в базе, но защищён паролем/ПИНом.

Решил посмотреть, что есть в JS для подобных дел, и для криптографии вообще.

Как я себе это себе представлял: в JS есть стандартная библиотека, которая умеет AES 256 над любыми входными данными. В npm или ещё где-то есть сторонние библиотеки, которые это шифрование используют для решения более высокоуровневых задач (возможно и моей).

Как оказалось: ничего стандартного для шифрования нет и не предвидится. Базовое шифрование нагугливается в сторонних библиотеках, которые либо пилились васянами в 2010-е (а потом им надоело), либо имеют разгромные рецензии о своей небезопасности, либо являются PoC-ами прекрасных решений будущего, либо подходят для очень узких случаев (при этом могут быть так же заброшены и небезопасны). На SO если и дают какие-то ссылки, то сразу со скептическими дисклеймерами, и ссылки ведут примерно на то же самое. Кому очень надо, тот колхозит своё. Всё очень плохо. Подлость, гадость, плейнтекст.

Неужели я единственный человек, которому понадобилось шифрование в JS?

Есть ли более-менее приличное решение?

★★★★★

От чего конкретныо ты хочешь защититься? От утекания базы или от парсинга твоих номеров с клиента.

Шифрование в браузере тебе не поможет ни так ни так.

ya-betmen ★★★★★
()

шифрование есть ужо в https :)
а большего и нет смысла, ибо содержимое джаваскрипт-окружения один херъ полностью во власти бравзера. развернут нужной дыркой и поимеют что необходимо - твой скрыпт даже пикнуть не смогет.

pfg ★★★★★
()
Ответ на: комментарий от ya-betmen

Ну, можно номера на канвасе рисовать. На входе функции билиберда и дата, на выходе картинка

DumLemming ★★★
()
Ответ на: комментарий от i_am_not_ai

Тогда ему нужен доверенный сервер приложения с мастер ключом.

Если только ТС хочет чтобы у каждого юзера был свой ключ а криптованные данные сложить в общей бд.

ya-betmen ★★★★★
()

Надо тогда использовать Gnome Keyring/KWallet для хранения ключа, а сами данные хранить зашифрованными этим ключом в sqlite (как хранятся пароли браузера)

uwuwuu
()
Ответ на: комментарий от dataman

Вот и у меня такие же забросы находились.

muon ★★★★★
() автор топика
Ответ на: комментарий от ya-betmen

Если вкратце, то в голове пользователя.

В качестве ключа — либо пароль, либо производное от него, либо ключ хранится там же в базе, но защищён паролем/ПИНом.

muon ★★★★★
() автор топика
Ответ на: комментарий от javascript

И в чем сложности в использовании Web Crypto API в браузере?

Я больше про crypto. Тем, что не нашлось в браузерной криптографии поддержки нужных мне вещей, на память по-моему подписей основанных на кривых. В прошлом году ковырял.

vvn_black ★★★★★
()
Ответ на: комментарий от vvn_black

Стандарт - это Web Crypto API.

node crypto изначально была кастомная реализацией (как и многие вещи в ноде), не имеющая никакого отноения к стандарту. И как и многие вещи в ноде, после появлени стандартов они подгоняются под эти стандарты.

Поэтому Web Crypto API которые стандарт - полностью на сегодня поддерживаются и в браузере, и в ноде.

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

Наиболее распространненые алгоритмы RSA/AES в web crypto api есть, есть и ECDSA, скоро вот-вот подъедет и EdDSA (ed25519 и компания), которые в ноде есть давно, но будет и в стандарте. Так или иначе для всего что вот-вот подъезжает - есть полифилы.

Ну и самому стандарту уже очень много лет. Поддерживается он давно всеми платформами.

javascript
()
Последнее исправление: javascript (всего исправлений: 1)
Ответ на: комментарий от javascript

скоро вот-вот подъедет и EdDSA (ed25519 и компания), которые в ноде есть давно, но будет и в стандарте

Вот, это и нужно было.

vvn_black ★★★★★
()
Ответ на: комментарий от muon

В качестве ключа — либо пароль, либо производное от него, либо ключ хранится там же в базе, но защищён паролем/ПИНом.

Ты скорее хочешь второе. Потому что если пароль захочется сменить, то в первом случае тебе придётся все данные перешифровывать, а во втором – только ключ.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)

Посмотри в window.crypto, вроде там было какое-то шифрование.

vbr ★★★★★
()
Ответ на: комментарий от filosofia

В моём случае аккаунт вполне себе восстановится, и доступ к человекам и событиям будет. Потеряются только контактные данные — номер телефона, никтейм в телеге и т. п. Если человек одновременно не потерял телефон, доступ к своему номеру и аккаунту гугла, то потерянные поля восстановить недолго.

muon ★★★★★
() автор топика
Ответ на: комментарий от ya-betmen

Тогда ему нужен доверенный сервер приложения с мастер ключом.

Наши каналы связи слишком узки для таких DMZ.

i_am_not_ai
()

Проще надо быть, проще. Расшифровываешь на бэке. Если не веришь провайдеру / админу HTTPS тебе в помощь.

zx_gamer ★★★
()

gpg сразу используй. Велосипедам в криптографии не место.

bga_ ★★★★
()

в JS есть стандартная библиотека

В js нет стандартной библиотеки, как во многих языках. Это встраиваемый язык, который работает в изоляции от внешнего мира.

Неужели я единственный человек, которому понадобилось шифрование в JS?

Шифрование нет смысла тащить в язык, оно устареет и будет там болтаться прицепом. См какие-нибудь там crc во всяких ораклах, mysql, дельфях и где они там.

В npm или ещё где-то есть сторонние библиотеки

npm - помойка. Ройся лучше. Мб где-то на гитхабе кто-то делал этот твой аес, гпг етц.

crutch_master ★★★★★
()
Ответ на: комментарий от crutch_master

Тред не читай, сразу отвечай? Топикстартера уже тыкнули в стандартные для платформ модули шифрования

npm - помойка. Ройся лучше. Мб где-то на гитхабе

Ну да, гитхаб прям не помойка, и исходники к пакетам npm не там лежат.

static_lab ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.