Дерево страниц

Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Оглавление

Введение

В статье описана методика генерации хеша пароля по алгоритму защиного преобразования ГОСТ Р 34.11-2012. Хеш генерируется в формате файла /etc/shadow. Формат генерируемого хеша:

...

  • код_алгоритма_хеширования — в данном примере используется gost12512hash;
  • модификатор_входа — последовательность случайных символов, добавляемая к хешируемым данным (паролю) для предотвращения декодирования методом перебора , далее "соль"(соль, salt). Далее в примерах используется соль saltsaltsaltsalt;
  • хеш_пароля — собственно хеш пароля, полученный после добавления соли.

Разделителем между полями служит символ "$" (доллар). Например:

...

Для генерации хеша используется функция gost12_512_crypt() входящая в состав пакета libgost. Пакет libgost устанавливается в Astra Linux по умолчанию. Далее предполагается, что при установке пакета библиотека libgost.so размещена в файле /lib/libgost.so.2.0.2 (актуально для Astra Linux x.7, 1.6.12, 2.12.46). Проверить, где находится библиотека в используемом обновлении можно командой:

Command
dpkg -L libgost

Генерация хеша пароля по алгоритму ГОСТ Р 34.11-2012

...

с помощью функции gost12_512_crypt()

Установка пакетов

Для сборки программы требуется установить компилятор gcc (пакет gcc). Для установки пакета gcc в ALSE x.7 требуется подключить базовый репозиторий, в более ранних обновлениях Astra Linux Special Edition требуется подключить репозиторий диска со средствами разработки. Команда для установки:

Command

sudo apt install gcc

Генерация хеша пароля по алгоритму ГОСТ-2012-512 с помощью функции gost12_512_crypt()

Пример программы генерации:

...

Блок кода
./a.out 
salt=q2w2e2r2 pass=saltsaltsaltsalt hash=$gost12512hash$saltsaltsaltsalt$Y.AHSfY6w10hNisNhRQkl3YuAexXkTWxDAI2sipxMVG.wVHgZ5czD2wX2zMpptQEu2Wpfuo7DiAKDxDWe/IjS0

Генерация хеша пароля по алгоритму ГОСТ-2012-512 с помощью функции gost12_512_crypt() в Python

Установка пакетов

Для генерации хеша пароля по алгоритму ГОСТ-2012-512 с помощью функции gost12_512_crypt() в Python установка дополнительных пакетов не требуется.

Пример программы

Пример программы:

Блок кода
languagepy
#!/usr/bin/python3

import base64, ctypes, getpass, os, sys

def gost12_512_crypt(key, salt):
    libgost = ctypes.cdll.LoadLibrary("/lib/libgost.so.2.0.2")

    libgost.gost12_512_crypt.argtypes = (
        ctypes.c_char_p,
        ctypes.c_char_p,
    )
    libgost.gost12_512_crypt.restype = ctypes.c_void_p

    c_void_ptr = libgost.gost12_512_crypt(key.encode(), salt.encode())
    c_result = ctypes.cast(c_void_ptr, ctypes.c_char_p)

    return c_result.value.decode()

if __name__ == "__main__":
    salt = (
        sys.argv[1]
        if len(sys.argv) > 1
        else base64.urlsafe_b64encode(os.urandom(12)).decode("ascii").rstrip("=")
    )
    print(gost12_512_crypt(getpass.getpass(), salt))

...