4 Kriptologi

Berikut adalah beberapa akar kata Yunani:

kryptos, κρυπτó𝜍\kappa\rho\upsilon\pi\tau\acute{o}\varsigma

rahasia, tersembunyi

logos, λóγo𝜍\lambda\acute{o}\gamma o\varsigma

kata, kajian, tuturan

graph, γράφω\gamma\rho\acute{\alpha}\varphi\omega

menulis, tertulis

Dari akar-akar kata ini (dan beberapa akar lainnya), bahasa Inggris membentuk kata-kata yang kemudian diserap ke dalam bahasa Indonesia sebagai berikut.

kriptosistem

sekumpulan algoritme untuk melindungi rahasia

kriptografi

pekerjaan untuk membuat kriptosistem

kriptanalisis

pekerjaan untuk menembus perlindungan suatu

kriptosistem

kriptologi

gabungan kriptografi dan kriptanalisis,
yang sering disingkat menjadi kripto.

Perhatikan bahwa kata kriptografi sering (tetapi kurang tepat!) digunakan sebagai sinekdoke untuk kriptologi. Hal ini mirip dengan penyalahgunaan kata peretas (hacker) yang juga dipahami secara luas. Kita akan berusaha menggunakan istilah-istilah tersebut dengan lebih cermat.

 

Dengan pemahaman itu, kita memulai bab ini dengan sedikit kriptologi dasar. Teori bilangan hanya akan muncul sedikit, tetapi kita akan memperkenalkan sejumlah istilah serta contoh sederhana kriptografi dan kriptanalisis yang bersesuaian. Penekanannya ada pada sistem-sistem bersejarah yang sudah tidak layak digunakan pada zaman modern. Bab-bab selanjutnya akan segera beralih ke teknik kripto modern yang berlandaskan teori bilangan.

4.1 Sedikit Sejarah Spekulatif

Mungkin suatu bentuk tipu daya sudah ada sebelum bahasa. Banyak hewan peliharaan tentu pernah berpura-pura tidak bersalah meskipun bukti keterlibatannya dalam pencurian kudapan sangat jelas. Bahkan ahli apiologi mungkin tidak tahu apakah sejumlah lebah malas mengarang cerita tentang perjalanan jauh menuju hamparan bunga baru ketika sang ratu meminta pertanggungjawaban.

Namun, di antara Homo sapiens, kebohongan mungkin sudah muncul segera setelah bahasa muncul. Tentu saja, ketika dua orang bertatap muka, kedua pihak masih mempunyai kendali tertentu: pendengar dapat mencoba menilai apakah pembicara dapat dipercaya; keduanya dapat menilai sendiri identitas lawan bicaranya lalu memilih apa yang ingin dibagikan; dan kata-kata pembicara bergerak langsung dari bibirnya ke telinga pendengar tanpa dapat diubah maknanya di tengah jalan (jika kita mengabaikan kebisingan sekitar dan sebagainya).

Banyak hal berubah setelah tulisan ditemukan lebih dari 5.000 tahun yang lalu. Kata-kata yang dibekukan dalam bentuk fisik, beserta gagasan yang diwakilinya, dapat diambil dan dibagikan kepada berbagai pihak selain pihak yang semula hendak dihubungi penulis. Selain itu, jika penulis tidak dapat menyerahkan karyanya langsung kepada pembaca yang dituju dan tulisan tersebut harus beredar sendiri untuk sementara waktu, kedua pihak tidak lagi dapat memastikan bahwa lawan komunikasinya benar-benar memiliki identitas yang dinyatakan dalam tulisan, ataupun bahwa simbol-simbol tertulis itu tidak berubah sejak dituliskan oleh pihak lainnya.

Mari kita merumuskan beberapa persoalan keamanan informasi (sebutannya sekarang) dalam konteks sebuah pesan yang hendak dikirim oleh seseorang bernama Alice kepada seseorang bernama Bob. Dalam drama kecil kita, lingkungan yang mungkin mengganggu dan terlalu mencampuri urusan orang lain diperankan oleh Eve. Secara tradisi, kita langsung memilih tokoh dengan nama yang diawali huruf E untuk melambangkan environment (lingkungan) sekaligus seseorang yang mungkin menjadi eavesdropper (penyadap)1.

Berikut adalah beberapa istilah dasar.

Definisi 4.1.

Kerahasiaan berarti hanya penerima yang dituju yang dapat memperoleh isi pesan. Alice ingin hanya Bob yang menerima pesannya, bukan Eve, baik Eve menguping dari bawah cucuran atap maupun mencegat pesan ketika pesan tersebut bergerak dalam suatu bentuk dari Alice menuju Bob.

Definisi 4.2.

Integritas pesan berarti penerima dapat memastikan bahwa pesan tersebut tidak diubah. Bob ingin mengetahui bahwa yang diterimanya adalah apa yang ditulis Alice, bukan hasil perubahan yang dikehendaki Eve yang usil.

Definisi 4.3.

Autentikasi pengirim berarti penerima dapat menentukan identitas pengirim dari pesan tersebut. Bob ingin memastikan bahwa pesan itu benar-benar berasal dari Alice.

Definisi 4.4.

Nirpenyangkalan pengirim berarti pengirim tidak dapat menyangkal bahwa ia telah mengirim pesan tersebut. Bob ingin dapat menuntut Alice menepati janji yang dinyatakannya.

Perhatikan bahwa Alice dan Bob sebenarnya dapat merupakan orang yang sama, yang mengirim pesan dari dirinya pada masa lalu kepada dirinya pada masa depan. Misalnya, seseorang mungkin ingin menyimpan catatan yang harus tetap rahasia dan dapat diandalkan integritasnya, bahkan jika tempat penyimpanan catatan tersebut dibobol.

 

Salah satu skema paling awal yang berusaha mencapai kerahasiaan mungkin digunakan sekitar abad ke-7 SM di Yunani. Para panglima militer ingin menerima laporan dari prajurit yang berada jauh dan mengirimkan perintah kepada mereka sedemikian rupa sehingga, sekalipun pembawa pesan tertangkap, pesan yang dibawanya tidak dapat dibaca musuh. Mereka menggunakan alat bernama scytale (dalam pelafalan Inggris, huruf “c” dibaca keras dan katanya berima dengan “Italy”). Alat ini berupa tongkat silindris—mungkin batang tombak—(σκυτάλη\sigma\kappa\upsilon\tau\acute{\alpha}\lambda\eta berarti tongkat dalam bahasa Yunani Kuno), yang dililit secara spiral dengan selembar perkamen panjang.

Pesan kemudian dapat ditulis dalam baris-baris sejajar sepanjang scytale. Ketika lembaran itu dilepas, semua hurufnya menjadi teracak dan pesannya tidak dapat dibaca.

Skytale, alat kriptografi transposisi klasik
Sebuah scytale sedang digunakan.2

Di tempat tujuan, dengan asumsi penerima juga mempunyai scytale, pesan akan muncul kembali seolah-olah secara ajaib ketika lembaran itu dililitkan secara spiral dan dibaca memanjang.

 

Sebelum melanjutkan, kita memerlukan beberapa istilah teknis lagi.

Definisi 4.5.

Pesan yang hendak dikirim Alice kepada Bob dalam bentuk aslinya (dan bentuk akhir yang dipulihkan) disebut plainteks atau teks terang.

Definisi 4.6.

Algoritme yang digunakan Alice untuk mengubah (mengaburkan) plainteks menjadi bentuk yang tetap rahasia sekalipun diamati Eve selama pengiriman disebut cipher atau algoritme sandi. Kita juga mengatakan bahwa Alice mengenkripsi pesan (plainteks) tersebut.

Definisi 4.7.

Setelah dienkripsi, pesan tersebut disebut cipherteks atau teks sandi.

Definisi 4.8.

Ketika menerima cipherteks, Bob menerapkan algoritme lain untuk mendekripsinya dan memulihkan plainteks.

Secara grafis:

   Istilah dasar kripto:
Alice pada jaringan publik Bob
plainteks/teks terang
pesan mm
mengenkripsi mm menjadi cc
mengirim cc  \rightarrowtail\ \ \ cipherteks cc\ \ \ \rightarrowtail  menerima cc
mendekripsi cc untuk
memulihkan plainteks mm

 

Andaikan seorang mata-mata melihat para pengintai di lapangan melilitkan lembaran perkamen pada tombak dan menulis sepanjang tombak itu. Artinya, Eve mengetahui algoritme enkripsinya. Meskipun algoritmenya diketahui, kerahasiaan masih mungkin dipertahankan.

Definisi 4.9.

Informasi tambahan—sebagian digunakan dalam enkripsi dan sebagian diperlukan agar dekripsi berhasil—disebut kunci.

Dalam enkripsi menggunakan scytale, diameter scytale merupakan kuncinya. Bahkan, ada dugaan bahwa scytale juga berfungsi sebagai bentuk autentikasi sederhana: hanya Alice yang mempunyai scytale yang cocok dengan milik Bob. Jadi, jika Bob dapat membaca rangkaian huruf yang bermakna di sepanjang scytale miliknya, ia mengetahui bahwa Alice-lah yang mengirimkannya.

Bahkan dengan kunci, kelemahan kriptosistem ini cukup jelas. Dan Athena memang kalah dalam Perang Peloponnesos.

 

Pengalaman kriptologi selama berabad-abad menunjukkan bahwa algoritme suatu kriptosistem justru sebaiknya dibuka kepada publik, sedangkan hanya kunci bagi saluran komunikasi tertentu (misalnya antara Alice dan Bob) yang dirahasiakan. Ada banyak alasan untuk pendekatan ini. Alasan utamanya barangkali adalah bahwa pembuat kriptosistem tidak pernah dapat memastikan bahwa ia telah memikirkan semua metode kriptanalisis yang mungkin digunakan untuk menyerang sistemnya. Karena itu, lebih baik pembuat sistem membiarkan komunitas kripto seluas-luasnya menguji sistem tersebut, dan hanya sistem yang telah bertahan terhadap serangan semacam itu yang patut digunakan. Bagaimanapun, inilah dasar metode ilmiah: ilmuwan menerbitkan seluruh rincian eksperimennya agar orang lain dapat mencobanya, memberikan verifikasi independen, atau menemukan sesuatu yang perlu dikritik.

Gagasan bahwa keamanan kriptosistem harus bertumpu pada kerahasiaan kunci, bukan kerahasiaan algoritme, dikenal sebagai Prinsip Kerckhoffs . Nama itu merujuk pada gagasan perancangan kriptosistem yang ditulis Auguste Kerckhoffs pada tahun 1883 dalam karya dua bagiannya, La Cryptographie militaire. Prinsip ini berlawanan dengan kriptosistem yang dianggap sangat lemah karena bergantung pada harapan bahwa algoritmenya tidak akan pernah diketahui. Sistem semacam itu bertumpu pada paradigma keamanan melalui ketertutupan (security through obscurity) yang tidak bijaksana.

Latihan untuk §4.1

Latihan 4.1. Andaikan, untuk suatu kk\in{\mathbb N}, plainteks yang hendak dikirim Alice terdiri atas simbol-simbol m1,,mkm_1,\dots,m_k. Andaikan diameter scytale yang digunakannya memungkinkan ss\in{\mathbb N} huruf ditulis pada setiap putaran spiral perkamen ketika perkamen itu dililitkan pada scytale.

Tuliskan satu atau beberapa rumus yang mendeskripsikan huruf-huruf c1,,ckc_1,\dots,c_k dalam cipherteks. Anda harus mengandaikan s<ks<k dan, jika diinginkan, boleh mengandaikan hubungan tertentu yang berguna, seperti sks\mid k.

