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.

Avots

Aprēķins notiek šajā ierīcē ar pārlūka Web Crypto API. Nekas netiek sūtīts uz serveri.

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).

ŠifrsJaucējfunkcijaAtslēgas garums
3DESSHA-116 baiti, ar koriģētu paritāti
AES-128SHA-116 baiti
AES-192SHA-25624 baiti
AES-256SHA-25632 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ācijaL898902C<369080619406236
Kseed239AB9CB282DAF66231DC5A4DF6BFBAE
KencAB94FDECF2674FDFB9B391F85D7F76F2
Kmac7962D9ECE03D1ACD4C76089DCE131543
PACE MRZ informācijaT22000129364081251010318
Kπ AES-12889DED1B26624EC1E634C1989302849DD

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ā.