Útoky na LFSR šifry. Jan Hrach. PGP: CD C6D 164D A24D F019 2F8E E. InstallFest /32

Podobné dokumenty
. Bezpečnost mobilních telefonů. David Machač

SIM karty a bezpečnost v mobilních sítích

Obecné výpočty na GPU v jazyce CUDA. Jiří Filipovič


Proudové šifry a posuvné registry s lineární zpětnou vazbou

Pokročilé architektury počítačů

3. Aritmetika nad F p a F 2

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

6. Cvičení [MI-KRY Pokročilá kryptologie]

Procesor. Procesor FPU ALU. Řadič mikrokód

Stavební bloky kryptografie. Kamil Malinka Fakulta informačních technologií

Strojový kód. Instrukce počítače

Kryptoanalýza šifry PRESENT pomocí rekonfigurovatelného hardware COPACOBANA

GPGPU Aplikace GPGPU. Obecné výpočty na grafických procesorech. Jan Vacata

Implementace numerických metod v jazyce C a Python

Informatika Ochrana dat

4. Úvod do paralelismu, metody paralelizace

Architektury CISC a RISC, uplatnění v personálních počítačích

Paralelní a distribuované výpočty (B4B36PDV)

Paměti Flash. Paměti Flash. Základní charakteristiky

Řešíme úlohu zpracování velkého množství dat. Data jsou symetrická, úloha je dobře paralelizovatelná

Management procesu I Mgr. Josef Horálek

Šablony, kontejnery a iterátory

Laboratorní zdroj - 6. část

Kódy pro odstranění redundance, pro zabezpečení proti chybám. Demonstrační cvičení 5 INP

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Šablony, kontejnery a iterátory

Základy kryptografie. Beret CryptoParty Základy kryptografie 1/17

Vzdálenost jednoznačnosti a absolutně

Řešíme úlohu zpracování velkého množství dat. Data jsou symetrická, úloha je dobře paralelizovatelná. Propaganda výrobců grafických karet:

IB109 Návrh a implementace paralelních systémů. Kolektivní komunikační primitava. RNDr. Jiří Barnat, Ph.D.

Paralelní a distribuované výpočty (B4B36PDV)

Semestrální práce z předmětu Speciální číslicové systémy X31SCS

Architektury VLIW M. Skrbek a I. Šimeček

Algoritmus. Algoritmus je posloupnost kroků, které jsou potřeba k vyřešení problému.

Čipové karty Lekařská informatika

Intel (2) Intel (1) Intel (3) Intel (4) Intel (6) Intel (5) Nezřetězené zpracování instrukcí:

Komerční výrobky pro kvantovou kryptografii

KTE / PPEL Počítačová podpora v elektrotechnice

Šifrová ochrana informací věk počítačů PS5-1

Karel Kohout 18. května 2010

Přerušovací systém s prioritním řetězem

[1] samoopravné kódy: terminologie, princip

Jan Nekvapil ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická

8. RSA, kryptografie s veřejným klíčem. doc. Ing. Róbert Lórencz, CSc.

Pokročilé architektury počítačů

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

Paralelní systémy. SIMD jeden tok instrukcí + více toků dat jedním programem je zpracováváno více různých souborů dat

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Protiopatření eliminující proudovou analýzu

Moderní metody substitučního šifrování

Optimalizace pro GPU hardware

Andrew Kozlík KA MFF UK

Vstupně - výstupní moduly

Anotace. Informace o praktiku z programování!!! Direktivy překladače Soubory (textové) Quicksort Metoda rozděl a panuj

Vlákna a přístup ke sdílené paměti. B4B36PDV Paralelní a distribuované výpočty

Zpracování obrazu v FPGA. Leoš Maršálek ATEsystem s.r.o.

Systém adresace paměti

Příklady popisu základních obvodů ve VHDL

Algoritmizace a programování

Princip funkce počítače

Ochrana dat Obsah. Výměna tajných klíčů ve veřejném kanálu. Radim Farana Podklady pro výuku. Kryptografické systémy s tajným klíčem,

Matice. Modifikace matic eliminační metodou. α A = α a 2,1, α a 2,2,..., α a 2,n α a m,1, α a m,2,..., α a m,n