Latihan 4.2. Sekalipun kriptosistem scytale kuat, penggunaannya untuk autentikasi mungkin bermasalah. Jelaskan bagaimana autentikasi dapat gagal bergantung pada pesan yang dikirim; berikan satu atau dua contoh pesan yang “buruk” untuk autentikasi.

Latihan 4.3. Kriptosistem scytale tampak lemah. Jelaskan bagaimana Anda akan melakukan kriptanalisis terhadapnya.

4.2 Cipher Caesar dan Varian-Variannya

Sistem lain yang berasal dari zaman kuno konon digunakan oleh Julius Caesar.

Definisi 4.10.

Alice mengambil pesannya, menghapus semua spasi dan tanda baca, lalu menyamakan kapitalisasi seluruh hurufnya (misalnya menjadi huruf kapital). Kemudian ia menggeser setiap huruf sejauh kk posisi ke depan dalam alfabet, kembali dari Z ke A jika perlu. Di sini kk\in{\mathbb Z} adalah bilangan tetap yang hanya diketahui Alice dan Bob serta disebut kunci.

Untuk mendekripsi, Bob cukup menggeser setiap huruf sejauh kk posisi ke belakang dalam alfabet, kembali dari A ke Z jika perlu. Dengan kata lain, Bob mengenkripsi cipherteks menggunakan kunci k-k untuk memperoleh plainteks.

Sistem ini disebut kriptosistem Caesar.

Julius Caesar tampaknya biasa menggunakan nilai kunci k=3k=3. Octavian, cucu dari saudari Julius Caesar, kemudian menjadi Kaisar Augustus dan suka menggunakan k=1k=-1.

Jika kita menggunakan apa yang disebut alfabet Latin (meskipun alfabet ini bukan alfabet yang digunakan di Romawi kuno) dengan 26 huruf, ada satu nilai kunci yang sangat menarik: 13. Dengan nilai itu, enkripsi dan dekripsi merupakan transformasi yang persis sama. Pada zaman modern, transformasi ini disebut ROT13, dan pernah memainkan peran kecil dalam sejarah modern Internet. Misalnya, kiriman di ruang obrolan dan papan buletin awal kadang-kadang memuat bagian yang tidak boleh langsung terlihat oleh siapa saja yang membaca kiriman, tetapi tetap dapat dibuka oleh pembaca yang bersungguh-sungguh (seperti bocoran alur dalam ulasan gim, buku, atau film baru yang populer). Bagian semacam itu sering disertakan setelah terlebih dahulu diproses dengan ROT13.

Walaupun sebenarnya sama sekali tidak aman, ROT13 bahkan pernah digunakan untuk tujuan keamanan yang sesungguhnya dalam beberapa produk komersial, termasuk pada bagian tertentu dari beberapa versi sistem operasi Windows.

 

Cipher Caesar sudah berhasil dipecahkan sepenuhnya (dengan beberapa cara; lihat §4.3 di bawah) sebelum tahun 1000 M, tetapi salah satu turunannya dikembangkan pada akhir Abad Pertengahan dan dianggap sebagai teknologi kriptologi termaju hingga awal zaman modern.

Definisi 4.11.

Sekali lagi, Alice mengambil pesannya, menghapus semua spasi dan tanda baca, lalu menyamakan kapitalisasi seluruh hurufnya (misalnya menjadi huruf kapital). Kali ini, kunci k=(k1,,k)\vec{k}=(k_1,\dots,k_\ell) yang dimiliki bersama oleh Alice dan Bob merupakan tupel-\ell, untuk \ell\in{\mathbb N}, yang terdiri atas bilangan bulat k1,,kk_1,\dots,k_\ell\in{\mathbb Z}.

Untuk mengenkripsi, Alice menelusuri pesan plainteks dan barisan kuncinya bersama-sama, satu huruf demi satu huruf. Setiap huruf plainteks digeser ke depan (kembali dari Z ke A jika perlu) sebanyak bilangan yang ditentukan oleh komponen kunci yang bersesuaian. Jika komponen kuncinya habis, Alice kembali ke awal barisan kunci.

Untuk mendekripsi, Bob menggeser setiap huruf ke belakang sesuai komponen kunci yang bersesuaian, kembali dari A ke Z jika perlu. Dengan kata lain, Bob mengenkripsi menggunakan kunci k=(k1,,k)-\vec{k}=(-k_1,\dots,-k_\ell).

Sistem ini disebut kriptosistem Vigenère.

Secara tradisional, kunci Vigenère berupa sebuah kata yang dituliskan, dihafalkan, dan dimiliki bersama oleh Alice dan Bob. Ketika mengenkripsi atau mendekripsi, huruf-huruf kata kunci itu “ditambahkan” pada huruf-huruf pesan seperti dijelaskan di atas, dengan konvensi A=1A=1, B=2B=2, dan seterusnya.

Perhatikan bahwa Vigenère dengan panjang kunci \ell pada dasarnya merupakan \ell cipher Caesar yang berjalan paralel. Bahkan, jika =1\ell=1, keduanya merupakan kriptosistem yang persis sama. Karena itu, Vigenère pada dasarnya +1\ell+1 kali lebih sulit dipecahkan daripada Caesar; suku “+1{}+1” muncul karena Eve bahkan tidak mengetahui \ell. Meskipun demikian, setelah beberapa ratus tahun dianggap tidak dapat dipecahkan dan digunakan sebagai cipher diplomatik utama di istana-istana Eropa, metode untuk memecahkan Vigenère akhirnya dikembangkan.

 

Sebagai varian terakhir cipher Vigenère, andaikan kita bergerak ke arah yang berlawanan dari kasus ekstrem =1\ell=1 dan memilih \ell sepanjang mungkin.

Definisi 4.12.

Pad sekali pakai (one-time pad) adalah kriptosistem Vigenère yang kuncinya sama panjang dengan pesan, dipilih secara acak, dan tidak pernah digunakan kembali. [Kunci dalam kriptosistem ini juga disebut pad sekali pakai3.]

(Pad sekali pakai kadang-kadang disebut Cipher Vernam . Sebutan ini tidak tepat jika dilihat dari sejarah intelektual kriptosistem yang sebenarnya.)

Barisan kunci yang baik sangat penting dalam kriptosistem pad sekali pakai. Kabar baiknya, dapat dibuktikan bahwa jika pad sekali pakai benar-benar acak, kriptosistem yang dihasilkan memang aman secara sempurna. Dalam ilmu komputer, sifat ini disebut aman secara teori informasi , sebab bukti keamanannya tidak bergantung pada asumsi apa pun tentang sumber daya komputasi yang tersedia bagi penyerang. [Lihat (Shannon 1949) dan (Shannon 1948) untuk bukti tersebut.] Kriptosistem lain yang akan kita jumpai di bawah hanya aman jika kita mengandaikan bahwa penyerang mempunyai akses ke komputer jenis tertentu (asumsi yang lazim ialah sebuah mesin Turing waktu-polinomial probabilistik; bidang ilmu komputer yang membahas hal ini disebut kompleksitas komputasi; lihat, misalnya, (Arora dan Barak 2009)).

Pad yang sama juga tidak boleh digunakan lebih dari sekali. Jika digunakan kembali, penyerang dapat mengambil selisih kedua cipherteks huruf demi huruf, yang akan meniadakan pad sepenuhnya dari perhitungan. Setelah itu, pesan biasanya dapat ditentukan dengan cepat.

Pada zaman modern, setelah munculnya jaringan komunikasi digital, pesan ditulis sebagai data komputer. Dengan demikian, semuanya disimpan (dan dikirimkan) sebagai bit, yaitu 11 dan 00. Untuk bit, padanan penggeseran huruf dalam alfabet dengan kembali dari Z ke A bila perlu adalah: tidak melakukan apa pun jika besar pergeserannya genap, atau menukar 00 dan 11 jika pergeserannya ganjil.

Dengan kata lain, jika pesan dan kunci sama-sama dituliskan seluruhnya sebagai bit—anggap setiap bit sebagai salah satu dari elemen [0],[1]/2[0],[1]\in{\mathbb Z}/2{\mathbb Z}—enkripsi tepat berupa penjumlahan bit-bit yang bersesuaian modulo 22. Karena itu, pad sekali pakai yang baik merupakan untaian bit (kelas-kelas kongruensi dalam /2{\mathbb Z}/2{\mathbb Z}) yang sangat acak dan sangat panjang.

Masalah besar pad sekali pakai adalah distribusi kunci: Alice dan Bob harus sudah memiliki bersama pad sekali pakai yang sangat besar sebelum mulai berkomunikasi. Panjangnya harus sekurang-kurangnya sama dengan jumlah seluruh huruf (atau bit pada zaman komputer) dalam semua pesan yang akan mereka kirim pada masa depan.

Hal ini menyarankan pendekatan menarik terhadap kriptografi: carilah cara agar Alice dan Bob dapat berbagi sebuah rahasia kecil yang memungkinkan keduanya menghasilkan barisan bit sepanjang apa pun, memperoleh barisan yang sama, tetapi barisan itu tampak sepenuhnya acak bagi setiap penyerang. Jika hal ini mungkin, mereka dapat menggunakan barisan acak semu tersebut sebagai pad sekali pakai. Disebut acak semu karena barisan itu sebenarnya tidak acak—Alice dan Bob dapat menentukannya terlebih dahulu dari rahasia awal yang kecil—tetapi bagi semua penyerang barisan itu tampak acak. [Lihat (Luby 1996) untuk pembahasan lebih lanjut tentang keacakan semu.]

Latihan untuk §4.2

Latihan 4.4. ROT13 dianggap menarik karena mengurangi banyaknya kode yang perlu dibuat: program yang sama dapat melakukan dekripsi maupun enkripsi, sebab penerapan ROT13 untuk kedua kalinya membatalkan transformasi ROT13 yang pertama.

Apakah hal yang sama berlaku untuk cipher Caesar berkunci lainnya? Buatlah konjektur tentang apakah, untuk suatu kunci cipher Caesar kk\in{\mathbb Z} dan pesan mm, selalu terdapat nn\in{\mathbb N} sedemikian sehingga ekCekCn kali(m)=m\overbrace{e^C_k\circ\dots\circ e^C_k}^{\text{$n$ kali}}(m)=m di mana ekCe^C_k adalah fungsi enkripsi Caesar dengan kunci kk. Jika ya, carilah rumus untuk nn terkecil semacam itu, yang boleh bergantung (jika perlu) pada kk, mm, dan banyaknya huruf dalam alfabet yang digunakan untuk menulis mm.

Latihan 4.5. Lanjutkan latihan sebelumnya. Sekarang andaikan k=(k1,,k)\vec{k}=(k_1,\dots,k_\ell) merupakan tupel-\ell, untuk \ell\in{\mathbb N}, yang terdiri atas bilangan bulat k1,,kk_1,\dots,k_\ell\in{\mathbb Z}, dan ekVe^V_{\vec{k}} adalah fungsi enkripsi Vigenère dengan kunci k\vec{k}. Tentukan apakah, untuk setiap pesan mm, terdapat nn\in{\mathbb N} sedemikian sehingga ekVekVn kali(m)=m\overbrace{e^V_{\vec{k}}\circ\dots\circ e^V_{\vec{k}}}^{\text{$n$ kali}}(m)=m dan, jika ya, carilah rumus untuk nn terkecil semacam itu, yang boleh bergantung (jika perlu) pada k\vec{k}, mm, dan banyaknya huruf dalam alfabet yang digunakan untuk menulis mm.

