it-swarm-id.com

Di mana saya bisa belajar cryptography / cryptanalysis dengan cara yang sulit, tanpa pergi ke sekolah? Ada buku bagus?

Saya tidak terlalu buruk dalam matematika:

Saya tahu apa yang p-list dan p-kombinasi, saya tahu aljabar matriks, saya tahu apa yang XOR adalah, saya tahu bagaimana cara mengetahui apakah angka adalah bilangan prima, dll: Saya tidak programmer yang membenci matematika karena dia buruk dalam hal itu, tetapi saya tidak punya gelar PhD.

Saya juga tidak buruk dalam ilmu komputer, setidaknya dalam hal budaya ilmu komputer umum:

Saya tahu C, C++ (keduanya belajar di sekolah), python, beberapa haskell, pengkodean teks apa di luar sana, cara kerja UNICODE, saya tahu bagaimana file dapat dikompresi atau dienkripsi, algoritma umum apa yang ada di luar sana (diffie-hellman, Algoritma LZMA, DES, AES, Serpent, Blowfish, SHA, MD5 ...). Saya banyak tertarik pada kriptografi di wikipedia atau situs web lain, tetapi saya tidak berpikir wikipedia bisa mengajari saya kriptografi tanpa merinci algoritma atau tanpa latihan; misalnya saya tahu apa itu kriptografi sinkron dan apa itu asinkron (kunci publik/pribadi).

Saya ingin belajar bagaimana menerapkan dengan benar dan aman algoritma yang paling populer, dan bagaimana membuatnya dapat diandalkan: buku atau tutorial atau kursus yang bagus. Saya dengan cepat mencari di Khan Academy, tetapi hal ini tidak sepele dan membutuhkan pengetahuan dalam matematika, ilmu komputer dan/atau elektronik.

Saya tidak ingin membaca halaman-halaman teori yang adil tentang hal-hal dasar yang mungkin sudah saya ketahui atau mungkin tidak benar-benar relevan dengan kriptografi saat ini, seperti makalah yang ditulis oleh seorang peneliti, hanya sesuatu yang praktis, dengan masalah, dan masalah kriptanalisis, untuk siswa.

Saat ini saya memiliki banyak waktu luang, saya hanya 26, dan saya yakin saya dapat mempelajari hal-hal ini, tidak hanya untuk kenaikan gaji, tetapi juga karena saya selalu tertarik dengan kriptografi tanpa benar-benar memahaminya, Saya tidak bisa menemukan bahan yang bagus.

39
jokoon

(LZMA adalah algoritma kompresi, bukan kriptografi.)

Untuk tujuan mengimplementasikan algoritma kriptografi, metode generik mendapatkan standar deskriptif yang relevan, meraih keyboard Anda, dan mencoba. Sebagian besar standar mencakup "vektor uji", mis. Nilai sampel yang memberi tahu Anda apakah implementasi Anda mengembalikan jawaban yang benar. Pada titik itu, segalanya berbeda, tergantung pada jenis algoritma apa yang Anda pertimbangkan.

Kriptografi simetris:

Algoritma simetris mencakup enkripsi simetris, fungsi hash, dan kode otentikasi pesan (MAC). Anda tidak perlu tahu banyak matematika untuk menangani ini; kebanyakan tentang penambahan bilangan bulat 32-bit dan 64-bit (itu adalah aritmatika modular, dengan 232 atau 264 sebagai modulus) dan operasi bitwise (XOR, AND ...).

Kode tersebut biasanya dilakukan dalam C. Performa yang baik dicapai dengan memiliki beberapa gagasan tentang bagaimana kompiler C akan memahami dan menerjemahkan kode menjadi instruksi untuk CPU; pengetahuan tentang Majelis tidak sepenuhnya wajib, tetapi cukup bermanfaat. Parameter penting adalah memori cache: loop membuka gulungan biasanya merupakan alat yang baik, tetapi jika Anda berlebihan, kinerja turun tajam.

