HMAC и CMAC через ядро НАЙС.ОС¶
Теория вынесена в статьи HMAC-Стрибог, OMAC/CMAC, историческая имитовставка. Здесь — только использование зарегистрированных шаблонов ядра.
python3 - <<'PY'
import socket
secret=b'ONLY-FOR-LOCAL-TESTS-NOT-A-PRODUCTION-KEY'
message=b'NiceOS integrity demonstration'
with socket.socket(socket.AF_ALG,socket.SOCK_SEQPACKET) as alg:
alg.bind(('hash','hmac(streebog256)'))
alg.setsockopt(socket.SOL_ALG,socket.ALG_SET_KEY,secret)
conn,_=alg.accept()
with conn:
conn.sendall(message)
print('MAC:',conn.recv(32).hex())
PY
Это учебный ключ. В продуктивной среде его требуется генерировать случайным и не передавать в репозиторий/журналы. Сравнение MAC на стороне получателя должно выполняться за константное время. /proc/crypto подтверждает регистрацию шаблона, но не заменяет контрольные векторы и негативный тест с изменённым сообщением.