Latihan 4.6. Andaikan Eve mempunyai kembaran bernama Vev. Keduanya mengamati cipherteks cc yang dikirim Alice kepada Bob dan berhasil mereka cegat. Mereka menduga bahwa pasangan kekasih konyol Alice dan Bob menggunakan pad sekali pakai untuk mengenkripsi komunikasi mereka. Eve dan Vev sama-sama melakukan banyak perhitungan dan mengira telah berhasil mendekripsi cc dengan benar. Sayangnya, Eve dan Vev masing-masing memperoleh nilai mem_e dan mvm_v yang berbeda (dan keduanya bermakna!), lalu menganggap nilainya sebagai plainteks yang hendak dikirim Alice kepada Bob.

Pad sekali pakai pep_e dan pvp_v apakah yang, menurut perhitungan (atau tebakan) mereka masing-masing, digunakan Alice?

Apakah hasil dekripsi usulan mem_e dan mvm_v dapat dipilih sembarang, atau adakah hubungan antara kedua hasil dekripsi usulan, pad usulan pep_e dan pvp_v, plainteks sebenarnya, serta pad sekali pakai yang benar-benar digunakan Alice?

Kerjakan satu contoh konkret. Jika pesan teks terang asli Alice mm adalah aardvark, mungkinkah Eve mengira pesannya me=m_e= iloveyou, sedangkan Vev mengira pesannya mv=m_v= ihateyou? Jika mungkin, berikan contoh cipherteks cc yang bersesuaian, pad sekali pakai Alice dan Bob pABp_{AB}, hasil dekripsi usulan mem_e dan mvm_v, serta pad sekali pakai usulan pep_e dan pvp_v.

4.3 Langkah Awal dalam Kriptanalisis: Analisis Frekuensi

Cipher Caesar tampak sangat lemah. Namun, ketika kita melihat suatu cipherteks, seperti

            wrehruqrwwrehwkdwlvwkhtxhvwlrq
            zkhwkhuwlvqreohulqwkhplqgwrvxiihu
            wkhvolqjvdqgduurzvrirxwudjhrxviruwxqh
            ruwrwdnhdupvdjdlqvwdvhdriwurxeohv
            dqgebrssrvlqjhqgwkhp

sulit untuk mengetahui harus mulai dari mana—teks itu nyaris sama sekali tidak tampak seperti bahasa Inggris.

Mungkin kita perlu mulai dari cipher Caesar itu sendiri, dengan mengandaikan (secara anakronistis) bahwa Caesar mengikuti Prinsip Kerckhoffs, atau (lebih sesuai dengan zamannya) bahwa para mata-mata telah mengetahui kriptosistemnya tetapi belum mengetahui kuncinya.

Kita segera menyadari bahwa hal yang tidak diketahui, yaitu kunci, begitu kecil dibandingkan dengan kesulitan yang ditimbulkannya. Bahkan, jika kita memilih kunci secara acak, hampir empat dari 100 percobaan akan menghasilkan dekripsi yang benar semata-mata karena keberuntungan. Perhitungan ini menggunakan “alfabet Latin” modern yang terdiri atas 26 huruf; pada zaman Caesar, alfabet Latin yang sebenarnya hanya memiliki 23 huruf, sehingga peluangnya bahkan lebih baik. Secara formal, kita membicarakan konsep berikut.

Definisi 4.13. Himpunan semua kunci yang sah untuk suatu kriptosistem disebut ruang kunci.

Contoh 4.14. Ruang kunci kriptosistem cipher Caesar adalah alfabetnya.

Contoh 4.15. Ruang kunci kriptosistem cipher Vigenère dengan panjang kunci \ell adalah semua barisan yang terdiri atas \ell huruf dalam alfabet. Karena itu, ruang tersebut memiliki NN^\ell elemen jika alfabetnya berukuran NN. Jika panjang kunci yang tepat tidak diketahui, tetapi diketahui tidak melebihi suatu batas LL\in{\mathbb N}, terdapat j=1LNj\sum_{j=1}^L N^j kemungkinan kunci.

Contoh 4.16. Setiap barisan huruf sepanjang MM merupakan kemungkinan kunci (pad) untuk enkripsi pad sekali pakai atas pesan sepanjang MM. Karena itu, terdapat NMN^M kemungkinan pad sekali pakai untuk pesan sepanjang MM pada alfabet berukuran NN.

Kita menghitung ukuran berbagai ruang kunci tersebut karena salah satu kelemahan cipher Caesar adalah ruang kuncinya yang begitu kecil. Strategi yang lebih baik daripada menebak secara acak ialah mencoba semua kunci yang mungkin dan melihat kunci mana yang menghasilkan dekripsi yang benar. Hanya ada 26 kunci (atau 23 pada zaman Julius)! Pendekatan ini disebut serangan brute force [atau pencarian menyeluruh]. Bahkan pada zaman Caesar, ruang kunci cipher Caesar sudah begitu kecil sehingga Eve dapat memeriksa semua kunci dan melihat kunci mana yang menghasilkan teks terang pesan Alice kepada Bob.

Cipher Vigenère sedikit lebih sulit. Sebagai contoh, jika panjang kunci diketahui sama dengan lima, hampir 12 juta kunci harus dicoba. Sebelum zaman komputer, pekerjaan ini sama sekali tidak mungkin ditangani. Bahkan pada abad ke-21, ketika komputer dapat menghasilkan semua kemungkinan dekripsi itu dalam waktu yang bagi manusia tampak seketika, masih ada masalah: manusia harus memeriksa 12 juta kemungkinan tersebut dan memilih dekripsi yang sah.

