Привет, %username%!

Ранее мы уже затрагивали тему замедления хэширования. Это было еще до введения моды на быстрые хэшедробилки aka майнеры. Как оказалось, тема намного серьезней, чем «прокрутить хэш 100500 раз и подмешивать к нему всякий мусор», потому что GPU и спец девайсы драматически ускоряют перебор, с которым сложно бороться даже с помощью таких вещей как bcrypt.
И вот, люди запилили соревнование, результатом которого должен был стать алгоритм, который сложно ускорить на спец чипах и GPU, при этом он должен быть настраиваемым в зависимости от пожеланий разработчика. Таким алгоритмом стал Argon2.



Argon2 позволяет настраивать следующие параметры хэширования:

  1. Количество итераций
  2. Желаемый объем занимаемой памяти
  3. Степень параллелизма
  4. Размер результата, в байтах
  5. Секретный ключ
  6. Дополнительные данные


Так же, Argon2 доступен в двух вариантах: Argon2i и Argon2d. Первый делает больше проходов по памяти и более медленный, второй быстрее, но у него отсутствует защита от timing атак, а так же его сложнее подбирать на GPU. Если не уверены — выбирайте Argon2i.

Первый рекомендуется для хэширования паролей, второй — для криптовалют, там timing атаки не страшны.
Алгоритм оптимизирован именно для архитектуры x86/x64, поэтому его крайне сложно ускорять на ASIC/GPU и прочих железных штуках. Используется многократный проход по памяти, внутри формируется огромная страшная матрица хэшей, которые зависят друг от друга и сложным образом обрабатываются.

Если хочется совсем технических подробностей, то есть официальная дока с матаном и прочими выкладками.

Так же доступны биндинги для многих популярных языков и платформ: Go, Haskell, JavaScript, JVM, Lua, OCaml, Python, Python, Ruby, Rust и C#.
Разработчики рекомендуют подобрать параметры алгоритма таким образом, чтобы хэширование занимало примерно 0.5 секунды при расходе 2-4 гб памяти.

В общем, штука крутая, я считаю нужно её внедрять везде и всюду. Например, уже есть коины, основанные на Argon2. Пока что без GPU и asic.

Комментарии (12)


  1. NLO
    00.00.0000 00:00

    НЛО прилетело и опубликовало эту надпись здесь


    1. Scratch
      14.04.2016 09:44

      Если для её работы будет нужно 16 потоков и 4 гигабайта оперативной памяти, как вы её распараллелите на одном CPU?


      1. NLO
        00.00.0000 00:00

        НЛО прилетело и опубликовало эту надпись здесь


        1. Scratch
          14.04.2016 11:09
          +2

          NSA придется покупать в 2 раза больше процессоров и памяти, чтобы ускорить перебор всего в 2 раза. Сравните с asic майнилкой, которая одна ускоряет перебор в миллиард-триллион раз.


          1. NLO
            00.00.0000 00:00

            НЛО прилетело и опубликовало эту надпись здесь


  1. yamatoko
    14.04.2016 18:51
    -5

    Что такое биндинги? Это от слова бинтовать? В английском нет слова бинд.


    1. bapewka
      14.04.2016 20:14
      +1

      1. yamatoko
        15.04.2016 03:02
        -3

        ну и как это читается?


        1. avost
          15.04.2016 08:57
          -1

          Как что-то среднее между «хидером» и двумя страшными кадаврами — «рутованый» и «джейлбрейкнутый».


          1. yamatoko
            15.04.2016 09:02

            там не среднее, там вообще неправильно.


            1. avost
              15.04.2016 09:22

              А что правильно, хидера или рутованый?


      1. yamatoko
        16.04.2016 15:16
        -2

        ну так где же там бинд?