DRN: Soustavy linárních rovnic numericky, norma

Procesor Intel Pentium (1) Procesor Intel Pentium (3) Procesor Intel Pentium Pro (1) Procesor Intel Pentium (2)

Procesy a vlákna (Processes and Threads)

GPU A CUDA HISTORIE GPU CO JE GPGPU? NVIDIA CUDA

Šifrování disků a TrueCrypt

Základní komunikační operace

LabView jako programovací jazyk II

vnější profesionál vnitřní profesionál organizace opakuje podsouvá

Architektura počítačů Logické obvody

Úvod do mobilní robotiky AIL028

Šifrová ochrana informací věk počítačů PS5-2

Obsah. Euler-Fermatova věta. Reziduální aritmetika. 3. a 4. přednáška z kryptografie

Algoritmus pro hledání vlastních čísel kvaternionových matic

Úvod do GPGPU J. Sloup, I. Šimeček

Paralelní algoritmy v lineární algebře. Násobení matic

Přednáška. Strojový kód a data. 4. Přednáška ISA J. Buček, R. Lórencz

Paralelní programování

ÚVODNÍ ZNALOSTI. datové struktury. správnost programů. analýza algoritmů

aneb jiný úhel pohledu na prvák

Lingebraické kapitolky - Počítání s maticemi

Architektury paralelních počítačů I.

Knihovna DataBoxLib TXV první vydání prosinec 2010 změny vyhrazeny

Základní principy konstrukce systémové sběrnice - shrnutí. Shrnout základní principy konstrukce a fungování systémových sběrnic.

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

GENEROVÁNÍ KÓDU 9. SHRNUTÍ - PŘÍKLAD POSTUPU PŘEKLADU VSTUPNÍHO PROGRAMU (ZA POUŽITÍ DOSUD ZNÁMÝCH TECHNIK)

NPRG030 Programování I, 2018/19 1 / :25:37

Pokročilá architektura počítačů

Konstrukce šifer. Andrew Kozlík KA MFF UK

Základy informatiky. 2. Přednáška HW. Lenka Carr Motyčková. February 22, 2011 Základy informatiky 2

Základy kryptologie. Kamil Malinka Fakulta informačních technologií

vlastnosti, praktické zkušenosti

GPGPU. Jan Faigl. Gerstnerova Laboratoř pro inteligentní rozhodování a řízení České vysoké učení technické v Praze

Asymetrická kryptografie a elektronický podpis. Ing. Dominik Breitenbacher Mgr. Radim Janča

Úvod do kvantového počítání

UKRY - Symetrické blokové šifry

Operační systémy. Přednáška 8: Správa paměti II

Architektura Intel Atom

Transkript:

1/32 Útoky na LFSR šifry InstallFest 2016 Jan Hrach http://jenda.hrach.eu/ PGP: CD98 5440 4372 0C6D 164D A24D F019 2F8E 6527 282E

2/32 Implementace Dokumentace, materiály, papery, zdrojáky https://brmlab.cz/project/gsm/deka/start

3/32 GSM z rychlíku HLR BTS Šifrováno A5/1 HLR a SIM v mobilu mají sdílené tajemství Ki Před komunikací si dohodnou session key Kc Ki se neumí pasivně crackovat Kc jo

4/32 Komunikace telefonu První část nešifrovaná, nic moc zajímavého (občas IMSI a TA) Pak zapnou šifrování Pak nahráváme nesmysly ty chceme cracknout

5/32 Jak to sniffnout Hacknutý mobil https://brmlab.cz/user/jenda/gsm SDR Airprobe gr-gsm co s tím pak?

6/32 Šifry Bloková (AES, Blowfish, DES) Proudová (RC4, A5/1)

7/32 Linear Feedback Shift Register tajný stav keystream

8/32 Lineární algebra (A5/2, A5-GMR) tajný stav keystream XOR ~ sčítání mod 2 Bitshift ~ násobení mocninami dvou Samoopravné kódy: XOR a shift, pravá strana rovnice maticový a lingebra magic soustava lineárních rovnic umíme efektivně řešit http://www.npag.fr/project-a52hacktool https://www.youtube.com/watch?v=y15bxrsa3ia

9/32 A5/1 Majority clocking. Neumíme linearizovat.