Saya sarankan mulai dengan mengimplementasikan fungsi hash klasik (keluarga SHA, yang dijelaskan dalam FIPS 180- ) dan mencoba membuatnya cepat. Sebagai titik perbandingan, dapatkan OpenSSL dan gunakan alat baris perintah openssl speed Untuk melihat kinerja seperti apa yang dapat diperoleh (alat ini sudah termasuk dalam distribusi Linux yang layak, dan itu bekerja di Windows dan MacOS juga). Misalnya, di PC saya:

$ openssl speed sha256
Doing sha256 for 3s on 16 size blocks: 4842590 sha256's in 3.00s
Doing sha256 for 3s on 64 size blocks: 2820288 sha256's in 2.99s
Doing sha256 for 3s on 256 size blocks: 1262067 sha256's in 2.99s
Doing sha256 for 3s on 1024 size blocks: 395563 sha256's in 3.00s
Doing sha256 for 3s on 8192 size blocks: 53564 sha256's in 3.00s
OpenSSL 0.9.8o 01 Jun 2010
built on: Wed Feb 23 00:47:27 UTC 2011
options:bn(64,64) md2(int) rc4(ptr,char) des(idx,cisc,16,int) aes(partial) blowfish(ptr2) 
compiler: cc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN
-DHAVE_DLFCN_H -m64 -DL_ENDIAN -DTERMIO -O3 -Wa,--noexecstack -g -Wall -DMD32_REG_T=int
-DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM
available timing options: TIMES TIMEB HZ=100 [sysconf value]
timing function used: times
The 'numbers' are in 1000s of bytes per second processed.
type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 bytes
sha256           25827.15k    60367.37k   108056.57k   135018.84k   146265.43k

yang berarti bahwa OpenSSL menyertakan implementasi SHA-256 yang dioptimalkan dengan tangan di Assembly, yang mencapai 146 MB/s saat memproses pesan 8 kB. Pada mesin yang sama, implementasi C murni harus mencapai setidaknya 130 MB/s.

Untuk contoh tentang bagaimana fungsi hash diimplementasikan di C dan Java, dan bagaimana kecepatan hashing dapat diukur dengan cara yang bermakna, lihat sphlib .

Setelah itu, Anda dapat mencoba enkripsi simetris, khususnya AES ( FIPS 197 ). Ini sedikit membantu untuk mengetahui bidang terbatas dari karakteristik 2, tetapi standarnya cukup jelas untuk memandu Anda melalui implementasi asal-asalan. Kemudian, cobalah untuk mengoptimalkan beberapa hal. OpenSSL dapat berfungsi sebagai titik perbandingan, dan mendapatkan inspirasi dari implementasi AES dari Brian Gladman . Adapun keamanan, ada beberapa kekhawatiran tentang informasi kunci-tergantung apa yang dapat dibocorkan melalui penggunaan tabel pencarian dalam implementasi (cobalah untuk mencari "serangan waktu cache AES"); mencoba mereproduksi serangan semacam itu adalah latihan yang sangat bagus (ingatlah, itu tidak mudah, tetapi jika Anda berhasil menunjukkannya dalam kondisi lab maka Anda akan belajar banyak tentang cara kerja implementasi kriptografi).

Kriptografi asimetris:

Kriptografi asimetris adalah tentang algoritma yang melibatkan lebih dari satu pihak. Ini termasuk enkripsi asimetris (RSA, ElGamal), pertukaran kunci (Diffie-Hellman) dan tanda tangan digital (RSA lagi, DSA ...). Isi matematika jauh lebih besar di sana, dan optimisasi adalah subjek yang jauh lebih luas daripada untuk kriptografi simetris, karena ada beberapa cara untuk mengimplementasikan setiap algoritma, alih-alih jalur implementasi "jelas" tunggal.

