mirror of
https://github.com/Steffo99/appunti-magistrali.git
synced 2024-11-29 13:24:17 +00:00
33 lines
1,018 B
Markdown
33 lines
1,018 B
Markdown
|
---
|
||
|
aliases: ["keyed hash function"]
|
||
|
---
|
||
|
|
||
|
[[message authentication code system]] applicando due volte una [[funzione di hashing crittografico]] per generare due chiavi indipendenti.
|
||
|
|
||
|
## Implementazione
|
||
|
|
||
|
L'implementazione è agnostica dalla [[funzione di hashing crittografico]] utilizzata, ma richiede in input la dimensione del [[blocco]] utilizzato.
|
||
|
|
||
|
```python
|
||
|
from typing import Callable
|
||
|
HashFunction = Callable[[bytes], bytes]
|
||
|
|
||
|
def hmac(hashf: HashFunction, block_length: int, key: bytes, message: str) -> bytes:
|
||
|
base_padding = b"\x00" * (block_length - len(key))
|
||
|
inner_padding = b"\x36" * block_length
|
||
|
outer_padding = b"\x5c" * block_length
|
||
|
|
||
|
base_key = key + base_padding
|
||
|
inner_key = hash(base_key ^ inner_padding)
|
||
|
outer_key = base_key ^ outer_padding
|
||
|
|
||
|
return hashf(bf"{keyo}{keyi}{message}")
|
||
|
```
|
||
|
|
||
|
## Caso d'uso
|
||
|
|
||
|
Viene usato solitamente nei [[general purpose computer]].
|
||
|
|
||
|
## Vedi anche
|
||
|
|
||
|
- #Extra [RFC 2104: **HMAC: Keyed-Hashing for Message Authentication**](https://datatracker.ietf.org/doc/html/rfc2104)
|