10/32 A5/1 Jenom 64 bitů celkem!

11/32 Codebook Internal state 0x0000000000000000 0x0000000000000001 0x0000000000000002... 0xffffffffffffffff Keystream 0xabcdef12345678 0x54632221afed03 0x456dcd562b980e 0x002accd4dc51df 2^64 * 16B = 296 EB

12/32

13/32 Btw. jak získat keystream? Ciphertext = plaintext XOR keystream Keystream = plaintext XOR ciphertext chceme hmm známe BTS musí pořád vysílat Definován padding 0x2B Informace o okolních BTS, o síle signálu,

14/32 Kolaps klíčového prostoru Do některých kombinací se nedá dostat Několika dummy cykly A5/1 tyto stavy eliminujeme Efektivní stavový prostor 2^61 2^64 * 16B = 296 EB 2^61 * 16B = 37 EB

15/32 Pokrytí GSM frame 4*114 bitů 64 bitů v šifře 4*(114-64+1) = 204 samplů Stačí pokrytí 1/204 = 0,5 % pro ~50% úspěšnost Framů je v komunikaci hodně 2^64 * 16B = 296 EB 2^61 * 16B = 37 EB 2^61 * 16B / 204 = 181 PB

16/32 Chainy Encoding: Počáteční stav Počáteční stav Počáteční stav Decoding: A5/1 A5/1 A5/1 A5/1... Koncový stav 000 A5/1 A5/1... A5/1 A5/1 Koncový stav. 000.. A5/1 A5/1... A5/1 A5/1 Koncový stav 000 tohle chceme! Počáteční stav A5/1 Vstup A5/1 A5/1 Koncový stav 000 Lookup

17/32 Chainy Počáteční stav A5/1 A5/1 A5/1 A5/1... Koncový stav 000 Koncový stav ~ 12 bitů nulových průměrná délka chainu 2^12 = 4096 2^64 * 16B = 296 EB 2^61 * 16B = 37 EB 2^61 * 16B / 204 = 181 PB 2^61 * 16B / 204 / 4096 = 44 TB

18/32 44 TB... pořád trochu moc Prodloužit chainy? Kolize! startpoint1 duplicitní data startpoint2 endpoint

19/32 Barvy Barvy ~ konstanty, kterými po každé iteraci XORujeme Počáteční stav Počáteční stav A5/1 A5/1 A5/1 A5/1 A5/1 A5/1 A5/1 Koncový stav 000 A5/1 A5/1 A5/1 A5/1 A5/1 Koncový stav 000 XOR C1 XOR C2... XOR Cn Stejné kolize v různých barvách jsou v každé iteraci algoritmu rozbity rozdílnými konstantami 2^64 * 16B = 296 EB 2^61 * 16B = 37 EB 2^61 * 16B / 204 = 181 PB 2^61 * 16B / 204 / 4096 = 44 TB... Pravděpodobnost, že ke kolizi dojde v jedné barvě, je n-krát menší 8 barev: 2^61 * 16B / 204 / 4096 / 8 = 5,5 TB

20/32 Startpoint encoding výška tabulky 2^34 34 bitů informace zvolme hash fci 34 64b ušetříme 30 bitů na chain Počáteční stav Počáteční stav Počáteční stav A5/1 A5/1... A5/1 A5/1. A5/1 A5/1.. A5/1 A5/1 Koncový stav 000 A5/1 A5/1 A5/1 A5/1 Koncový stav 000 Koncový stav 000

21/32 Endpoint encoding Počáteční stav Počáteční stav Počáteční stav A5/1 A5/1... A5/1 A5/1. A5/1 A5/1.. A5/1 A5/1 Koncový stav 000 A5/1 A5/1 A5/1 A5/1 Koncový stav 000 Koncový stav 000 2^34 setříděných čísel efektivní prostor 2^(64-12) průměrná mezera 2^(64-12-34) encoding mezery pomocí 18 bitů! místo 128 bitů na chain nám stačí 34+18+režie 2^64 * 16B = 296 EB 2^61 * 16B = 37 EB 2^61 * 16B / 204 = 181 PB 2^61 * 16B / 204 / 4096 = 44 TB 2^61 * 16B / 204 / 4096 / 8 = 5,5 TB /mnt/tables/gsm# du --si. 1.8T.