Referensi yang baik adalah Panduan untuk Kriptografi Kurva Elliptic . Meskipun ini terutama tentang kurva eliptik, itu termasuk perlakuan umum dari implementasi operasi di bidang terbatas, dan kebetulan ini adalah bab sampel yang dapat diunduh secara gratis di URL yang ditautkan ke atas. Jadi dapatkan dan baca sekarang. Referensi lain yang sangat diperlukan adalah Buku Pegangan Kriptografi Terapan , yang dapat diunduh secara bebas; Bab 14, khususnya, tentang implementasi yang efisien.

RSA cukup sederhana, dan dijelaskan dalam PKCS # 1 . Ada kemungkinan serangan wakt pada RSA, yang dilawan dengan masking (ya, ini adalah makalah "yang ditulis oleh seorang peneliti", tetapi dalam subjek kriptografi, peneliti adalah orang-orang yang memahami apa yang sedang terjadi di). Jika Anda memahami aritmatika modular, Anda dapat mencoba menerapkan DSA ( FIPS 186- ). Diffie-Hellman secara matematis sederhana (tidak perlu lebih dari yang dibutuhkan untuk mengimplementasikan DSA) tetapi standar yang menggambarkannya (ANSI X9.42) tidak dapat diunduh secara gratis.

Kurva elips adalah pengganti masa depan yang populer untuk aritmatika modular; Varian EC dari DSA dan Diffie-Hellman lebih cepat dan dipercaya lebih aman dengan kunci publik yang lebih pendek. Tapi itu lebih banyak matematika. Ada lagi, Panduan untuk Kriptografi Kurva Elliptic adalah referensi yang harus dimiliki.

Ada jenis lain dari algoritma kriptografi asimetris, mis. McEliece cryptosystem (enkripsi asimetris; ada varian untuk tanda tangan yang dijelaskan oleh Niederreiter ) dan algoritma berdasarkan pengurangan kisi . Tetapi mereka tidak (belum) mendapat manfaat dari standar yang diterbitkan yang menangani perincian implementasi, dan tidak ada begitu banyak implementasi yang dapat dibandingkan. Anda sebaiknya mulai dengan RSA dan DSA.

Kriptanalisis:

Kriptanalisis menggunakan dosis matematika yang jauh lebih tinggi daripada implementasi.

Untuk kriptografi simetris, dua alat utama adalah analisis diferensial dan linear; lihat tutorial ini .

Jalur saya sendiri untuk kriptografi dimulai dengan menerapkan DES, dan kemudian menerapkan kriptanalisis linier Matsui pada versi DES yang dikurangi (8 putaran, bukan 16). DES dijelaskan dalam FIPS 46- , yang secara resmi ditarik, tetapi masih tersedia. Dari DES dapat didefinisikan Triple-DES (tiga instance DES, dengan tiga tombol berbeda, yang tengah digunakan dalam arah "dekripsi") dan ada yang diterbitkan vektor uji untuk Triple-DES (juga dikenal sebagai "TDES", "3DES", atau kadang-kadang "DES", yang bisa dibilang membingungkan).

Untuk algoritma asimetris, cryptanalysis sebagian besar melibatkan bekerja pada struktur matematika kunci, mis. dengan mencoba faktor bilangan bulat non-prime besar untuk memecah varian RSA. Matematika di sini berkisar dari yang non-sepele hingga yang benar-benar tak terbayangkan, jadi ini mungkin kurva pembelajaran yang terlalu curam untuk memulai kriptografi dengan mencoba mendobrak RSA ...

46
Thomas Pornin

Dua hal, sungguh:

  1. Dapatkan buku yang bagus. "Kriptografi Terapan" Bruce Schneier sudah memadai.
  2. Pelajari alat 'openssl', dan pelajari cara menggunakannya.

Hal terpenting tentang crypto untuk dipelajari adalah kerendahan hati. Anda tidak ingin membuat solusi baru sebagai masalah - Anda ingin menyalin sebaik mungkin solusi yang telah teruji dengan baik oleh orang lain. Kebanyakan kegagalan crypto disebabkan oleh orang yang memiliki ide cemerlang, berpikir mereka dapat melakukan beberapa optimasi untuk memperbaiki solusi yang ada. Hanya orang yang sangat rendah hati yang akhirnya berhasil menemukan cara baru dalam melakukan sesuatu.

