MAC

MAC (Message Authentication Code, ΠΊΠΎΠ΄ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ сообщСния) β€” это криптографичСская конструкция для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ цСлостности ΠΈ подлинности Π΄Π°Π½Π½Ρ‹Ρ…. MAC создаётся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ сСкрСта (ΠΊΠ»ΡŽΡ‡Π°), поэтому ΠΏΠΎΠ΄Π΄Π΅Π»Π°Ρ‚ΡŒ сообщСниС Π±Π΅Π· знания ΠΊΠ»ΡŽΡ‡Π° Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ свойства

  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для обнаруТСния случайных ΠΈΠ»ΠΈ Π·Π»ΠΎΠ½Π°ΠΌΠ΅Ρ€Π΅Π½Π½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ….
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ MAC Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ сСкрСтного ΠΊΠ»ΡŽΡ‡Π°.
  • НС обСспСчиваСт ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ (скрытиС) содСрТимого, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π·Π°Ρ‰ΠΈΡ‚Ρƒ ΠΎΡ‚ ΠΏΠΎΠ΄Π΄Π΅Π»ΠΊΠΈ.

Алгоритмы MAC

  • HMAC (Hash-based MAC) β€” Π½Π° основС Ρ…Π΅Ρˆ-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ SHA256, SHA512 ΠΈ Π΄Ρ€.).
  • CMAC β€” Π½Π° основС Π±Π»ΠΎΡ‡Π½Ρ‹Ρ… ΡˆΠΈΡ„Ρ€ΠΎΠ².
  • Π˜Π½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ MAC (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, GCM tag) β€” Ρ‚Π΅Π³ аутСнтичности, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ… Π±Π»ΠΎΡ‡Π½Ρ‹Ρ… ΡˆΠΈΡ„Ρ€ΠΎΠ² (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, AES-GCM).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ (HMAC Π½Π° Python)

import hmac
import hashlib
 
key = b'secret'
msg = b'important data'
 
mac = hmac.new(key, msg, hashlib.sha256).hexdigest()
print(mac)

ΠžΡ‚Π»ΠΈΡ‡ΠΈΠ΅ MAC ΠΎΡ‚ асиммСтричной Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ подписи

ΠšΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉMACАсиммСтричная цифровая подпись
Π’ΠΈΠΏ ΠΊΠ»ΡŽΡ‡Π΅ΠΉΠ‘ΠΈΠΌΠΌΠ΅Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ (ΠΎΠ±Ρ‰ΠΈΠΉ сСкрСт)АсиммСтричныС (ΠΏΡ€ΠΈΠ²Π°Ρ‚Π½Ρ‹ΠΉ/ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ)
ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΏΠΎΠ΄Π»ΠΈΠ½Π½ΠΎΡΡ‚ΠΈΠ’ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ±Π»Π°Π΄Π°Ρ‚Π΅Π»ΡŒ ΠΊΠ»ΡŽΡ‡Π°Π›ΡŽΠ±ΠΎΠΉ с ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ
ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΡΠ²ΠΎΠΉΡΡ‚Π²Π°Π¦Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒΠ¦Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ, Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ, Π½Π΅ΠΎΡ‚ΠΊΠ°Π·ΡƒΠ΅ΠΌΠΎΡΡ‚ΡŒ
АлгоритмыHMAC, CMAC, GCM tag ΠΈ Π΄Ρ€.RSA, DSA, ECDSA ΠΈ Π΄Ρ€.
Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΠ‘Ρ‹ΡΡ‚Ρ€Π΅Π΅ΠœΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅
ΠΠ°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² симмСтричной ΠΊΡ€ΠΈΠΏΡ‚ΠΎΠ³Ρ€Π°Ρ„ΠΈΠΈ, ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄ΠΎΠ²Π΅Ρ€ΡΡŽΡ‰ΠΈΠΌΠΈ ΡΡ‚ΠΎΡ€ΠΎΠ½Π°ΠΌΠΈΠ˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, подписСй