BAC un PACE atslēgu kalkulators
Aprēķiniet atslēgas, ar kurām pārbaudes sistēma atver e-pases mikroshēmu: BAC K_seed, K_enc un K_mac, kā arī PACE paroles atslēgu K_π 3DES un AES šifriem. Aprēķins atbilst ICAO Doc 9303 11. daļai.
Kā tiek aprēķinātas BAC atslēgas
Pamata piekļuves kontrole (BAC) izmanto trīs MRZ laukus, katru kopā ar tā kontrolciparu: dokumenta numuru, dzimšanas datumu un derīguma termiņu. Kopā tie veido MRZ informāciju, piemēram, L898902C<369080619406236. Ja dokumenta numurs ir īsāks par deviņām rakstzīmēm, to papildina ar <.
No MRZ informācijas aprēķina SHA-1 jaucējvērtību, un tās pirmie 16 baiti ir Kseed. No tā ar atslēgu atvasināšanas funkciju KDF(K, c) iegūst divas sesijas atslēgas: tā ir SHA-1 jaucējvērtība no K, kam pievienots 32 bitu skaitītājs c. Skaitītājs 1 dod šifrēšanas atslēgu Kenc, skaitītājs 2 — MAC atslēgu Kmac. Abas ir divu atslēgu 3DES atslēgas, tāpēc no katras jaucējvērtības ņem pirmos 16 baitus un katram baitam koriģē paritātes bitu.
Kā tiek aprēķināta PACE paroles atslēga
Jaunākos dokumentos BAC aizstāj PACE, kas pieņem divu veidu paroles. Ar MRZ parole ir pilna 20 baitu SHA-1 jaucējvērtība no tās pašas MRZ informācijas. Ar CAN — sešu ciparu numuru, kas uzdrukāts uz dokumenta, — parole ir pats CAN. Abos gadījumos atslēga Kπ ir KDF(parole, 3).
| Šifrs | Jaucējfunkcija | Atslēgas garums |
|---|---|---|
| 3DES | SHA-1 | 16 baiti, ar koriģētu paritāti |
| AES-128 | SHA-1 | 16 baiti |
| AES-192 | SHA-256 | 24 baiti |
| AES-256 | SHA-256 | 32 baiti |
Kuru šifru izmanto mikroshēma, norādīts tās PACEInfo failā EF.CardAccess.
ICAO testa piemēri
Kalkulators atkārto ICAO Doc 9303 11. daļas aprēķinu piemērus.
| MRZ informācija | L898902C<369080619406236 |
|---|---|
| Kseed | 239AB9CB282DAF66231DC5A4DF6BFBAE |
| Kenc | AB94FDECF2674FDFB9B391F85D7F76F2 |
| Kmac | 7962D9ECE03D1ACD4C76089DCE131543 |
| PACE MRZ informācija | T22000129364081251010318 |
| Kπ AES-128 | 89DED1B26624EC1E634C1989302849DD |
Kods
import hashlib
def kdf(seed: bytes, counter: int, cipher: str = "3DES") -> bytes:
data = seed + counter.to_bytes(4, "big")
if cipher in ("3DES", "AES128"):
key = hashlib.sha1(data).digest()[:16]
else:
key = hashlib.sha256(data).digest()[:24 if cipher == "AES192" else 32]
if cipher == "3DES": # nepāra paritāte katram baitam
key = bytes((b & 0xFE) | (bin(b & 0xFE).count("1") % 2 == 0) for b in key)
return key
info = b"L898902C<369080619406236"
k_seed = hashlib.sha1(info).digest()[:16]
k_enc, k_mac = kdf(k_seed, 1), kdf(k_seed, 2)
k_pi = kdf(hashlib.sha1(b"T22000129364081251010318").digest(), 3, "AES128")
Biežākie jautājumi
- Vai ir droši ievadīt īstas pases datus?
- Atslēgas tiek aprēķinātas jūsu pārlūkā, un nekas neatstāj jūsu ierīci. Ņemiet vērā, ka BAC un PACE atslēgas atver tikai tāda dokumenta mikroshēmu, kas fiziski atrodas pie lasītāja, un ikviens, kam dokuments ir rokās, tāpat var nolasīt MRZ. Izstrādei labāk izmantot ICAO piemērus vai ģenerētus datus.
- Kāpēc lasītājs joprojām neatver mikroshēmu?
- Visbiežāk MRZ nolasīta ar kļūdu, tāpēc kāds no trim kontrolcipariem vai dokumenta numura rakstzīme ir nepareiza. Vispirms pārbaudiet MRZ ar MRZ pārbaudes rīku. Citi biežāki iemesli: mikroshēma atbalsta tikai PACE ar šifru, ko lasītājs nepiedāvā, vai dokumenta numurs ir garāks par deviņām rakstzīmēm.
- Kāda ir atšķirība starp BAC un PACE?
- BAC sesijas atslēgas atvasina tieši no MRZ, tāpēc to stiprumu ierobežo MRZ entropija. PACE paroli izmanto tikai atslēgu vienošanās protokolam (Difija–Helmana), kas dod stipras sesijas atslēgas pat no īsas paroles, piemēram, CAN.
- Kur atrodams CAN?
- Personas apliecībās tas parasti ir sešu ciparu numurs priekšpusē. Daudzās pēdējos gados izdotās pasēs tas uzdrukāts arī datu lapā.