Pelajaran berikutnya adalah bahwa Anda telah menghapus prasangka Anda bahwa Anda telah mendapatkan dari TV dan film, di mana seorang hacker duduk di depan komputer dan memecahkan kripto. Entah ini tidak terkait dengan crypto, atau dramatisasi dari apa yang sebenarnya terjadi. Sebagai contoh, film "Sneaker" adalah dramatisasi dari apa yang akan terjadi jika seseorang mengembangkan chip yang dapat menjadi faktor bilangan bulat besar.

Hal tersulit dalam mempelajari kripto adalah untuk membedakan antara konsep teknis yang diperlukan untuk memahami bidang secara umum, dan yang hanya akan Anda perlukan ketika Anda berspesialisasi dalam bidang yang sempit. Ambil, misalnya, posting berperingkat tinggi di atas. Anda perlu memahami perbedaan antara algoritme "simetris" vs. algoritma "asimetris" vs. "hash", tetapi ketika penulis tulisan itu mengatakan, "Sedikit membantu untuk mengetahui bidang terbatas dari karakteristik 2", Saya tidak setuju: itu hanya berarti bagi PhD yang meneliti crypto, tidak untuk kita semua yang hanya ingin mengetahui bagaimana menggunakannya dengan benar.

Cara yang baik untuk mengarungi detail teknis adalah memilih target, dan bekerja mundur. Misalnya, hari ini, Apple memperbarui sistem operasi iPhone/iPad ke versi 4.3.5 untuk memperbaiki bug dalam validasi rantai sertifikat X.509. Memahami masalah dan mengapa mereka harus memperbaiki itu persis seperti apa yang Anda diskusikan di posting asli Anda. Cari tahu apa sertifikat X.509 itu, apa rantai itu, dan mengapa mereka perlu divalidasi, dan mengapa jika tidak, seorang peretas menggunakan alat seperti 'sslsniff' dapat mengalahkan enkripsi. Setelah Anda sepenuhnya memahami semua itu, Anda akan mencapai banyak tujuan Anda yang Anda jelaskan di posting asli Anda.

Contoh lain adalah posting blog tentang Memverifikasi kunci Hacker Comodo

Sekali lagi, cari tahu apa yang dilakukan peretas Comodo (membuat sertifikat bertanda tangan untuk Google dan Yahoo), cara pencabutan sertifikat bekerja, dan cara menggunakan alat untuk memvalidasi sertifikat itu. Saya menyarankan itu sebagai pos yang bagus karena ini merupakan titik awal yang baik untuk menggunakan alat 'openssl', yang merupakan standar dalam industri kami.

Semoga berhasil!

10

Daftarkan Stanford online kelas Kriptografi yang dimulai Januari mendatang. Gratis, online, termasuk teori (ceramah dan kuis video) dan latihan (tugas pemrograman), mari Anda bekerja dengan kecepatan Anda sendiri dan Anda akan mendapatkan pernyataan pencapaian jika Anda berhasil. Mengingat berbagai gema yang saya dapatkan di sesi kursus online Stanford sebelumnya, saya pasti mendaftar untuk kelas ini (dan juga Keamanan Komputer).

  • Di sisi teori:

Prinsip-prinsip Desain Teknik Kriptografi dan Aplikasi Praktis oleh Niels Ferguson dan Bruce Schneier. Buku ini dimaksudkan sebagai pembaruan dari Kriptografi Terapan yang dimuliakan, penulis terkenal di bidangnya dan ulasannya bagus.

  • Di sisi latihan:

Anda dapat melihat berbagai kompetisi peretasan/keamanan CTF (Capture The Flag). Mereka umumnya termasuk tantangan kriptografi. Mereka menyenangkan dan membawa Anda keluar dari zona nyaman Anda untuk menyelesaikan masalah dalam waktu yang terbatas. Inilah yang bagus Kalender KKP . Juga, lihat beberapa tulisan CTFs sebelumnya, saya mendapati banyak yang sangat mendidik dan menjelaskan.