Mechanical Turk milik Amazon (lihat https://www.mturk.com/mturk/welcome) mungkin dapat menghimpun cukup banyak tenaga manusia untuk menyelesaikan satu dekripsi Vigenère dengan brute force. Namun, pendekatan yang lebih baik ialah menulis program komputer yang dapat membedakan teks tanpa makna dari pesan nyata yang mungkin dikirim Alice kepada Bob. Dengan begitu, serangan brute force dapat berhasil dalam beberapa saat.

Untuk membedakan teks tanpa makna dari pesan nyata, kita perlu mengetahui pesan-pesan nyata apa saja yang mungkin. Hal ini memotivasi definisi berikut.

Definisi 4.17. Himpunan pesan yang mungkin dalam suatu komunikasi terenkripsi disebut ruang pesan.

Tanpa suatu struktur pada ruang pesan, kriptanalisis dapat menjadi nyaris mustahil. Misalnya, jika Alice mengirimkan kode kombinasi sebuah brankas kepada Bob melalui surel dalam bentuk terenkripsi, ruang pesannya tidak terlalu besar tetapi tidak mempunyai ciri yang dapat dikenali. Serangan brute force tidak memiliki cara untuk menentukan hasil dekripsi mana yang merupakan kode kombinasi sebenarnya.

Namun, andaikan ruang pesan komunikasi Alice dan Bob berupa himpunan teks pendek (atau panjang, yang lebih baik) dalam bahasa Inggris. Teks bahasa Inggris mempunyai cukup banyak struktur; manusia penutur bahasa Inggris tentu dapat mengenali bahasa Inggris yang wajar. Pertanyaannya ialah apakah proses mendeteksi teks bahasa Inggris yang wajar dapat diotomatisasi.

Mari kita lihat kembali contoh enkripsi Caesar pada awal bagian ini. Kita sudah melihat bahwa hasilnya tidak tampak seperti bahasa Inggris—tetapi dalam hal apa? Salah satunya tentu karena teks itu tidak memuat kata bahasa Inggris. Orang yang mengetahui bahasa Inggris mengenal sebagian besar kosakatanya dan dapat melihat bahwa teks tersebut tidak memuat kata-kata itu, kecuali mungkin “up” dan “i” (beberapa kali).

Hal ini menyarankan sebuah pendekatan: ambil daftar semua kata bahasa Inggris beserta semua bentuk varian dan turunannya; tambahkan beberapa barisan acak pendek yang mungkin muncul di dalam bahasa Inggris baku (misalnya ketika Alice mengutip ucapan tanpa makna yang didengarnya atau menyalin grafiti pada sisi gerbong kereta bawah tanah); lalu bandingkan daftar itu dengan semua kemungkinan dekripsi cipherteks. Skema ini tidak terlalu praktis. Namun, jika ruang pesannya cukup kecil, pendekatan semacam ini masuk akal.

Jika kita kembali melihat pesan tersebut, pembaca bahasa Inggris juga segera merasa bahwa huruf atau kombinasi hurufnya tidak tepat. Misalnya, tampaknya tidak ada cukup banyak vokal. Pemeriksaan seberapa sering huruf muncul dalam sebuah teks dibandingkan dengan frekuensi yang diharapkan disebut analisis frekuensi. Penggunaannya dalam kriptanalisis tampaknya pertama kali dijelaskan oleh filsuf dan matematikawan Muslim al-Kindi 4 dalam karyanya pada abad ke-9, Manuskrip tentang Penguraian Pesan Kriptografis.

Berikut adalah tabel frekuensi huruf dalam sejumlah teks bahasa Inggris baku (beberapa drama Shakespeare):

Histogram frekuensi huruf dalam bahasa Inggris
Frekuensi huruf dalam beberapa drama Shakespeare

Perhatikan bahwa huruf ‘e’ merupakan huruf yang paling sering muncul, meskipun hanya dengan selisih kecil. Jadi, pendekatan kriptanalisis pertama menggunakan analisis frekuensi dapat dilakukan dengan memilih kunci dekripsi Caesar yang menggeser huruf paling sering dalam cipherteks menjadi ‘e’. Untuk cipherteks pada awal bagian ini, pendekatan tersebut menghasilkan dekripsi:

            ezmpzcyzeezmpesletdespbfpdetzy
            hspespcetdyzmwpctyespxtyoezdfqqpc
            espdwtyrdlyolcczhdzqzfeclrpzfdqzcefyp
            zcezelvplcxdlrltydeldplzqeczfmwpd
            lyomjzaazdtyrpyoespx

Hasilnya kurang baik. Rupanya, hanya memperhatikan huruf yang paling sering belum cukup: huruf paling sering dalam plainteks pesan ini bukan ‘e’.

Sebagai gantinya, mari kita lihat seluruh tabel frekuensi cipherteks ini.

Histogram frekuensi huruf pada contoh cipherteks
Frekuensi huruf dalam contoh cipherteks Caesar

Sayangnya, hasil ini tidak persis sama dengan distribusi frekuensi bahasa Inggris baku (berdasarkan Shakespeare), bahkan bukan sekadar versi distribusi Shakespeare yang digeser (dengan kembali dari 25 ke 0). Namun, mungkin salah satu pergeserannya cukup dekat dengan distribusi Shakespeare.

Hal ini menyarankan pendekatan kriptanalisis yang lebih halus: coba semua kemungkinan dekripsi (tidak terlalu berat untuk cipher Caesar karena ruang kuncinya kecil), lalu pilih hasil yang seluruh tabel frekuensi hurufnya paling dekat dengan tabel frekuensi bahasa Inggris baku. Jadi, kita tidak hanya melihat huruf yang paling sering, melainkan seluruh distribusi frekuensinya; dan kita tidak mencari kecocokan persis, melainkan kecocokan hampiran terbaik.

Pertanyaan berikutnya ialah cara terbaik untuk mengukur jarak antara dua distribusi. Salah satu pendekatan yang lazim ialah mengukur besaran berikut.

Definisi 4.18. Galat kuadrat total adalah jarak antara dua distribusi ff dan gg yang diberikan oleh d(f,g)=j=025(f(j)g(j))2d(f,g)=\sum_{j=0}^{25} \left(f(j)-g(j)\right)^2 di mana distribusi selalu didefinisikan pada huruf dalam bentuk ‘a’=0, ‘b’=1, dan seterusnya.

Meminimumkan jarak ini ekuivalen dengan metode kuadrat terkecil dalam statistika atau aljabar linear.

Dengan menerapkan strategi ini pada cipherteks dari awal bagian, kita memperoleh hasil berikut.

Grafik galat kuadrat menurut kunci dekripsi untuk cipherteks contoh; minimum pada kunci 23
Galat kuadrat untuk semua kunci dekripsi pada contoh cipherteks Caesar

Galat kuadrat minimum diperoleh dari kunci dekripsi 23 (yang bersesuaian dengan kunci enkripsi awal 3; secara anakronistis, enkripsi ini dilakukan oleh Julius sendiri). Teks terang yang bersesuaian adalah

            tobeornottobethatisthequestion
            whethertisnoblerinthemindtosuffer
            theslingsandarrowsofoutrageousfortune
            ortotakearmsagainstaseaoftroubles
            andbyopposingendthem

yang tampak cukup meyakinkan.

Menariknya, pendekatan untuk mendeteksi teks bermakna ini cukup tangguh, bahkan untuk teks sangat pendek yang distribusi frekuensinya mungkin cukup jauh dari standar bahasa Inggris. Sebagai contoh, untuk cipherteks

rkkrtbrkeffespkyvtifjjifruj

kita memperoleh

Grafik galat kuadrat menurut kunci dekripsi untuk contoh rkkrt; minimum pada kunci 9
Galat kuadrat untuk semua kunci dekripsi pada cipherteks Caesar rkkrtbrkeffespkyvtifjjifruj

yang menunjukkan bahwa kunci dekripsinya adalah 9 dan bersesuaian dengan kunci enkripsi 17. Jadi, teks terangnya pasti

attackatnoonbythecrossroads

yang tampak seperti sesuatu yang mungkin dikatakan Julius.

 

Cukup sampai di sini kriptanalisis cipher Caesar. Ketika beralih ke Vigenère, persoalan pertama adalah menentukan panjang kunci. Jika panjang kunci \ell diketahui, kita dapat membagi cipherteks menjadi \ell teks yang lebih pendek: teks pertama memuat karakter-karakter berselang \ell posisi mulai dari karakter pertama, teks kedua mulai dari karakter kedua, dan seterusnya, hingga teks yang dimulai dari karakter ke-\ell. Dengan menerapkan pemecah Caesar otomatis yang dijelaskan di atas, kita memperoleh \ell komponen kunci dan kemudian plainteksnya.

Untuk mempermudah, andaikan kita mengambil seluruh Hamlet dan mengenkripsinya dengan Vigenère menggunakan kata kunci hippopotomonstrosesquipedaliophobia, yang bersesuaian dengan kunci numerik k=(7,8,15,15,14,15,14,19,14,12,14,13,18,19,17,14,18,4,18,16,20,8,15,4,3,0,11,8,14,15,7,14,1,8,0)\begin{align*} k=(7,8,15,15,14,15,14,19,14,12,14,13,18,19,17,14,\\ 18,4,18,16,20,8,15,4,3,0,11,8,14,15,7,14,1,8,0) \end{align*} Sebagai contoh, bagian cipherteks yang bersesuaian dengan kutipan untuk memecahkan cipher Caesar di atas adalah

            hdxajnioomjvdtfvstrqitmfozlxjj
            kcmiosgpenjjbgxmcmtfzltmaudofpmwg
            odsntxuuhwjywmrjpnieosoqlfbpjoqyyljia
            cmbdaozawminabtdhrtyndlncugkflswh
            vjrwgdwddoeicznymcyl

Jika Eve berharap teks ini hanya dienkripsi dengan Caesar, sehingga panjang kunci Vigenère adalah =1\ell=1, ia akan memperoleh frekuensi huruf berikut.

Frekuensi huruf pada contoh Hamlet
Frekuensi huruf dalam enkripsi Vigenère atas Hamlet dengan kunci hippopotomonstrosesquipedaliophobia

Dibandingkan dengan Gambar 4.3, nilai-nilai ini menunjukkan variasi yang jauh lebih kecil. Bahkan, tidak ada nilai nol maupun nilai yang jauh lebih besar daripada semua nilai lainnya. Alasannya, secara hampiran distribusi ini merupakan campuran dari 35 pergeseran distribusi baku bahasa Inggris dalam Gambar 4.2, satu untuk setiap posisi kata kunci hippopotomonstrosesquipedaliophobia; jika pergeseran yang sama digabungkan, hasilnya adalah campuran berbobot dari 16 nilai pergeseran berbeda. Pencampuran ini menghaluskan seluruh bentuk khas distribusi yang berguna untuk mengenali pergeseran dekripsi yang benar.

Meskipun demikian, pemecah Caesar akan menghasilkan suatu nilai kunci untuk setiap kemungkinan nilai \ell yang dicoba Eve. Untuk setiap posisi kunci, selalu ada nilai pergeseran yang meminimumkan galat kuadrat. Jika tebakan panjang kunci \ell salah dan pengelompokan yang dihasilkan mencampurkan beberapa pergeseran berbeda, nilai minimum ini biasanya tidak terlalu kecil: distribusi frekuensi huruf pada posisi-posisi cipherteks yang kongruen dengan k(mod)k\pmod{\ell}, untuk kk\in{\mathbb N} dan kk\le\ell, biasanya lebih datar, sehingga jauh (menurut jarak galat kuadrat) dari distribusi bahasa Inggris baku.

Sebagai contoh, pada enkripsi Hamlet yang sedang kita kaji, andaikan Eve menebak =5\ell=5 dan mengambil semua huruf pada posisi yang kongruen dengan 1(mod5)1\pmod{5}. Pemecah Caesar akan menghasilkan grafik galat kuadrat berikut:

Grafik galat kuadrat menurut kunci dekripsi untuk cuplikan Hamlet; minimum pada kunci 23
Galat kuadrat untuk semua kunci dekripsi pada huruf di posisi yang kongruen dengan 1(mod5)1\pmod{5} dalam Hamlet yang dienkripsi menggunakan Vigenère dengan kunci hippopotomonstrosesquipedaliophobia

Nilai minimum jelas terdapat pada kunci dekripsi 23, tetapi tidak jauh lebih kecil daripada kemungkinan lain. Selain itu, semua galatnya sekitar sepuluh kali lebih besar daripada yang tampak pada grafik sebelumnya, seperti Gambar 4.4.

Jadi, berikut adalah pendekatan kriptanalisis Vigenère. Coba semua panjang kunci \ell hingga suatu batas LL. Batas ini ditentukan oleh waktu komputasi yang tersedia dan tidak boleh begitu besar sehingga pengambilan huruf-huruf berselang \ell posisi dari cipherteks menyisakan terlalu sedikit huruf untuk analisis frekuensi yang wajar. Untuk setiap \ell anak untaian yang terdiri atas huruf-huruf berselang \ell posisi dan masing-masing dimulai pada posisi 1,,1,\dots,\ell, terapkan pemecah Caesar. Hasilnya adalah kunci Vigenère optimal k=(k,1,,k,)\vec{k}_\ell=(k_{\ell,1},\dots,k_{\ell,\ell}) sepanjang \ell. Kemudian, untuk setiap =1,,L\ell=1,\dots,L dan kunci k\vec{k}_\ell yang bersesuaian, hitung jarak galat kuadrat dd_\ell antara cipherteks yang didekripsi menggunakan k\vec{k}_\ell dan distribusi huruf bahasa Inggris baku. Laporkan \ell dan k\vec{k}_\ell sebagai panjang kunci dan kunci Vigenère jika dd_\ell merupakan galat kuadrat terkecil yang diperoleh.

Latihan untuk §4.3

Latihan 4.7. Dapatkah Anda menemukan cipherteks Caesar yang memiliki dua hasil dekripsi yang keduanya tampak seperti bahasa Inggris yang wajar selama serangan brute force? Jika dapat, berikan contoh yang tepat beserta kunci dekripsinya.

Latihan 4.8. Apakah latihan sebelumnya (4.7) menjadi lebih sulit atau lebih mudah untuk cipher Vigenère? Berikan alasan dan contoh.

Latihan 4.9. Dalam merancang kriptosistem yang aman, enkripsi yang lebih banyak tampaknya lebih baik. Jadi, bagaimana jika kita mengenkripsi teks terang dengan satu kriptosistem, lalu mengenkripsi kembali cipherteks yang dihasilkan untuk membuat sebuah cipherteks super?

Sejauh ini kita mempunyai dua kriptosistem berkunci pendek: Caesar dan Vigenère. Kita juga mempunyai pad sekali pakai, tetapi sistem itu sudah aman secara sempurna dan mempunyai kunci besar, yaitu pad-pad tersebut, sehingga tidak akan kita pertimbangkan. Andaikan saya membuat kriptosistem baru yang menerapkan suatu kombinasi enkripsi Caesar dan Vigenère secara berurutan, semuanya dengan kunci berbeda. Apakah hasilnya merupakan kriptosistem yang jauh lebih aman? Mengapa atau mengapa tidak?

4.4 Kripto Kunci Publik: Kriptosistem RSA

Andaikan Alice dan Bob tidak pernah berkesempatan bertemu langsung, tetapi tetap ingin bertukar pesan yang dirahasiakan dari Eve. Apa yang dapat mereka lakukan?

Hal ini tampak mustahil dalam konteks kriptosistem yang telah kita bahas. Mari kita uraikan bagian penting yang membuatnya begitu sulit.

Definisi 4.19.

Sebuah cipher simetris (atau kriptosistem simetris) terdiri atas bagian-bagian berikut, yang semuanya diketahui oleh kedua pihak yang berkomunikasi dan juga oleh masyarakat umum:

  • ruang pesan {\mathcal M};

  • ruang kunci 𝒦{\mathcal K};

  • algoritme enkripsi yang menghasilkan cipherteks c=ek(m)c=e_k(m) untuk setiap pilihan k𝒦k\in{\mathcal K} dan mm\in{\mathcal M};

  • algoritme dekripsi yang, jika diberi cipherteks cc dan k𝒦k\in{\mathcal K}, menghasilkan pesan dk(c)d_k(c)\in{\mathcal M} serta memenuhi dk(ek(m))=mk𝒦,md_k(e_k(m))=m\ \forall k\in{\mathcal K},m\in{\mathcal M}.

Alice dan Bob dapat menggunakan cipher simetris semacam ini dengan menyepakati secara privat sebuah kunci k𝒦k\in{\mathcal K} yang akan dipakai untuk enkripsi dan dekripsi. Karena itu, kriptosistem simetris juga disebut kriptosistem kunci privat.

Secara grafis:

   Penyiapan dan notasi dasar kripto kunci privat:
komunikasi privat
Alice\longleftrightarrowpertukaran kunci bersama k𝒦k\in{\mathcal K}\longleftrightarrowBob
pada jaringan publik
 pesan mAm_A\in{\mathcal M} 
  hitung cA=ek(mA)c_A=e_k(m_A)  
kirim cAc_A  \rightarrowtail\ \ \ cipherteks cAc_A\ \ \ \rightarrowtail  terima cAc_A
hitung mA=dk(cA)m_A=d_k(c_A)
pesan mBm_B\in{\mathcal M}
  hitung cB=ek(mB)c_B=e_k(m_B)  
terima cBc_B  \leftarrowtail\ \ \ cipherteks cBc_B\ \ \ \leftarrowtail  kirim cBc_B
hitung mB=dk(cB)m_B=d_k(c_B)
dan seterusnya

  Demi keamanan kriptosistem di atas, ruang kunci 𝒦{\mathcal K} harus cukup besar, atau keseluruhan sistem harus disusun sedemikian rupa sehingga sulit menentukan apakah suatu kemungkinan dekripsi tertentu sah (atau keduanya). Jika tidak, Eve dapat melakukan serangan brute force dengan mencoba semua kemungkinan kunci k𝒦k\in{\mathcal K} dan melihat hasil dk(c)d_k(c) mana yang masuk akal sebagai dekripsi.

Bagaimanapun, karena memerlukan pertukaran kunci privat di awal, kriptosistem simetris tidak cocok untuk situasi yang diajukan pada awal bagian ini. Kita memerlukan jenis kriptosistem yang berbeda.

Definisi 4.20.

Sebuah cipher asimetris (atau kriptosistem asimetris) terdiri atas bagian-bagian berikut, yang semuanya diketahui oleh setiap pihak yang berkepentingan, baik yang sah maupun yang tidak:

  • ruang pesan {\mathcal M};

  • ruang kunci enkripsi 𝒦e{\mathcal K}_e;

  • ruang kunci dekripsi 𝒦d{\mathcal K}_d;

  • algoritme pembangkitan kunci 𝖦𝖾𝗇\mathsf{Gen} yang menghasilkan pasangan terkait (ke,kd)𝒦e×𝒦d(k_e,k_d)\in{\mathcal K}_e\times{\mathcal K}_d;

  • algoritme enkripsi yang menghasilkan cipherteks c=eke(m)c=e_{k_e}(m) untuk setiap pilihan ke𝒦ek_e\in{\mathcal K}_e dan mm\in{\mathcal M};

  • algoritme dekripsi yang, jika diberi cipherteks cc dan kd𝒦dk_d\in{\mathcal K}_d, menghasilkan pesan dkd(c)d_{k_d}(c)\in{\mathcal M} serta, untuk setiap pasangan (ke,kd)(k_e,k_d) yang dihasilkan 𝖦𝖾𝗇\mathsf{Gen}, memenuhi dkd(eke(m))=mmd_{k_d}(e_{k_e}(m))=m\ \forall m\in{\mathcal M}.

Untuk menggunakan kriptosistem semacam ini, Bob menjalankan 𝖦𝖾𝗇\mathsf{Gen} untuk memperoleh pasangan (ke,kd)(k_e,k_d). Ia merahasiakan kunci dekripsi kdk_d, tetapi menyediakan kunci enkripsi kek_e kepada publik (mungkin melalui situs webnya). Karena itu, kek_e disebut kunci publik milik Bob dan kdk_d disebut kunci privat milik Bob, sedangkan keseluruhan sistem disebut kriptosistem kunci publik.

Secara grafis:

   Penyiapan dan notasi dasar kripto kunci publik:
Alice pada jaringan publik Bob
jalankan 𝖦𝖾𝗇\mathsf{Gen} untuk memperoleh
(ke,kd)𝒦e×𝒦d(k_e,k_d)\in{\mathcal K}_e\times{\mathcal K}_d
unduh kek_e  \leftarrowtail\ \ \ kunci publik kek_e\ \ \ \leftarrowtail  terbitkan kek_e
pesan mm\in{\mathcal M}
  hitung c=eke(m)c=e_{k_e}(m)  
kirim cc  \rightarrowtail\ \ \ cipherteks cc\ \ \ \rightarrowtail  terima cc
hitung m=dkd(c)m=d_{k_d}(c)

  Seperti sebelumnya, keamanan kriptosistem ini terhadap serangan brute force bergantung pada ukuran 𝒦d{\mathcal K}_d. Selain itu, karena kunci dan algoritme enkripsi diketahui Eve, ruang pesan {\mathcal M} tidak boleh terlalu kecil. Jika {\mathcal M} kecil, Eve cukup menghitung semua enkripsi eke(m)e_{k_e}(m) untuk setiap mm\in{\mathcal M}, lalu membandingkannya dengan cipherteks cc yang berhasil dicegatnya.

Serangan terhadap ruang pesan ini dapat dicegah dengan memperbesar ruang tersebut secara artifisial. Biasanya, orang menambahkan data berikut.

Definisi 4.21. Salt kriptografis adalah data acak yang ditambahkan pada pesan yang hendak dikirim Alice kepada Bob sebelum dienkripsi, lalu dihapus secara otomatis di sisi Bob.

Setelah Alice menambahkan salt pada pesannya, Eve harus menelusuri seluruh ruang pesan beserta salt, yang dapat jauh lebih besar daripada {\mathcal M}.

Sebagai manfaat tambahan, salt membuat cipherteks hampir selalu berbeda pada setiap pengiriman rahasia, sekalipun plainteksnya sama, apabila dipilih secara independen dari ruang yang cukup besar. Eve tentu mengetahui bahwa Alice dan Bob sedang berkomunikasi, tetapi dengan hanya membandingkan kesamaan cipherteks, analisisnya tidak lagi dapat mengenali pengiriman ulang pesan yang sama secara andal. Tanpa salt, Eve yang cermat mungkin dapat menghubungkan cipherteks pesan dengan tindakan di dunia nyata, sehingga pada dasarnya mengetahui hasil dekripsinya tanpa memecahkan kriptosistem. Jika salt dipilih secara independen dari ruang yang cukup besar, korelasi yang hanya mengandalkan kesamaan cipherteks menjadi sangat tidak andal, sebab peluang penggunaan ulang salt yang sama menjadi sangat kecil.

Karena kunci enkripsi Bob kek_e tersedia bagi publik, seluruh keamanan kriptosistem ini runtuh jika Eve dapat memulihkan kunci privat kdk_d yang bersesuaian. Di sisi lain, Bob harus dapat membangkitkan pasangan (ke,kd)(k_e,k_d) secara layak pada tahap penyiapan. Asimetri antara komputasi maju yang mudah dan pemulihan rahasia yang sulit ini biasanya dibangun dari fungsi dengan sifat khusus berikut.

Definisi 4.22. Fungsi injektif f:ABf:A\to B yang dapat dihitung dalam waktu wajar pada komputer standar (klasik), tetapi inversnya tidak dapat dihitung secara layak, disebut fungsi satu arah [atau fungsi satu arah kriptografis].

 

Perkalian dua bilangan, bahkan dua bilangan yang sangat besar, dapat dilakukan komputer dengan cukup cepat. Menentukan apakah bilangan yang sangat besar itu prima atau komposit juga ternyata sangat cepat (lihat (Agrawal dkk. 2004) untuk hasil mengagumkan dalam sejarah panjang uji keprimaan ini).

Namun, belum ditemukan cara klasik yang layak untuk memfaktorkan semiprima RSA yang cukup besar, yaitu hasil kali dua prima besar berukuran sebanding.5 Pembatasan bentuk ini penting: bilangan genap atau bilangan dengan faktor kecil dapat difaktorkan dengan mudah, berapa pun besarnya. Sebagai contoh, salah satu semiprima RSA terbesar yang pernah difaktorkan pada saat naskah sumber ditulis adalah soal tantangan terkenal RSA-768, sebuah bilangan komposit 232 digit (768 bit). Bilangan itu akhirnya difaktorkan pada 2009 setelah jaringan berisi ratusan komputer bekerja bersama selama sekitar dua tahun, meskipun tidak secara eksklusif mengerjakan soal tersebut. Semiprima RSA sejenis yang lebih besar mudah dibuat, tetapi pada umumnya jauh lebih sulit difaktorkan.

Karena itu, fungsi yang mengalikan dua bilangan prima besar berukuran sebanding untuk menghasilkan semiprima yang sangat besar merupakan calon fungsi satu arah kriptografis yang baik.

Pada 1978, Ron Rivest, Adi Shamir, dan Leonard Adleman menjelaskan ((Rivest dkk. 1978)) kriptosistem kunci publik berikut yang didasarkan pada fungsi satu arah tersebut.

Definisi 4.23.

Bob memulai dengan memilih dua bilangan prima sangat besar yang berbeda, pp dan qq. Hasil kalinya n=pqn=pq disebut modulus RSA yang bersesuaian. Bob juga memilih bilangan ee yang memenuhi 1<e<ϕ(n)1<e<\phi(n) dan gcd(e,ϕ(n))=1\gcd(e,\phi(n))=1.

Bilangan ee biasanya memiliki sangat sedikit angka 1 ketika ditulis dalam basis dua, misalnya 33 atau 65537=10000000000000001265537=10000000000000001_2. Bilangan ini disebut eksponen RSA.

Kunci publik [enkripsi] RSA kek_e terdiri atas pasangan (n,e)(n,e); himpunan semua pasangan semacam itu adalah 𝒦e{\mathcal K}_e.

Kunci privat [dekripsi] RSA kdk_d terdiri atas pasangan (n,d)(n,d), dengan dd dipilih sebagai wakil positif terkecil dari

d=e1(modϕ(n)),d=e^{-1}\pmod{\phi(n)}, dan 𝒦d{\mathcal K}_d adalah himpunan semua pasangan semacam itu.

Algoritme pembangkitan kunci RSA 𝖦𝖾𝗇\mathsf{Gen} memilih p,q,ep,q,e seperti di atas, menghitung n=pqn=pq dan d=e1(modϕ(n))d=e^{-1}\pmod{\phi(n)}, lalu menghasilkan pasangan (ke,kd)=((n,e),(n,d))(k_e,k_d)=((n,e),(n,d)). Data faktor p,qp,q (atau ϕ(n)\phi(n)) digunakan pada tahap penyiapan dan tidak perlu menjadi bagian kunci dekripsi operasional.

Ruang pesan kriptosistem ini adalah ={m0m<n}{\mathcal M}=\left\{m\in{\mathbb Z}\mid 0\le m<n\right\}.

Enkripsi diberikan oleh c=e(n,e)(m)=me(modn).c=e_{(n,e)}(m)=m^e\pmod{n}\ .

Dekripsi diberikan oleh d(n,d)(c)=cd(modn).d_{(n,d)}(c)=c^d\pmod{n}\ .

Keseluruhan sistem di atas disebut kriptosistem RSA.

Secara grafis:

   Penyiapan dan notasi kriptosistem RSA:
Alice pada jaringan publik Bob
pilih prima besar berbeda pp dan qq
hitung modulus RSA n=pqn=pq
pilih eksponen RSA ee\in{\mathbb N}
dengan 1<e<ϕ(n)1<e<\phi(n)
dan gcd(e,ϕ(n))=1\gcd(e,\phi(n))=1
unduh kek_e  \leftarrowtail\ \ \ kunci publik kek_e\ \ \ \leftarrowtail  terbitkan ke=(n,e)k_e=(n,e)
hitung d=e1(modϕ(n))d=e^{-1}\pmod{\phi(n)}
pesan mm\in{\mathcal M}
hitung c=e(n,e)(m)c=e_{(n,e)}(m)
=me(modn){}=m^e\pmod{n}  
kirim cc  \rightarrowtail\ \ \ cipherteks cc\ \ \ \rightarrowtail  terima cc
hitung m=d(n,d)(c)m=d_{(n,d)}(c)
=cd(modn){}=c^d\pmod{n}

  Pertama-tama, kita perlu memastikan bahwa sistem ini memenuhi syarat dasar agar berfungsi sebagai kriptosistem.

Proposisi 4.24. Gunakan notasi dalam definisi kriptosistem RSA di atas. Untuk setiap pesan mm\in{\mathcal M}, berlaku d(n,d)(e(n,e)(m))=md_{(n,d)}(e_{(n,e)}(m))=m.

Bukti. Setiap mm\in{\mathcal M} mewakili suatu kelas dalam /n{\mathbb Z}/n{\mathbb Z}. Kita tidak akan membedakan kelas tersebut dari wakilnya mm yang memenuhi 0m<n0\le m<n.

Kita membentuk dd sebagai d=e1(modϕ(n))d=e^{-1}\pmod{\phi(n)}. Artinya, ed1(modϕ(n))e\cdot d\equiv1\pmod{\phi(n)}, sehingga terdapat kk\in{\mathbb Z} dengan ed=1+kϕ(n)e\cdot d=1+k\phi(n).

Kemudian, menurut Teorema Euler 3.14 , untuk setiap mm\in{\mathcal M} yang memenuhi gcd(m,n)=1\gcd(m,n)=1 , berlaku d(n,d)(e(n,e)(m))(me)d=med=m1+kϕ(n)m(mϕ(n))km(1)km(modn)d_{(n,d)}(e_{(n,e)}(m))\equiv(m^e)^d=m^{ed}=m^{1+k\phi(n)}\equiv m\cdot(m^{\phi(n)})^k\equiv m\cdot(1)^k\equiv m\pmod{n} seperti yang diinginkan. Kasus gcd(m,n)1\gcd(m,n)\neq1 menjadi Latihan 4.10 dalam bagian ini. ◻

Selain memastikan fungsi dasarnya, kita perlu menilai seberapa praktis RSA. Mari kita telusuri dengan cermat algoritme yang diperlukan pada setiap langkah.

Bob harus memilih prima besar pp dan qq. Seperti telah disebutkan, terdapat algoritme yang dapat menentukan keprimaan suatu bilangan dalam waktu wajar. Lebih tepatnya, komputer (klasik) dapat menentukan apakah bilangan kk prima dalam waktu yang dibatasi oleh suatu fungsi polinomial dari log(k)\log(k). [Inilah arti lazim komputasi layak dalam kriptologi.]

Selain itu, jumlah prima cukup banyak sehingga Eve tidak dapat melakukan pencarian brute force atas semua kemungkinan. Hal ini mengikuti Teorema Bilangan Prima, yang memberikan banyaknya prima secara asimtotik.

Teorema 4.25. Untuk xx\in{\mathbb R} dengan x>0x>0, definisikan fungsi penghitung prima sebagai π(x)=#{pp prima dan px}\pi(x)=\#\{p\in{\mathbb N}\mid p\text{ prima dan }p\le x\}. Maka limxπ(x)x/ln(x)=1.\lim_{x\to\infty} \frac{\pi(x)}{x/\ln(x)} = 1.

Teorema ini merupakan salah satu permata teori bilangan analitik. Teorema ini dibuktikan pada 1896 oleh Jacques Hadamard dan Charles Jean de la Vallée-Poussin, walaupun bagian-bagian pentingnya telah diketahui sebelumnya oleh tokoh seperti Euler, Legendre, dan Riemann. Buktinya sulit, bahkan bukti elementer yang diberikan Atle Selberg dan Paul Erdös pada 1948.

Salah satu akibat Teorema Bilangan Prima ialah bahwa peluang sebuah bilangan kk yang dipilih secara acak adalah prima kira-kira 1/ln(k)1/{\ln(k)}. Sebagai contoh, untuk mencari prima 200 digit, kita memilih bilangan acak berukuran itu dan perlu menguji sekitar ln(10200)=461\ln(10^{200})=461 bilangan sebelum memperoleh suatu prima. Jumlah komputasi ini masih wajar.

Setelah memiliki modulus RSA n=pqn=pq, kita dapat menghitung fungsi totient Euler ϕ(n)=(p1)(q1)\phi(n)=(p-1)(q-1) hampir seketika dengan Teorema 2.33.

Menentukan eksponen RSA ee yang relatif prima terhadap ϕ(n)\phi(n) tidak sulit karena terdapat banyak pilihan. Bahkan, dalam arti yang tepat, peluang bahwa dua bilangan yang dipilih secara acak saling relatif prima adalah 6π2\frac{6}{\pi^2} (untuk pernyataan tepat beserta buktinya, lihat (Hardy dan Wright 1979)). Pengujian calon ee juga efisien sebab, seperti akan kita lihat dalam Latihan 4.12, waktu Algoritma Euklides dibatasi oleh fungsi polinomial dari logaritma bilangan-bilangan yang terlibat. Jadi, komputasinya layak.

Selanjutnya, d=e1(modϕ(n))d=e^{-1}\pmod{\phi(n)} dapat dihitung sangat cepat dengan Algoritma Euklides diperluas (Teorema 1.38). Algoritme ini tentu lebih lambat daripada Algoritma Euklides dasar, tetapi tetap layak.

Enkripsi dan dekripsi RSA sama-sama berupa pemangkatan suatu bilangan modulo nn. Untungnya, terdapat algoritme bernama eksponensiasi modular cepat yang juga menyelesaikannya dalam waktu yang dibatasi oleh fungsi polinomial dari logaritma bilangan-bilangan yang diberikan.

Persoalan praktis terakhir ialah cara Alice benar-benar menggunakan RSA untuk mengirim pesan yang diinginkannya, bukan sekadar bilangan mm\in{\mathbb Z} yang memenuhi 0m<n0\le m<n.

Ini merupakan persoalan baku dalam kriptografi matematis dan mempunyai solusi baku. Biasanya, Alice harus mengambil pesannya karakter demi karakter lalu menyalinnya menjadi barisan bilangan menurut suatu standar yang diterima. Sejak dekade 1960-an, hal ini dilakukan menggunakan kode ASCII [American Standard Code for Information Interchange, Kode Standar Amerika untuk Pertukaran Informasi] . ASCII memberikan bilangan biner 7 bit untuk 26 huruf alfabet Latin (modern), baik huruf besar maupun kecil, serta untuk sekumpulan simbol yang lazim dan beberapa tambahan modern yang biasanya tidak dicetak, seperti 11110211110_2 Pemisah Rekaman, 1112111_2 Bel, dan 101121011_2 Tab Vertikal. Kini, kode-kode ASCII selalu disimpan dalam satu byte (8 bit) dengan menambahkan bit 00 di depan.

Ketika World Wide Web menjadi fenomena global, kebutuhan akan lebih banyak alfabet dan bahkan sistem tulisan nonalfabetis (seperti aksara Tionghoa) terus meningkat. Hal ini menghasilkan sistem bernama Unicode yang, pada versi 6.3 tahun 2013, memuat lebih dari 110.000 karakter. Unicode disimpan dengan berbagai pengodean. Dua yang paling umum adalah UTF-8, yang menggunakan satu hingga empat byte per karakter, dan UTF-16, yang menggunakan dua atau empat byte per karakter.

Jadi, Alice biasanya menuliskan pesannya dalam ASCII atau Unicode, menyambungkan semua byte secara berurutan, lalu memotong seluruh pesan menjadi blok-blok sepanjang bb bit. Di sini bb\in{\mathbb N} dipilih sebagai nilai terbesar yang memenuhi 2b<n2^b<n. Dengan demikian, setiap blok bb bit dapat dipandang sebagai bilangan bulat mm\in{\mathbb Z} yang memenuhi 0m<n0\le m<n, sehingga RSA dapat diterapkan pada pesan tersebut satu blok demi satu blok.

(Kita mengabaikan banyak perincian, misalnya cara menyisakan ruang untuk salt, pendekatan lain, dan persoalan struktur blok. Lihat referensi baku tentang kriptografi, seperti (Ferguson dan Schneier 2003) atau (Menezes dkk. 1996).)

Latihan untuk §4.4

Latihan 4.10. Dalam soal ini, Anda akan menyelesaikan bukti Proposisi 4.24, yang menyatakan bahwa dekripsi RSA berfungsi dengan benar dalam semua kasus.

Sebagai langkah pertama, nyatakan secara formal dan buktikan sebuah lema: untuk prima berbeda pp dan qq, dua bilangan bulat rr dan ss kongruen modulo pqpq jika dan hanya jika keduanya kongruen modulo pp dan modulo qq. [Petunjuk: Teorema Sisa Cina.]

Sekarang, gunakan hasil di atas untuk membuktikan kasus yang belum dibuktikan dalam Proposisi 4.24. Diberikan prima berbeda pp dan qq, tetapkan n=pqn=pq. Misalkan ee\in{\mathbb N} memenuhi gcd(e,ϕ(n))=1\gcd(e,\phi(n))=1 dan dd\in{\mathbb N} merupakan invers ee modulo ϕ(n)\phi(n). Buktikan bahwa untuk setiap mm\in{\mathbb Z} yang memenuhi 0m<n0\le m<n dan gcd(m,n)1\gcd(m,n)\neq1, berlaku medm(modn)m^{ed}\equiv m\pmod{n}.

Latihan 4.11. Berapa banyak komputasi yang diperlukan untuk menghitung ak(modn)a^k\pmod{n} bagi aa\in{\mathbb Z} dan k,nk,n\in{\mathbb N} dengan n2n\ge2?

Misalkan DD adalah panjang maksimum masukan aa, kk, dan nn, diukur dalam digit. Perkalian dua bilangan merupakan instruksi dasar pada sebagian besar komputer modern dan dapat dianggap memerlukan satu satuan waktu. (Atau, Anda dapat melakukan sejumlah manipulasi lebih kecil yang banyaknya dibatasi oleh fungsi polinomial dari panjang operan; pilihan ini tidak memengaruhi bagian selanjutnya dari soal.) Demikian pula, pembagian bersisa merupakan satu instruksi mesin (misalnya pada prosesor keluarga Pentium) atau dapat dilakukan dengan cara sekolah dasar dalam waktu polinomial terhadap panjang masukannya.

Anggaplah pekerjaan untuk melakukan satu perkalian lalu mereduksi modulo nn dibatasi oleh fungsi polinomial p(D)p(D).

Jika kita sekadar membentuk kk faktor aa, melakukan k1k-1 perkalian, dan mereduksi modulo nn pada setiap langkah, waktunya berorde O(kp(D))O(kp(D)). Karena bilangan kk yang terdiri atas DD digit dapat berorde 10D10^D, batas waktu ini bersifat eksponensial terhadap panjang masukan DD.

Cobalah menemukan algoritme eksponensiasi yang jauh lebih cepat, dengan waktu polinomial alih-alih eksponensial.

[Petunjuk: (1) Buat tabel kuadrat berulang dari aa modulo nn, yaitu a2a^2, a4a^4, a8a^8, dan seterusnya. (2) Tuliskan kk dalam basis dua dan uraikan aka^k menggunakan bentuk biner kk, aturan pemangkatan biasa, dan tabel tersebut. Hasil akhirnya harus mendeskripsikan cara menghitung ak(modn)a^k\pmod{n}; periksa dengan cermat berapa banyak waktu yang diperlukan.]

Latihan 4.12. Untuk kk\in{\mathbb N}, lakukan permainan berikut:

  1. gunakan Algoritma Pembagian untuk membagi kk dengan dua dan memperoleh hasil bagi qq serta sisa rr;

  2. ganti kqk\leftarrow q;

  3. jika k>0k>0, ulangi dari langkah (1); jika tidak, berhenti.

Berikan batas banyaknya langkah sampai permainan ini berhenti. Nyatakan jawaban sebagai fungsi dari kk, fungsi dari banyaknya bit yang diperlukan untuk menuliskan kk dalam basis dua, atau fungsi dari banyaknya digit yang diperlukan untuk menuliskan kk dalam basis 10.

Tunjukkan bahwa setiap dua langkah Algoritma Euklides membuat suku-suku sisa rir_i berkurang sekurang-kurangnya dengan faktor 1/21/2. Dengan kata lain, jika kita menggunakan notasi Teorema 1.38, maka rj+2<12rjr_{j+2}<\frac12r_j untuk setiap jj\in{\mathbb Z} yang memenuhi j0j\ge0.

Jelaskan mengapa hal ini berarti Algoritma Euklides memerlukan paling banyak 2log2(b)+12\lfloor\log_2(b)\rfloor+1 langkah pembagian untuk menghitung gcd(a,b)\gcd(a,b) . Turunkan pula batas linear sebesar paling banyak tujuh kali banyaknya digit desimal bb, dengan memeriksa kasus ujung kecil secara terpisah. [Petunjuk: berapakah log2(10)\log_2(10)?]

Jelaskan mengapa hasil ini berarti Algoritma Euklides merupakan komputasi yang layak secara kriptologis, dalam pengertian bagian ini.

4.5 Tanda Tangan Digital

Kriptosistem kunci publik memungkinkan beberapa penggunaan yang tidak tersedia pada kriptosistem simetris. Salah satu penggunaan yang makin penting dalam ekonomi digital modern ialah pembuatan tanda tangan digital: bagian dari dokumen elektronik yang diharapkan memiliki salah satu sifat tanda tangan fisik, yakni sulit dipalsukan oleh penyamar. Dokumen bertanda tangan semacam itu mungkin diperlukan, misalnya, jika Bob dari bagian sebelumnya (yang memasang kunci publik RSA-nya di situs web) hendak mengirim kontrak yang mengikat secara hukum melalui surel. Barangkali Alice dan Bob ingin mengirim kepada calon pemilik rumah mereka, Larry, perjanjian sewa bertanda tangan untuk apartemen yang akan mereka tinggali bersama. Ketika menerima surel dari Bob yang berbunyi “Saya setuju terikat oleh ketentuan perjanjian sewa ini,” Larry perlu yakin bahwa surel tersebut benar-benar berasal dari Bob; tanda tangan digital dapat memberikan keyakinan itu.

Untuk skema dasar berikut, kita memerlukan sifat tambahan. Setiap pesan yang hendak ditandatangani harus berada dalam domain operasi privat dkdd_{k_d}; untuk setiap pasangan (ke,kd)(k_e,k_d) yang dihasilkan 𝖦𝖾𝗇\mathsf{Gen} dan setiap mm\in{\mathcal M}, harus berlaku eke(dkd(m))=me_{k_e}(d_{k_d}(m))=m, seperti pada RSA. Definisi umum kriptosistem asimetris sebelumnya hanya mensyaratkan urutan sebaliknya.

Bob lalu dapat melakukan hal berikut. Ia mengambil salinan perjanjian sewa, menambahkan bagian di akhir yang menyatakan persetujuannya atas ketentuan tersebut dan memuat informasi pengenal pribadi (mungkin pindaian surat izin mengemudinya). Sebut seluruh bongkah data ini mm. Bob kemudian menerapkan algoritme dekripsi dengan kunci privat (dekripsi) kdk_d, sehingga diperoleh s=dkd(m)s=d_{k_d}(m). Nilai ss ini disebut tanda tangan Bob atas pesan mm. Ia lalu mengirimkan mm dan ss kepada Larry melalui surel.

Ketika menerima pesan bertanda tangan ini, Larry mula-mula memisahkan tanda tangan ss, lalu menghitung enkripsinya, eke(s)e_{k_e}(s), menggunakan kunci publik yang ia unduh dari situs web Bob. Berdasarkan sifat tambahan di atas, hasilnya harus sama dengan mm. Verifikasi eke(s)=me_{k_e}(s)=m itu sendiri hanya menetapkan konsistensi aljabar pasangan (m,s)(m,s) terhadap kunci publik tersebut. Untuk menyimpulkan bahwa Bob menghasilkan tanda tangan dan bahwa pesan tidak berubah sejak ditandatangani, Larry juga harus mengandalkan skema tanda tangan yang tak dapat dipalsukan, kunci privat Bob yang tidak terkompromi, serta pengikatan tepercaya antara identitas Bob dan kunci publik tersebut. Bahkan dengan asumsi-asumsi itu, verifikasi tidak dengan sendirinya membuktikan identitas pengirim surel ataupun kebaruan pesan, sebab pasangan bertanda tangan yang lama dapat diteruskan atau diputar ulang oleh siapa pun.

Secara grafis:

  Salah satu masalah skema ini ialah ukuran pesan secara efektif menjadi dua kali lipat. Tanda tangan yang lebih kecil dan efisien dapat dibuat dengan mendekripsi bukan seluruh mm, melainkan nilai suatu fungsi h(m)h(m). Fungsi hh harus menerima pesan berukuran sebarang dan menghasilkan ringkasan data yang kecil, tetapi tetap bergantung pada setiap bagian masukan mm. Bagaimanapun, jika h(m)h(m) hanya bergantung pada 100 bit pertama mm, misalnya, Eve yang berniat jahat dapat mengubah pesan selama pengiriman tanpa terdeteksi selama ia tidak mengubah 100 bit pertama pesan tersebut.

Kriptolog mempunyai nama untuk fungsi seperti hh ini.

Definisi 4.26. Fungsi hh yang menerima string bit berpanjang sebarang dan menghasilkan string bit berpanjang tetap disebut fungsi hash kriptografis jika memenuhi

kemudahan komputasi

nilai h(m)h(m) dapat dihitung secara layak untuk setiap mm;

ketahanan praimaji

jika masukan tantangan MM dipilih secara acak menurut distribusi yang ditetapkan dan hanya nilai target t=h(M)t=h(M) yang diberikan, mencari mm sedemikian sehingga h(m)=th(m)=t tidak layak dilakukan;

ketahanan praimaji kedua

jika diberikan masukan tertentu m1m_1, mencari masukan lain m2m_2 sedemikian sehingga h(m2)=h(m1)h(m_2)=h(m_1) tidak layak dilakukan;

ketahanan tumbukan

mencari dua pesan berbeda m1m2m_1\ne m_2 sedemikian sehingga h(m2)=h(m1)h(m_2)=h(m_1) tidak layak dilakukan .

Kata layak dan tidak layak di sini bermakna sama seperti pada bagian sebelumnya: komputasi tersebut dapat atau tidak dapat diselesaikan dalam waktu yang dibatasi oleh suatu fungsi polinomial dari ukuran masukan.

Perhatikan bahwa karena fungsi hash menerima masukan berpanjang sebarang tetapi mempunyai ukuran keluaran tetap, pasti terdapat tak hingga banyak tumbukan.

Pembuatan fungsi hash kriptografis sedikit menyerupai seni gelap. Ternyata, jika suatu calon fungsi hash dibangun dengan struktur yang jelas (biasanya struktur matematis), terutama bila fungsi itu cepat dihitung, komunitas kriptologi biasanya menemukan cara untuk menembus salah satu syarat ketahanannya. Karena itu, algoritme yang digunakan secara luas cenderung berupa komputasi yang sangat ad hoc, tampak rumit, dan sejauh ini bertahan terhadap upaya membalikkan fungsi atau mematahkan sifat ketahanannya.

Contoh 4.27. Selama kira-kira satu dasawarsa sejak awal 1990-an, fungsi hash kriptografis yang paling luas digunakan bernama md5. Algoritme ini dikembangkan oleh Ron Rivest dan diterbitkan pada 1992. Ukuran keluaran md5 adalah 128 bit.

Walaupun md5 telah dicurigai memiliki kelemahan sejak pertengahan 1990-an, serangan nyata baru diterbitkan pada 2004, ketika ditunjukkan bahwa fungsi ini tidak tahan tumbukan(Wang dan Yu 2005). Pada saat naskah sumber ini ditulis, md5 masih digunakan secara luas untuk memeriksa apakah transfer data berukuran besar mengalami galat transmisi; dengan kata lain, fungsi ini tetap berguna untuk menguji kerusakan data yang tidak disengaja. (Dalam konteks pembuktian integritas data terhadap kerusakan yang tidak disengaja ini, fungsi hash sering disebut sidik jari.)

Contoh 4.28. Sejak akhir 1990-an hingga tidak lama sebelum naskah sumber ini ditulis, fungsi hash kriptografis yang paling luas digunakan dan ditanamkan dalam banyak protokol kriptografis yang diterima luas serta distandardisasi adalah SHA-1, dengan ukuran keluaran 160 bit.

SHA-1 dikembangkan oleh Badan Keamanan Nasional Amerika Serikat (NSA) melalui proses yang sebagian terbuka, lalu diadopsi oleh Institut Standar dan Teknologi Nasional Amerika Serikat (NIST) sebagai bagian dari beberapa Standar Pemrosesan Informasi Federal Amerika Serikat .

Pada 2004, diterbitkan sejumlah penelitian yang menunjukkan bahwa SHA-1 mungkin rentan terhadap jenis serangan tertentu. (Lihat (Poritz dan Swimmer 2004).) Karena itu, pada 2010 NIST mewajibkan banyak aplikasi perlindungan data federal Amerika Serikat beralih ke fungsi hash lain.

Contoh 4.29. Pada saat naskah sumber ini ditulis, sebagian besar pengguna dan organisasi yang memerhatikan keamanan merekomendasikan SHA-2, biasanya dalam varian “SHA-256” yang memiliki ukuran keluaran 256 bit. Mengingat pengungkapan ketika itu mengenai keterlibatan NSA dalam protokol kriptografis dan pelemahan protokol tersebut, partisipasi NSA dalam pengembangan SHA-2 mungkin menimbulkan kekhawatiran.

Untuk menerapkan operasi RSA pada keluaran bit h(m)h(m), terlebih dahulu gunakan enkode tanda tangan yang disepakati untuk memperoleh wakil pesan Hn(m)={0,,n1}H_n(m)\in{\mathcal M}=\{0,\dots,n-1\}. Skema RSA standar menggunakan enkode dan padding khusus sebelum menerapkan operasi privat; diagram berikut hanya menunjukkan alur matematis skematis dan bukan konstruksi yang siap dipakai.

Secara grafis:

Dengan pemahaman ini, kita dapat mendeskripsikan tanda tangan digital secara lebih formal.

Definisi 4.30. Misalkan Bob menyiapkan kriptosistem RSA seperti dalam Definisi 4.23, lalu memilih satu fungsi hash kriptografis hh dan enkode wakil pesan HnH_n untuk digunakan seterusnya. Ia menerbitkan deskripsi keduanya di halaman web bersama kunci enkripsi publik kek_e.

Jika Bob hendak menandatangani pesan mm, sebelum mengirimkannya kepada pihak ketiga, misalnya Charlie, ia menambahkan tanda tangan digital RSA

s=dkd(Hn(m))=(Hn(m))d(modn)s=d_{k_d}(H_n(m))=(H_n(m))^d\pmod n pada mm.

Ketika menerima pesan bertanda tangan (m,s)(m,s) yang mengaku berasal dari Bob, Charlie membuka situs web Bob dan mengunduh kunci publik kek_e beserta deskripsi hh dan HnH_n. Charlie kemudian menghitung eke(s)=se(modn)e_{k_e}(s)=s^e\pmod n dan membandingkannya dengan Hn(m)H_n(m). Jika keduanya sama, ia menerima tanda tangan tersebut; jika tidak, ia menolaknya.

Dalam konteks ini, kunci privat/dekripsi Bob kdk_d disebut kunci penandatanganan, sedangkan kunci publik/enkripsi kek_e disebut kunci verifikasi.

Latihan untuk §4.5

Latihan 4.13. Gunakan Prinsip Sarang Merpati (Teorema 1.2 ) untuk membuktikan bahwa fungsi hash kriptografis selalu mempunyai tak hingga banyak tumbukan [meskipun tumbukan tersebut belum tentu dapat ditemukan secara layak].

Latihan 4.14. Berikan contoh fungsi hash hh dengan keluaran berukuran satu bit dan masukan tertentu m1m_1 yang tidak mempunyai praimaji kedua; yakni, tidak ada m2m1m_2\ne m_1 sedemikian sehingga h(m2)=h(m1)h(m_2)=h(m_1).

4.6 Serangan Man-in-the-Middle, Sertifikat, dan Kepercayaan

Kripto kunci publik dapat tampak sebagai manfaat tanpa cela bagi dunia berjejaring. Namun, pemeriksaan cermat atas dua bagian sebelumnya menunjukkan kesenjangan berbahaya antara gambaran sederhana mengenai sifat alat kriptografis itu dan kenyataannya. Perbedaan yang mula-mula luput dari perhatian ialah antara Bob sebagai orang dan bit-bit yang tiba melalui jaringan ke Alice atau Larry sambil mengaku berasal dari Bob. Perbedaan ini tidak banyak berpengaruh jika Eve hanya menjadi pengamat pasif komunikasi antara Alice dan Bob (dan kadang-kadang Larry), seperti yang selama ini umumnya kita asumsikan. Namun, jika Eve menguasai jaringan lebih jauh dan dapat mengganti semua komunikasi dengan versinya sendiri, serangan baru menjadi mungkin.

Misalkan Alice ingin mengirim pesan rahasia kepada Bob tanpa pernah bertemu dengannya untuk bertukar kunci kriptosistem simetris. Ia berharap Bob mempunyai kunci publik, lalu mengakses web dan mengunduh halaman utama Bob.

Pada titik inilah Eve bertindak. Ia mencegat respons Bob (tepatnya, server web Bob) terhadap permintaan tersebut. Eve menyimpan salinan kunci publik Bob keBk_e^B, tetapi mengganti kunci itu dalam data halaman web dengan kunci enkripsi RSA milik Eve, keEk_e^E; hanya Eve yang mengetahui kunci dekripsi pasangannya, kdEk_d^E. Ia kemudian meneruskan halaman yang telah diubah kepada Alice.

Alice menyusun teks terang mm dan mengirim cipherteks yang bersesuaian, cA=ekeE(m)c_A=e_{k_e^E}(m), kepada Bob—setidaknya demikian menurutnya. Eve justru mencegat cipherteks itu, mendekripsinya, lalu menyimpan m=dkdE(cA)=dkdE(ekeE(m))m=d_{k_d^E}(c_A)=d_{k_d^E}(e_{k_e^E}(m)). Agar Alice dan Bob mengira semuanya berjalan normal (dan terus bercakap-cakap sambil membocorkan informasi), Eve meneruskan cE=ekeB(m)c_E=e_{k_e^B}(m) kepada Bob.

Dari sudut pandang Bob, ia menerima surel yang tampak berasal dari Alice dan yang, setelah didekripsi dengan kunci privatnya, sepenuhnya masuk akal. Bahkan, jika ia berinteraksi dengan Alice di luar jaringan, Alice bertindak seolah-olah memang mengirim pesan itu. Alice memang mengirimnya, tetapi bukan dalam bentuk terenkripsi yang diterima Bob. Eve telah sepenuhnya melanggar kerahasiaan komunikasi Alice dan Bob. Ia juga dapat merusak integritas pesan kapan pun ia mau sambil tetap membuatnya tampak sah berasal dari Alice.

Skenario di atas disebut serangan man-in-the-middle (istilah konvensional ini memang tidak netral gender).

Berikut gambaran grafis serangan tersebut:

   Serangan man-in-the-middle:
Alice Eve Bob
bangkitkan kunci:
publik keBk^B_e, privat kdBk^B_d
cegat    keBk^B_e\leftarrowtail terbitkan keBk^B_e
bangkitkan kunci:
publik keEk^E_e, privat kdEk^E_d
unduh keEk^E_e keE\leftarrowtail k^E_e,  palsukan sumber 
pesan mm\in{\mathcal M}
hitung cA=ekeE(m)c_A=e_{k_e^E}(m)
kirim cAc_A cA\rightarrowtail c_A, cegat 
ambil teks terang
m=dkdE(cA)m=d_{k_d^E}(c_A)
ubah menjadi mm^\prime  jika diinginkan
hitung cE=ekeB(m)c_E=e_{k_e^B}(m^\prime)
palsukan sumber  cEc_E\rightarrowtail terima cEc_E
baca pesan
m=dkdB(cE)m^\prime=d_{k_d^B}(c_E)

 

Jadi, kriptosistem simetris ternyata mempunyai satu keuntungan bawaan. Ketika para pihak bertemu pada saat ideal untuk bertukar kunci simetris, mereka semestinya dapat memastikan identitas lawan bicara. Jika tidak, mereka tentu tidak akan bertukar kunci sebelum memeriksa cukup banyak dokumen identitas yang terlihat resmi. Kriptosistem asimetris harus mengatasi kesulitan mendasar: membangun hubungan tepercaya antara identitas orang nyata dan kunci publik di Internet yang mengaku berasal dari orang tersebut.

Teknik dari bagian sebelumnya, §4.5, setidaknya dapat membantu memindahkan kepercayaan. Misalkan Alice ingin berkomunikasi secara rahasia dengan Bob, tetapi tidak tahu apakah kunci publik yang tampak berada di halaman web Bob dapat dipercaya. Jika kunci tersebut disertai tanda tangan digital yang diterbitkan oleh pihak ketiga tepercaya [TTP] dan Alice telah memperoleh kunci publik TTP sebagai jangkar kepercayaan melalui kanal yang diautentikasi secara independen—atau dapat memvalidasi jalur sertifikasi hingga jangkar semacam itu—ia dapat memverifikasi pengikatan kunci tersebut dengan identitas Bob, setidaknya sejauh yang telah diperiksa dan dinyatakan oleh TTP.

Berikut definisi formalnya.

Definisi 4.31. Individu atau organisasi yang ingin menggunakan kriptografi asimetris dapat meminta pihak ketiga tepercaya yang disebut otoritas sertifikat [ CA] menerbitkan sertifikat digital bagi kunci publiknya. Sertifikat merupakan pernyataan terstruktur yang mengikat identitas subjek dengan kunci publiknya (beserta metadata yang diperlukan), lalu ditandatangani menggunakan kunci penandatanganan CA. Kunci verifikasi CA diasumsikan tersebar luas di Internet atau dipasang dalam perangkat lunak sistem operasi maupun perangkat keras komputer. Penyebaran luas saja tidak membuat kunci tersebut tepercaya. Kunci verifikasi CA hanya dapat menjadi dasar kepercayaan jika diperoleh sebagai jangkar kepercayaan yang diautentikasi secara independen, atau jika dapat divalidasi melalui jalur sertifikasi yang berujung pada jangkar semacam itu. Siapa pun yang hendak memakai suatu kunci publik dapat terlebih dahulu memeriksa keabsahan sertifikat terkait dan menilai pengikatan identitas–kunci itu berdasarkan kebijakan serta pemeriksaan CA.

Keseluruhan ekosistem sertifikat, CA, jangkar kepercayaan, mekanisme distribusi dan validasi, dan seterusnya, disebut infrastruktur kunci publik atau PKI.

Dalam praktik yang dibahas naskah sumber, CA sering kali hanya dapat menyertifikasi bahwa suatu kunci publik dikuasai oleh orang yang mempunyai akses ke alamat surel tertentu, kata sandi pengelola situs tertentu, atau token lain yang sepenuhnya berbasis Internet. Pemeriksaan itu biasanya mudah. Mengaitkannya dengan identitas nyata di luar jaringan mungkin memerlukan pemeriksaan dokumen identitas resmi dan jarang dilakukan. Naskah sumber juga mengusulkan kemungkinan peran pemerintah sebagai CA serta dokumen identitas ber-RFID yang dapat mengirimkan sertifikat bagi kunci publik pemiliknya (paspor Amerika Serikat yang lebih baru ketika itu telah memakai RFID).

Ada pendekatan lain untuk menentukan apakah suatu kunci publik dapat dipercaya, yang disukai orang-orang yang tidak memercayai otoritas terpusat tetapi bersedia memercayai orang tertentu yang mereka kenal langsung. Dalam pendekatan ini, orang-orang yang saling mengenal dan telah memverifikasi identitas serta kunci satu sama lain dapat menandatangani pengikatan identitas–kunci tersebut, menambahkan tanda tangan digital pada kumpulan yang sudah ada. Ketika hendak memakai kunci publik seseorang, Anda dapat menelusuri rantai tanda tangan digital, masing-masing mengesahkan pengikatan berikutnya, hingga mencapai orang yang Anda kenal langsung dan yang kuncinya telah Anda verifikasi.

Tanda tangan yang valid hanya menunjukkan bahwa suatu kunci menyertifikasi pengikatan identitas–kunci berikutnya; validitas itu sendiri belum membuat penyertifikasi tersebut layak dipercaya sebagai pengenal. Pengguna tetap harus menetapkan kebijakan kepercayaan lokal, termasuk seberapa jauh ia memercayai ketelitian setiap penyertifikasi dalam mengesahkan orang lain ( ownertrust), lalu menerima suatu pengikatan hanya jika sertifikasi yang ada memenuhi kebijakan tersebut.

Pendekatan ini dikenal sebagai jejaring kepercayaan (web of trust) . Pendekatan tersebut didukung kuat oleh GnuPG dan perangkat lain yang kompatibel dengan OpenPGP; lihat gnupg.org.

Agar berguna, jejaring kepercayaan memerlukan sertifikasi yang telah diverifikasi dan memenuhi kebijakan kepercayaan lokal serta penilaian ownertrust; sekadar menambah sebanyak mungkin tanda tangan tanpa verifikasi tidak memperkuat kepercayaan. Salah satu cara membangun sertifikasi tersebut ialah mengadakan pertemuan penandatanganan kunci. Pada pertemuan semacam itu, setiap penanda tangan harus memeriksa identitas pemilik kunci dan membandingkan sidik jari kunci lengkap secara langsung. Pernyataan pihak lain saja tidak cukup. Gunakan algoritme sidik jari yang diwajibkan format kunci yang berlaku, bukan md5, karena md5 tidak lagi aman terhadap tumbukan.


  1. Kata Inggris eavesdropper konon berasal dari kata Inggris Kuno yfesdrype, yang secara harfiah berarti seseorang yang berdiri di eavesdrop [tanah tempat air menetes dari cucuran atap] untuk mendengarkan percakapan di dalam rumah.↩︎

  2. Gambar oleh DMGualtieri, CC BY-SA 3.0 http://creativecommons.org/licenses/by-sa/3.0, melalui Wikimedia Commons, diunduh dari https://commons.wikimedia.org/wiki/File%3AScytale.png↩︎

  3. Sinekdoke lagi!↩︎

  4. Al-Kindi adalah tokoh yang sangat menarik dalam sejarah intelektual Muslim awal. Sebagai contoh, tampaknya ia memperkenalkan bilangan Hindu beserta notasi nilai tempatnya ke dunia Muslim.↩︎

  5. Pernyataan ini berlaku untuk komputer klasik. Terdapat algoritme pemfaktoran yang efisien pada komputer kuantum ; lihat (Shor 1994) dan (Nielsen dan Chuang 2010).↩︎