Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.04.2023, 13:59
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

Как зашифровать данные PIN-кодом?
Стандартные инструменты Web Crypto API позволяют сгенерировать пару закрытый-открытый ключ для шифрования и дешифрования данных.

А как сделать так, чтоб сначала пользователь придумал PIN-код, а потом система зашифровала какие-либо данные этим пин-кодом? А потом этим же пин-кодом расшифровала его?

Предполагается, что пин-код состоит из 4 или 6 цифр.

<!DOCTYPE html>
<html lang="ru">
<head>
    <meta charset="UTF-8">
    <title>Encrypt PIN</title>
</head>
<body>
<style>
    h1 {
        margin: 0;
        font-size: 22px;
    }
    p {
        margin: 16px 0 12px;
    }
    .columns {
        display: grid;
        grid-template-columns: repeat(2, 1fr);
    }
</style>

<h1>Шифрование данных PIN-кодом</h1>

<section class="columns">
<div>
    <p>Придумать пин-код и зашифровать данные</p>
    <form id="encryp">
        <input id="encrypt-pin" type="password" placeholder="Придумайте пин-код">
        <input id="encrypt-data" placeholder="Данные для шифрования">
        <input id="encrypt-button" type="submit" value="Encrypt">
    </form>
    <div id="encrypt-export"></div> <!-- Здесь выводится зашифрованная информация -->
</div>

<div>
    <p>Ввести пин-код и расшифровать данные</p>
    <form id="decrypt">
        <input id="decrypt-pin" type="password" placeholder="Пин-код шифрования">
        <input id="decrypt-data" placeholder="Данные для расшифрования">
        <input id="decrypt-button" type="submit" value="Decrypt">
    </form>
    <div id="decrypt-export"></div>  <!-- Здесь выводится расшифрованная информация -->
</div>
</section>

</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 26.04.2023, 15:57
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,707

https://developer.mozilla.org/en-US/...ypto/deriveKey
Там последний пример - как из некоего пароля получить ключ, а потом этим ключом шифровать данные.
Ответить с цитированием
  #3 (permalink)  
Старый 26.04.2023, 16:25
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

Сообщение от voraa Посмотреть сообщение
https://developer.mozilla.org/en-US/...ypto/deriveKey
Там последний пример - как из некоего пароля получить ключ, а потом этим ключом шифровать данные.
Да, тоже уже нашли данную инфу. И в таком случае, если закрытый ключ хранится где-то в localStorage или IndexedDB — и любой посторонний может получить доступ к нему и обойти ввод пароля.

А как сделать так, чтобы пароль этот хранился локально в каком-либо виде, но и в то же время был недоступным для пользователей, которые обладают навыками программирования и потенциально могут просто получить его?
Ответить с цитированием
  #4 (permalink)  
Старый 26.04.2023, 17:07
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

Цитата:
А как сделать так, чтоб сначала пользователь придумал PIN-код,
Нужно использовать этот пин код в качестве генератора ключа шифрования.
В крипто апи для этого используется метод deriveKey() желательно по алгоритму PBKDF2
Цитата:
а потом система зашифровала какие-либо данные этим пин-кодом? А потом этим же пин-кодом расшифровала его?
Для этого предназначен специальный алгоритм шифрования/расшифровки использующие одинаковый ключ для шифрования и расшифровки.
В крипто апи это методы encrypt() и decrypt() по алгоритму AES-GCM с этим алгоритмом желательно хранить/передавать уникальный вектор инициализации для каждого зашифрованного сообщения этот вектор не является секретным и может открыто передаваться однако его наличие сильно повышает криптостойкость.
Ответить с цитированием
  #5 (permalink)  
Старый 26.04.2023, 17:13
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

Сообщение от MallSerg Посмотреть сообщение
Нужно использовать этот пин код в качестве генератора ключа шифрования.
В крипто апи для этого используется метод deriveKey() желательно по алгоритму PBKDF2