10
kroosec

Untuk algoritma crypto:

Stinson's Kriptografi: Teori dan Praktik

melewati banyak algoritma crypto matematika dengan cara yang akan membuat mereka cukup mudah diimplementasikan, jika itu yang ingin Anda lakukan.

Scheiner's Applied Cryptography juga merupakan buku terkemuka tentang topik ini. Mungkin tumpang tindih sedikit tetapi dengan beberapa algoritma yang berbeda.

Sejauh buku secara eksplisit memberi tahu Anda bagaimana menerapkannya - saya tidak punya apa-apa. Secara komersial, ini tidak selalu diimplementasikan dalam perangkat lunak, dan ini adalah industri yang cukup ceruk. Dari perspektif bermain-main, saya akan mengatakan mendapatkan buku yang menjelaskan algoritma, mengimplementasikannya, dan membandingkan hasil Anda dengan perpustakaan yang umum digunakan untuk algoritma yang sama.

Demikian pula, saya tidak punya apa-apa tentang cryptanalysis, meskipun saya curiga jika Anda memilih algoritma dan google untuk hal-hal seperti "kelemahan" dan "kunci lemah" Anda akan menemukan beberapa makalah menarik dan informasi lainnya. Terakhir kali saya harus menulis makalah tentang hal seperti ini (10 tahun yang lalu) itulah yang saya lakukan ...

6
bethlakshmi

Saya merekomendasikan Teknik Kriptografi: Prinsip Desain dan Aplikasi Praktis . Ini adalah buku yang sempurna untuk Anda. Ini menjelaskan cara mendesain dan mengimplementasikan cryptosystems, dari perspektif perancang dan pelaksana sistem. Ini adalah buku yang sangat pragmatis, dengan perspektif yang berasal dari tahun pengalaman penulis. Kata "engineering" dalam judulnya benar-benar tepat. Saya pikir Anda akan menemukan itu sumber daya yang tak ternilai membantu Anda memprioritaskan apa yang harus Anda habiskan sebagian besar energi Anda khawatir, apa yang bisa salah, dan bagaimana memastikan hal-hal buruk itu tidak terjadi pada Anda.

4
D.W.

Saya juga ingin menambahkan Anda telah melihat Matasano crypto Tantangan karena Anda sudah memiliki beberapa keterampilan pemrograman.

Dari situs web mereka:

BAGAIMANA SANGAT JUGA SAYA HARUS TAHU? Tidak ada Itulah intinya.

SEHINGGA APA YANG SAYA HARUS TAHU? Anda ingin dapat membuat kode dengan mahir dalam bahasa apa pun. Kami telah menerima kiriman dalam C, C++, Python, Ruby, Perl, Visual Basic, Majelis X86, Haskell, dan LISP.

Semua tantangan mereka didasarkan pada kerentanan kripto dunia nyata, jadi Anda harus mempelajari hal-hal yang bagus untuk menyelesaikannya.

3
ack__

Jika Anda menginginkan pemahaman tentang teori kriptografi, yang ditulis dengan cara yang dapat diakses oleh praktisi, cobalah "Pengantar Kriptografi Modern" oleh Katz dan Lindell.

3
user432944

Mempelajari kriptografi dari awal terkadang terasa seperti hal yang sulit, tetapi jika Anda memiliki sumber daya yang tepat, Anda pasti akan menyukainya. Berikut ini adalah situs favorit saya untuk mulai mempelajari kriptografi hari ini.

  1. Pelajari kriptografi di Kifanga untuk pemula yang lengkap hingga tingkat yang lebih tinggi.
  2. Kriptografi Praktis benar-benar bagus untuk artikel kriptanalisis
  3. Learncryptography sangat bagus untuk fungsi hash
0
chris pete