Pokud si zmapuju svůj PC, můžu najít v EM poli "otisky" bloků instrukcí. A když pak to pole z PC chytám na přijímač, pomocí jednoduché korelace dvou signálů jde s nějakou pravděpodobností odhadnout, co kompl dělá.
Pokud dokážu každým bitem klíče dostat trochu jiný "otisk", pak můžu s pravděpodobností odhadnout, jaký číslo se zpracovává. I kdyby to byla 1% šance zachycení správnýho bytu, pokud stejným klíčem dešfruju stovky dokumentů, pravděpodobnost roste...
Ale patrně to ladili na jeden stroj s jedním CPU a nebude to univerzální metoda. Každá mašina se může chovat jinak (latence pamětí, takt CPU, operace jádra sysému, ostatní procesy,...). A nefunguje to na jiný algoritmus, který použije jinačí operace.
Je to tak: "We have tested numerous laptop computers of various models and makes.1 For concreteness, in the remainder of this paper our examples use Lenovo 3000 N200 laptops, which exhibit a particularly clear signal." A pod čarou: "Signal quality varied dramatically with the target computer model and probe position. Computers of the same model exhibited consistent optimal probe position, but slight differences in the emitted signals (which can be used to distinguish between them)."
Podle toho, co jsem pochopil z paperu, nemusí být přesnost až tak úžasná, protože při modulo násobení se rozlišuje, zda procesor provádí obecné násobení, nebo mocnění dvěma, které ve výsledném signálu vypadají výrazně jinak. A protože se díky použitému algoritmu dělají pěkně bit po bitu, může být i dobře rozpoznatelná ta správná sekvence – a té rozlišitelnosti pomáhají tím, že si připraví vhodnou řádku ciphertextů. A protože je to nějaká poměrně vyladěná vnitřní smyčka, pravděpodobnost, že to (osmkrát) preemptne jiný proces, může být taky dost nízká.
A jo - ladili to jen na ElGamal a RSA.
A jo - ladili to jen na ElGamal a RSA.
.. a které další algoritmy použitelné k šifrování v gnupg máme? :)
Přesně tak. :)
V případě toho RSA ještě napřed museli vypnout randomizaci ciphertextu (blinding) která je v gnupg (libgcrypt) defaultně zapnutá. Bez toho by byly v kýblu.
Tipuju, že úplně v kýblu ne, jen by potřebovali výrazně víc pokusů a delší dobu, aby z toho byl statisticky významný výsledek. Myslím, že odkazují na nějaké pokusy jiných skupin, které na to šly právě takhle.
Funguje to. Ale úplně jinak, než jak to naznačují podobné články. Zaznamenává se elektromagnetické pole a z něj se dělá spektrální analýza. V počítači je několik frekvencí, mraky odrazů, plno věcí pracujících s děličem frekvence, na více taktech atd. Pokud nějaká část obvodu generuje charakteristické spektrum frekvencí, tak se dá usoudit, zda běží nebo ne.
Představte si to jako kravál v hospodě. Člověk neslyší nic. Ale když uděláte záznam, odfiltrujete frekvence mezi 80 a 8000 Hz, tak rázem dostanete poměrně jasný zvuk okolí. Uslyšíte šoupání židlí a dost možná i hudbu z reproduktorů.
Podobně to funguje u téhle analýzy. Necháte počítač normálně fungovat a zaznamenáváte spektrum. Pak uděláte něco speciálního, třebas velké množství dělení. V CPU budou děličky, což je poměrně obvodově náročné zařízení. Opět zaznamenáte spektrum a pokusíte se najít rozdíly. Čím více součástek daný obvod má, tím hlasitěji je slyšet. A čím více taktů potřebuje ke své práci, tím výraznější bude jeho stopa ve spektru. Nikdy nedokážete poznat, co procesor dělal, ale poznat, zda se zapla násobička v ALU, to už se s jistou mírou pravděpodobnosti dá. Opravdu si to představte tak, že počítač píská na 3GHz, ale chvílemi se tam ozve lupnutí na 0.8GHz provázené signálem na 1.5GHz fázově posunutým o dvacet stupňů.
Pokud má procesor více jader, na jednom (de)kóduje a na druhém počítá "nesmysly", tak nepoznáte nic. Ale u jednojader s jednou frontou instrukcí to skutečně pozorovatelné je. Ověřeno osobně v devadesátých letech na VŠ na jakési i8051. Spočítat, kolikrát se násobilo, se dařilo +/- padesát procent. U moderních procesorů na jejich frekvencích to asi bude řádově složitější, ale na druhou stranu to kolegové asi nedělají se školním vybavením z roku 1995.
Jak píše kolega, nehádalo se zda násobil nebo ne, ale kolikrát. Jestli násobil tisíckrát, milionkrát nebo vůbec tak šlo zjistit spolehlivě. A to to bylo ve školní laboratoři a jen tak mimochodem ukazované při probírání elektromagnetického rušení. S lepším vybavením bude úspěšnost lepší.
Proč dělat FFT zaznamenané známé sekvence, potom FFT odposlechnutýho signálu a pak korelaci? je to jako počítat zlomek přes jeho rozšíření, asi takhle:
2/5=44/110=0,4
Není jednodušší mít nahraný signál pro jednotlivý operace a postupně s tím projíždět okna vzorkovanýho signálu?
Popsal jsem to tak, jak nám to učitel ukázal a tak, jak jsme si to sami vyzkoušeli. Byla to oblíbená metoda "nevíte nic, zkuste něco zjistit". Dostat připravené tabulky a nahrané signály se tenkrát nenosilo, od studentů se očekávala vlastní iniciativa, nikoliv jen zopakovat něčí experiment podle detailního návodu. Tedy vlastně přeci jen něco připraveného bylo, nejsem si jistý, ale myslím, že nám dal seznam frekvenčních pásem, na která se zaměřit.
Pro cílený útok nepochybně existuje jednodušší přístup.