Для этого предназначен специальный алгоритм шифрования/расшифровки использующие одинаковый ключ для шифрования и расшифровки.
В крипто апи это методы encrypt() и decrypt() по алгоритму AES-GCM с этим алгоритмом желательно хранить/передавать уникальный вектор инициализации для каждого зашифрованного сообщения этот вектор не является секретным и может открыто передаваться однако его наличие сильно повышает криптостойкость.
Допустим, мне надо локально хранить какое-то суперсекретное сообщение. И постоянно к нему обращаться. Получается, что я создаю пароль, с помощью этого пароля шифрую этот суперсекретное сообщение и сохраняю в localStorage. Когда мне требуется расшифровать — я просто генерирую новую пару закрытого-открытого ключа на основе пин-кода и полученной парой ключей расшифровываю свое суперсекретное сообщение?

Так вы имеете ввиду?)
Ответить с цитированием
  #6 (permalink)  
Старый 26.04.2023, 17:13
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

Цитата:
был недоступным для пользователей, которые обладают навыками программирования и потенциально могут просто получить его?
Если у злоумышленника есть физический доступ к машине то криптография теряет смысл.
В таких случаях пытаются реализовать другие меры например двух факторную авторизацию. Тогда злоумышленнику понадобиться доступ и к личному телефону или персональному ключу.
Ответить с цитированием
  #7 (permalink)  
Старый 26.04.2023, 17:22
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

Сообщение от MallSerg Посмотреть сообщение
Если у злоумышленника есть физический доступ к машине то криптография теряет смысл.
В таких случаях пытаются реализовать другие меры например двух факторную авторизацию. Тогда злоумышленнику понадобиться доступ и к личному телефону или персональному ключу.
Двухфакторная аутентификация актуальна для клиент-серверных операций. А здесь актуальны операции только на клиенте. Неужели нет способа защитить локальные данные?
Ответить с цитированием
  #8 (permalink)  
Старый 26.04.2023, 18:52
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

Сообщение от voraa Посмотреть сообщение
https://developer.mozilla.org/en-US/...ypto/deriveKey
Там последний пример - как из некоего пароля получить ключ, а потом этим ключом шифровать данные.
Ааа. Получается можно сохранить в localStorage:

1. salt
2. iv - почти тоже самое что и salt
3. зашифрованный текст

И когда требуется расшифровка — вводим пароль и всё — данные расшифровываются. Сам пароль получается вообще никак не надо ни хэшировать, ни хранить где-либо.
Ответить с цитированием
  #9 (permalink)  
Старый 26.04.2023, 19:20
Аватар для webgraph
Профессор
Отправить личное сообщение для webgraph Посмотреть профиль Найти все сообщения от webgraph
 
Регистрация: 14.11.2014
Сообщений: 186

Сообщение от MallSerg
Если у злоумышленника есть физический доступ к машине то криптография теряет смысл.
С чего вы так решили?) Объясните более подробно вашу позицию и предоставьте факты)
Ответить с цитированием
  #10 (permalink)  
Старый 26.04.2023, 22:17
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

Цитата:
С чего вы так решили?) Объясните более подробно вашу позицию и предоставьте факты)
Физический доступ к компьютеру позволяет проводить криптоатаку "человек посередине". Обычно это всякие кейлогеры и расширения браузера.
Что бы этого избежать в систему криптообмена вводят третий фактор не зависящий от скомпрометированной части системы. Например шифрование и расшифровку производит отдельное устройство вставленное в USB порт или сервис в интернете присылает SMS необходимое для расшифровки.
В целом не так важно как третий фактор будет работать с системой главное не полагаться на скомпрометированную часть системы полностью.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как спарсить POST данные в Google Plus ChenghisKhan Общие вопросы Javascript 0 16.01.2017 10:31
Как передать данные из одинаковых форм php скрипту через AJAX? griga999 AJAX и COMET 28 10.10.2016 06:09
Как вставить данные в highcharts? user71 Общие вопросы Javascript 40 08.08.2016 03:31
Как из php файла передать данные в переменную javascript angelzzz Общие вопросы Javascript 36 01.07.2016 15:54
Как передать данные в скрипт? ivaniv1900 jQuery 6 23.06.2014 16:18