22/32 Realizace 40 tabulek * 8 barev * (8 barev * 4096 chainlinků od každé barvy) * 204 samplů 2 miliardy A5/1 operací pro cracknutí jednoho framu AMD HD7970: 1 miliarda operací za sekundu Reálná úspěšnost hádání keystreamu je nižší Podle operátora 5-60 sekund, úspěšnost 10-99 % T-Mobile to fakt dobře zabezpečil a už to na něm skoro nefunguje Vodafone je taky docela bezpečný O2 je děravá

Naivní implementace A5/1 23/32 Z vašeho 64b procesoru se použije jen 22 bitů! Tady se z 64bit registru používá dokonce jen 1 bit!! Tady se rozbije branch prediction! Tohle na dnešních počítačích fungovat nebude... int reg1, reg2, reg3; while(reg1 & 0xFFF) { bit1 = (reg1 >> 8)&1;.... xor1 = (reg1 >> 18) ^ (reg1 >> 17)..;.... if(...) reg1 = (reg1 << 1) xor1;.... }

24/32 Váš počítač Pracuje s 256bit čísly najednou (SSE, AVX) Nedokáže dělat branch prediction, protože A5/1 je PRNG, který je prostě náhodný Na neuhádnutém skoku musí flushnout celou pipeline Je lepší spočítat třeba 4 zbytečné věci než skočit!

25/32 A5/1 slice machine 64b = 16*4-vektor neomezeně bitů, prostě kolik váš procesor dá +-+-+-+-+-+-+-+-+ A5/1 instance #1 A5/1 instance #2 A5/1 instance #3... +-+-+-+-+-+-+-+-+ Shift registru: instrukce pro vektorovou rotaci, kruhové přiřazení XOR: vektor s vektorem, třeba 256 bitů najednou V každém taktu manipulujeme třeba s 64 instancemi šifry najednou!

26/32 Eliminace IF-ů Spočítáme oba stavy a pak si vybereme _vector rotovat; // bitmaska reg[i] = (reg[i+1] & rotovat) (reg[i] & ~rotovat); reg je třeba pole uint64 64 instancí A5/1 Pro detaily viz bohatě komentovaný genkernel32 z Deky, nebo si mě odchytněte na afterparty

27/32 OpenCL - motivace ATI HD 7970: 2048 jader, 8192 threadů na 1 GHz 128bit vektory 32 TB/s!!! OpenCL běží na grafikách, procesorech a trochu i na FPGAčkách OpenCL se vyplatí i na procesorech, abyste si nemuseli řešit paralelismus

28/32 OpenCL - architektura Aplikace předá OpenCL buffer a zdroják kernelu OpenCL spustí jeden kernel nad každým prvkem bufferu kernely běží masivně paralelně Kernel přepíše vstupní data v bufferu výsledkem OpenCL vrátí buffer Aplikace buffer přečte

29/32 Kernel kernel void brm(global ulong *buf) { // kernel index private size_t me = get_global_id(0); // local vars private ulong a; // read input data a = buf[me]; // Compute something a = a + me*me; } // write result back to memory buf[me] = a;

30/32 OpenCL - userspace import pyopencl as cl, numpy as np # create context ctx = cl.create_some_context() queue = cl.commandqueue(ctx) # create some input data, in this case array filled with zeros a = np.array(np.zeros((20),dtype=np.uint64)) # create opencl buffer buf = cl.buffer(ctx, cl.mem_flags.read_only cl.mem_flags.copy_host_ptr, hostbuf=a) # load kernel source f=open("kernel.c","r") SRC = ''.join(f.readlines()) f.close() # compile it prg = cl.program(ctx, SRC).build() print("input:"); print(a) # launch the kernel event = prg.brm(queue, a.shape, None, buf) event.wait() # copy data back from opencl cl.enqueue_copy(queue, a, buf) # print it print("cl returned:"); print(a)

31/32 OpenCL - run ~/tmp/ocltest>./ocltest.py Input: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] CL returned: [ 0 1 4 9 16 25 36 49 64 81 100 121 144 169 196 225 256 289 324 361]

32/32 UAG