BAB 2 TINJAUAN PUSTAKA
2.1. Kriptografi Kriptografi adalah ilmu mengenai teknik enkripsi, di mana naskah asli diacak menggunakan suatu kunci enkripsi menjadi sesuatu yang sulit dibaca oleh seseorang yang tidak memiliki kunci dekripsi. Dekripsi menggunakan kunci dekripsi mendapatkan kembali naskah asli (Kromodimoeljo, 2010). Proses enkripsi dilakukan menggunakan suatu algoritma dengan beberapa parameter. Biasanya algoritma tidak dirahasiakan, bahkan enkripsi yang mengandalkan kerahasiaan algoritma dianggap sesuatu yang tidak baik. Rahasia terletak di beberapa parameter yang digunakan. Jadi, kunci ditentukan oleh parameter. Parameter penentu kunci dekripsi inilah yang harus dirahasiakan. Dalam kriptografi klasik, teknik enkripsi yang digunakan adalah enkripsi simetris, di mana kunci dekripsi sama dengan kunci enkripsi. Untuk teknik enkripsi asimetris atau biasa disebut public key cryptography, kunci dekripsi tidak sama dengan kunci enkripsi. Enkripsi, dekripsi, dan pembuatan kunci dalam kriptografi asimetris memerlukan komputasi yang lebih intensif dibandingkan dengan enkripsi simetris, karena enkripsi asimetris menggunakan bilangan-bilangan yang sangat besar. Namun, walaupun enkripsi asimetris lebih "mahal" dibandingkan enkripsi simetris, public key cryptography sangat bermanfaat untuk key management dan digital signature. Secara garis besar, proses enkripsi adalah proses pengacakan "naskah asli" (plain-text) menjadi "naskah acak" (cipher-text) yang "sulit untuk dibaca" oleh seseorang yang tidak memiliki kunci dekripsi. Yang dimaksud dengan "sulit untuk dibaca" di sini adalah, probabilitas mendapat kembali naskah asli oleh seseorang yang tidak memiliki kunci dekripsi dalam waktu yang tidak terlalu lama adalah sangat kecil. Jadi, suatu proses enkripsi yang baik menghasilkan naskah acak yang memerlukan waktu yang lama (contohnya satu juta tahun) untuk didekripsi oleh seseorang yang tidak memiliki kunci dekripsi. Satu cara untuk mendapatkan kembali naskah asli tentunya dengan menerka kunci dekripsi. Jadi, proses menerka kunci dekripsi harus menjadi
Universitas Sumatera Utara
7
sesuatu yang sulit. Tentunya naskah acak harus dapat didekripsi oleh seseorang yang memiliki kunci dekripsi untuk mendapatkan kembali naskah asli. Walaupun awalnya kriptografi digunakan untuk merahasiakan naskah teks, kini kriptografi digunakan untuk data apa saja yang berbentuk digital (Kromodimoeljo, 2010). 2.1.1. Konsep acak (random) Sifat acak dalam kriptografi adalah sifat bebas dari kecenderungan sehingga tidak mudah untuk diterka. Dari segi matematika jika suatu variabel dianggap bersifat acak, maka teori probabilitas dapat digunakan untuk memrediksi "kelakuan" dari variabel tersebut, antara lain variabel akan memenuhi beberapa kriteria statistik. Metode statistika dapat digunakan berdasarkan apa yang sudah terjadi untuk menilai apakah variabel memenuhi kriteria statistik untuk variabel acak. Akan tetapi, jika kriteria statistik terpenuhi, belum tentu variabel benar acak, karena sesuatu yang deterministik seperti pseudo-random number generator dapat memenuhi kriteria statistik untuk variabel acak. Jadi, kriteria statistik bukan merupakan definisi untuk variabel acak. Sifat acak memang tidak dapat didefinisikan secara matematis, sebab sesuatu yang memiliki definisi matematis sudah pasti tidak bersifat acak. Apalagi jika definisi berupa rumus yang dapat digunakan untuk kalkulasi. Yang didefinisikan bukan saja mudah diterka, tetapi tidak perlu diterka. Sifat acak dapat dikaitkan dengan urutan events, dimana event berikutnya dalam suatu urutan tidak mudah untuk diterka berdasarkan apa yang sudah berlalu. Sifat ini diperlukan dalam pembuatan kunci (key generation), agar kunci dekripsi tidak mudah untuk diterka. Sifat acak juga dikaitkan dengan tidak adanya korelasi (atau korelasi yang mendekati nol). Dalam kriptografi, tidak diinginkan adanya korelasi antara naskah asli dengan naskah acak atau kunci dengan naskah acak. Ini untuk mempersulit analisa seperti analisa frekuensi (frequency analysis) atau analisa yang lebih canggih, seperti linear cryptanalysis atau differential cryptanalysis. Meskipun tidak sebenarnya acak, sesuatu yang pseudo-random bermanfaat dan digunakan dalam kriptografi, tetapi harus dikombinasikan dengan sesuatu yang benar acak. Sebagai contoh, pseudo-random number generator dikombinasikan dengan sumber entropi yang benar acak sebagai seed, untuk mendapatkan sesuatu yang praktis bersifat random number generator (Kromodimoeljo, 2010).
Universitas Sumatera Utara
8
2.1.2. Manajemen kunci Aspek manajemen kunci sangat penting dalam aplikasi kriptografi. Proses pembuatan kunci sangat penting dan sebaiknya dilakukan dengan acak. Sumber acak dapat diambil dari berbagai kejadian (events) yang muncul secara acak. Sistem operasi seperti unix menggunakan kombinasi system events termasuk interrupts sebagai sumber entropi yang kemudian dikombinasikan dengan algoritma pseudo-random number generator menjadi random number generator. Aplikasi kriptografi dapat menggunakan random number generator yang disediakan sistem operasi untuk pembuatan kunci, akan tetapi sebaiknya ini dilakukan hanya jika random number generator cukup acak. Distribusi kunci secara aman juga penting untuk keperluan pengamanan komunikasi. Sebagai contoh, untuk komunikasi yang diamankan dengan enkripsi simetris, tentunya kedua mitra dalam komunikasi harus menggunakan kunci yang sama. Kunci ini dapat dibuat oleh satu pihak dan dikirim secara aman ke mitra komunikasi. Pengiriman kunci dapat dilakukan out-of-band, yaitu menggunakan jalur khusus di luar jalur normal komunikasi, atau dilakukan in-band melalui jalur normal menggunakan sarana kriptografi kunci publik. Alternatif dari pengiriman kunci adalah key agreement, di mana kedua mitra berpartisipasi membuat kunci tanpa dapat diketahui oleh pihak ketiga. Key agreement juga menggunakan kriptografi kunci publik. Penyimpanan kunci jelas sangat penting untuk pengamanan sistem enkripsi secara menyeluruh. Kunci yang disimpan secara sembrono akan mudah untuk "dicuri" oleh pihak yang tidak diinginkan. Solusi untuk penyimpanan kunci beraneka ragam. Mulai dari penggunaan hardware khusus, di mana kunci dekripsi disimpan dan tidak dapat keluar dari hardware tersebut, sampai dengan penyimpanan dalam file yang dienkripsi menggunakan password atau passphrase (Kromodimoeljo, 2010). 2.2. Matematika Dasar dalam Kriptografi Aritmatika modular sangat berperan dalam kriptografi karena banyak digunakan dalam algoritma enkripsi, baik untuk kriptografi simetris maupun kriptografi kunci publik. Dalam aritmatika modular, konsep GCD (Greatest Common Divisors) digunakan antara lain untuk operasi invers yang dapat dikalkulasi secara efisien menggunakan algoritma Euclidean, algoritma sangat penting yang telah berusia lebih dari 2000 tahun. Sebelum mempelajari kriptografi lebih mendalam, akan dibahas terlebih dahulu studi tentang teori bilangan.
Universitas Sumatera Utara
9
2.2.1. Keterbagian dan GCD (Greatest Common Divisors) Sebagian besar kriptografi modern dibangun atas dasar-dasar aljabar dan teori bilangan. Pada tingkat yang paling dasar, teori bilangan adalah studi tentang bilangan asli 1, 2, 3, 4, 5, …, atau lebih tepatnya, studi tentang bilangan bulat … , −2, −1, 0, 1, 2, …. Himpunan bilangan bulat dilambangkan dengan simbol ℤ. Jika 𝑎 dan 𝑏 adalah bilangan bulat, maka kedua bilangan bulat tersebut dapat ditambahkan 𝑎 + 𝑏, dikurangi 𝑎 − 𝑏, dikalikan 𝑎 ∙ 𝑏, dan memenuhi semua aturan umum aritmatika (hukum komutatif, asosiatif, distributif, dan lain-lain). Tetapi, suatu bilangan bulat tidak selalu bisa dibagi dengan bilangan bulat yang lain. Sebagai contoh, 3 tidak bisa dibagi dengan 3
2, karena tidak ada bilangan bulat . Hal inilah yang menjadi konsep dasar keterbagian. 2
Definisi 2.1. Misalkan 𝑎 dan 𝑏 adalah bilangan bulat, dengan 𝑏 ≠ 0. Maka dapat dikatakan 𝑏 membagi 𝑎, atau 𝑎 habis dibagi dengan 𝑏, jika ada bilangan bulat 𝑐 sedemikian rupa sehingga 𝑎 = 𝑏𝑐. Untuk menunjukkan bahwa 𝑎 habis dibagi dengan 𝑏, dapat dilambangkan dengan 𝑏 | 𝑎. Jika 𝑏 tidak dapat membagi 𝑎, maka dapat dilambangkan dengan 𝑎 ∤ 𝑏 (Hoffstein, et al. 2008). Contohnya 847 | 485.331, karena 485.331 = 847 ∙ 573. Contoh lainnya, 355 ∤ 259943, karena ketika mencoba untuk membagi 259943 dengan 355, didapatkan sisa 83. Lebih tepatnya 259943 = 355 ∙ 732 + 83. Jadi, 259943 bukan kelipatan 355. Semua bilangan bulat habis dibagi dengan 1. Bilangan bulat yang habis dibagi 2 adalah bilangan bulat genap, dan bilangan bulat yang tidak habis dibagi 2 adalah bilangan bulat ganjil. Dan berikut adalah sifat-sifat dari keterbagian. Misalkan 𝑎, 𝑏, 𝑐 ∈ ℤ, maka: a) Jika 𝑎 | 𝑏 dan 𝑏 | 𝑐, maka 𝑎 | 𝑐. b) Jika 𝑎 | 𝑏 dan 𝑏 | 𝑎, maka 𝑎 = ±𝑏. c) Jika 𝑎 | 𝑏 dan 𝑎 | 𝑐, maka 𝑎 | (𝑏 + 𝑐) dan 𝑎 | (𝑏 − 𝑐) (Hoffstein, et al. 2008). Definisi 2.2. Faktor persekutuan terbesar dari 𝑎 dan 𝑏 adalah bilangan bulat positif 𝑑 terbesar, sehingga 𝑑 | 𝑎 dan 𝑑 | 𝑏. Faktor persekutuan terbesar dari 𝑎 dan 𝑏 dinotasikan dengan gcd(𝑎, 𝑏) (dalam bahasa Indonesia disebut FPB). Jika kedua nilai 𝑎 dan 𝑏 adalah 0, maka gcd(𝑎, 𝑏) tidak terdefinisi (Hoffstein, et al. 2008). Contoh 2.1. FPB dari 12 dan 18 adalah 6, karena 6 | 12 dan 6 | 18 dan tidak ada nilai lain yang lebih besar dari 6. Jadi, gcd(748, 2024) = 44.
Universitas Sumatera Utara
10
Algoritma yang efisien untuk menghitung FPB adalah division with remainder atau biasa disebut dengan metode pembagian panjang. Jika 𝑎 dan 𝑏 adalah bilangan bulat positif dan 𝑎 dibagi dengan b, maka akan diperoleh hasil bagi 𝑞 dan sisanya 𝑟, di mana sisa 𝑟 lebih kecil dari 𝑏. Sebagai contoh, 230 dibagi dengan 17 memberikan hasil bagi 13 dengan sisa 9. Atau dapat ditulis sebagai 230 = 17 ∙ 13 + 9, di mana sisanya 9 lebih kecil dari pembagi 17. Definisi 2.3 (Algoritma Pembagian). Misalkan 𝑎 dan 𝑏 adalah bilangan bulat positif. Kemudian 𝑎 dibagi dengan b memiliki hasil bagi 𝑞 dan sisanya 𝑟, berarti bahwa dengan 0 ≤ 𝑟 < 𝑏.
𝑎 =𝑏∙𝑞+𝑟
(1)
Jika 𝑑 adalah pembagi untuk 𝑎 dan 𝑏, maka jelas dari persamaan (1) bahwa 𝑑 juga pembagi untuk 𝑟. Demikian pula, jika 𝑒 adalah pembagi untuk 𝑏 dan 𝑟, maka 𝑒 juga pembagi untuk 𝑎. Dengan kata lain, pembagi 𝑎 dan 𝑏 adalah sama dengan pembagi untuk 𝑏 dan 𝑟, karenanya gcd(𝑎, 𝑏) = gcd(𝑏, 𝑟) (Hoffstein, et al. 2008). Dengan proses yang sama, membagi 𝑏 dengan 𝑟 untuk mendapatkan hasil bagi dan sisa lainnya, maka 𝑏 = 𝑟 ∙ 𝑞 ′ + 𝑟′ dengan 0 ≤ 𝑟 ′ < 𝑟. Dan gcd(𝑏, 𝑟) = gcd(𝑟, 𝑟′). Jika proses ini terus berlanjut, maka sisanya akan terus menjadi lebih kecil sampai akhirnya mendapatkan sisa 0, di mana nilai akhir dari gcd(𝑠, 0) = 𝑠 adalah sama dengan FPB dari 𝑎 dan 𝑏. Melanjutkan Contoh 2.1 untuk mengetahui FPB dari 2024 dan 748 dengan menggunakan algoritma division with remainder, 2024 = 748 = 528 = 220 = 88 =
748 ∙ 2 + 528 528 ∙ 1 + 220 220 ∙ 2 + 88 88 ∙ 2 + 𝟒𝟒 44 ∙ 2 + 0
𝐹𝑃𝐵 = 44
Teorema 2.1 (Algoritma Euclidean). Misalkan 𝑎 dan 𝑏 adalah bilangan bulat positif dengan 𝑎 ≥ 𝑏. Berikut adalah algoritma untuk menghitung gcd(𝑎, 𝑏): 1) Misalkan 𝑟0 = 𝑎 dan 𝑟1 = 𝑏. 2) 𝑖 = 1. 3) Bagi 𝑟𝑖−1 dengan 𝑟𝑖 untuk mendapatkan hasil bagi 𝑞𝑖 dan sisa 𝑟𝑖+1 , 𝑟𝑖−1 = 𝑟𝑖 ∙ 𝑞𝑖 + 𝑟𝑖+1
dengan 0 ≤ 𝑟𝑖+1 < 𝑟𝑖 .
4) Jika sisa 𝑟𝑖+1 = 0, maka 𝑟𝑖 = gcd(𝑎, 𝑏) dan algoritma berakhir. 5) Jika tidak, 𝑟𝑖+1 > 0, sehingga 𝑖 = 𝑖 + 1 dan lanjut ke Langkah 3.
Universitas Sumatera Utara
11
Pembagian pada Langkah 3 dilakukan sebanyak 2𝑙𝑜𝑔2 (𝑏) + 1 kali. Teorema 2.2 (Algoritma Extended Euclidean). Misal 𝑎 dan 𝑏 adalah bilangan bulat positif. Maka persamaan 𝑎𝑢 + 𝑏𝑣 = gcd(𝑎, 𝑏) selalu memiliki solusi dalam bilangan bulat 𝑢 dan 𝑣. Jika (𝑢0 , 𝑣0 ) adalah salah satu solusinya, maka setiap solusi memiliki bentuk: 𝑢 = 𝑢0 +
𝑏∙𝑘 gcd(𝑎, 𝑏)
𝑎∙𝑘 𝑣 = 𝑣0 + gcd(𝑎, 𝑏)
Untuk semua 𝑘 ∈ ℤ
Definisi 2.4. Misalkan 𝑎 dan 𝑏 adalah bilangan bulat. Dikatakan bahwa 𝑎 dan 𝑏 adalah relatif prima atau koprima, jika gcd(𝑎, 𝑏) = 1. Secara umum, persamaan 𝐴𝑢 + 𝐵𝑣 = gcd(𝐴, 𝐵) dapat dijadikan relatif prima dengan membagi kedua sisi dengan gcd(𝐴, 𝐵), sehingga 𝐴 𝐵 𝑢+ 𝑣=1 gcd(𝐴, 𝐵) gcd(𝐴, 𝐵) di mana 𝑎 = 𝐴/gcd(𝐴, 𝐵) dan 𝑏 = 𝐵/gcd(𝐴, 𝐵) adalah relatif prima dan memenuhi 𝑎𝑢 + 𝑏𝑣 = 1 (Hoffstein, et al. 2008). Berdasarkan Contoh 2.1, gcd(2024,748) = 44 dan memenuhi −7 ∙ 2024 + 19 ∙ 748 = 44. Agar menjadi relatif prima, kedua sisi dibagi dengan 44. Sehingga persamaan sebelumnya menjadi −7 ∙ 46 + 19 ∙ 17 = 1, dengan 𝑢 = −7 dan 𝑣 = 19 adalah koefisien kombinasi linear dari 46 dan 17 yang sama dengan 1. Contoh selanjutnya menjelaskan bagaimana menyubstitusi nilai-nilai dari algoritma Euclidean untuk menyelesaikan 𝑎𝑢 + 𝑏𝑣 = gcd(𝑎, 𝑏), serta menghitung 𝑢 dan 𝑣 jika 𝑎 dan 𝑏 relatif prima. Misalkan 𝑎 = 73 dan 𝑏 = 25. Dengan menggunakan algoritma Euclidean diperoleh hasil sebagai berikut: 73 = 25 = 23 = 2=
25 ∙ 2 + 23 23 ∙ 1 + 2 2 ∙ 11 + 𝟏 1 ∙ 2 + 0.
Berdasarkan hasil bagi 2, 1, 11 dan 2, tercipta sebuah algoritma seperti berikut: 2
1
11
2
0
1
a
c
e
g
1
0
b
d
f
h
Universitas Sumatera Utara
12
2
1
11
2
0
1
2
c
e
g
𝑎 =2∙1+0=2
1
0
1
d
f
h
𝑏 =2∙0+1=1
2
1
11
2
0
1
2
3
e
g
𝑐 =1∙2+1=3
1
0
1
1
f
h
𝑑 =1∙1+0=1
2
1
11
2
0
1
2
3
35
g
𝑒 = 11 ∙ 3 + 2 = 35
1
0
1
1
12
h
𝑓 = 11 ∙ 1 + 1 = 12
2
1
11
2
0
1
2
3
35
73
𝑔 = 2 ∙ 35 + 3 = 73
1
0
1
1
12
25
ℎ = 2 ∙ 12 + 1 = 25
Terlihat bahwa kolom terakhir adalah masing-masing nilai untuk 𝑎 dan 𝑏. Dan kolom di samping kolom terakhir adalah nilai 𝑣 dan 𝑢. Jadi, dari contoh ini ditemukan bahwa 73 ∙ 12 − 25 ∙ 35 = 1 (Hoffstein, et al. 2008). Secara umum, jika 𝑎 dan 𝑏 relatif prima dan jika 𝑞1 , 𝑞2 , … , 𝑞𝑡 adalah sederetan hasil bagi dari penerapan algoritm Euclidean terhadap 𝑎 dan 𝑏, maka 𝑞1
𝑞2
…
𝑞𝑡−1
𝑞𝑡
0
1
𝑃1
𝑃2
…
𝑃𝑡−1
a
1
0
𝑄1 𝑄2
…
𝑄𝑡−1
b
Nilai-nilai pada kotak dihitung dengan terlebih dahulu melakukan inisialisasi sebagai berikut: 𝑃1 = 𝑞1 ,
𝑄1 = 1,
𝑃2 = 𝑞2 ∙ 𝑃1 + 1,
𝑄2 = 𝑞2 ∙ 𝑄1
lalu, selama 𝑖 > 2, hitung 𝑃𝑖 = 𝑞𝑖 ∙ 𝑃𝑖−1 + 𝑃𝑖−2 dan 𝑄𝑖 = 𝑞𝑖 ∙ 𝑄𝑖−1 + 𝑄𝑖−2 . Empat nilai dari dua kolom terakhir memenuhi 𝑎 ∙ 𝑄𝑡−1 − 𝑏 ∙ 𝑃𝑡−1 = (−1)𝑡 . Dengan mengalikan kedua sisi dengan (−1)𝑡 memberikan penyelesaian: 𝑢 = (−1)𝑡 𝑄𝑡−1 ,
𝑣 = (−1)𝑡+1 𝑃𝑡−1
ke dalam persamaan 𝑎𝑢 + 𝑏𝑣 = 1 (Hoffstein, et al. 2008). 2.2.2. Aritmatika modular Setiap orang pasti pernah membaca jam, di mana terdapat perhitungan yang aneh. Misalnya, 6 + 9 = 3 atau 2 − 3 = 11. Tetapi tidak ada yang salah dalam perhitungan
Universitas Sumatera Utara
13
waktu tersebut, karena jam 11: 00 adalah 3 jam sebelum jam 02: 00. Jadi, yang pertama sekali dilakukan adalah menghitung 2 − 3 = −1, lalu menambahkannya dengan 12. Demikian pula, 9 jam setelah jam 06: 00 adalah jam 03: 00, karena 6 + 9 − 12 = 3. Teori kongruen adalah metode paling tepat dalam perhitungan yang didasarkan pada gagasan sederhana jam aritmatika. Definisi 2.5: Misalkan bilangan bulat 𝑚 ≥ 1, maka bilangan bulat 𝑎 dan 𝑏 disebut kongruen modulo 𝑚 jika selisih keduanya habis dibagi 𝑚. Sehingga dapat ditulis 𝑎 ≡ 𝑏 (𝑚𝑜𝑑 𝑚), dan nilai 𝑚 disebut modulus (Hoffstein, et al. 2008). Contoh jam sebelumnya dapat ditulis sebagai kongruen menggunakan modulus 𝑚 = 12, 6 + 9 = 15 ≡ 3 (𝑚𝑜𝑑 12) dan 2 − 3 = −1 ≡ 11 (𝑚𝑜𝑑 12). Angka-angka yang memenuhi 𝑎 ≡ 0 (𝑚𝑜𝑑 𝑚) adalah angka yang habis dibagi dengan 𝑚, yaitu kelipatan 𝑚. Teorema 2.3: Misalkan bilangan bulat 𝑚 ≥ 1, a) Jika 𝑎1 ≡ 𝑎2 (𝑚𝑜𝑑 𝑚) dan 𝑏1 ≡ 𝑏2 (𝑚𝑜𝑑 𝑚), maka 𝑎1 ± 𝑏1 ≡ 𝑎2 ± 𝑏2 (𝑚𝑜𝑑 𝑚) dan 𝑎1 ∙ 𝑏1 ≡ 𝑎2 ∙ 𝑏2 (𝑚𝑜𝑑 𝑚). b) Misalkan bilangan bulat 𝑎, kemudian 𝑎 ∙ 𝑏 ≡ 1 (𝑚𝑜𝑑 𝑚) untuk suatu bilangan bulat 𝑏 jika dan hanya jika gcd(𝑎, 𝑚) = 1. Jika bilangan bulat 𝑏 ada, maka dapat dikatakan bahwa 𝑏 adalah invers dari 𝑎 modulo 𝑚 (Hoffstein, et al. 2008). Teorema 2.3(b) mengatakan bahwa jika gcd(𝑎, 𝑚) = 1, maka ada invers 𝑏 dari 𝑎 modulo 𝑚. Misalkan 𝑚 = 5 dan 𝑎 = 2, jelas gcd(2, 5) = 1, sehingga ada invers untuk 2 modulo 5. Dan inversnya adalah 3, karena 2 ∙ 3 ≡ 1 (𝑚𝑜𝑑 5). Jadi, 2−1 ≡ 3 (𝑚𝑜𝑑 5). Demikian pula, gcd(4, 15) = 1 sehingga 4−1 ada dalam modulo 15. Dan karena 4 ∙ 4 ≡ 1 (𝑚𝑜𝑑 15), maka 4 adalah invers dalam modulo 15. Permasalahan modulo 𝑚 dalam pecahan 𝑎/𝑑 dapat diselesaikan selama penyebut adalah relatif prima terhadap 𝑚. Sebagai contoh 5/7 modulo 11, dengan terlebih dahulu mengamati bahwa 7 ∙ 8 ≡ 1 (𝑚𝑜𝑑 11), maka 7−1 ≡ 8 (𝑚𝑜𝑑 11). Selanjutnya: 5 = 5 ∙ 7−1 ≡ 5 ∙ 8 ≡ 40 ≡ 7 (𝑚𝑜𝑑 11) 7 Selanjutnya jika 𝑎 dibagi dengan 𝑚 memiliki hasil bagi 𝑞 dan sisa bagi 𝑟, dapat ditulis sebagai 𝑎 = 𝑚 ∙ 𝑞 + 𝑟 dengan 0 ≤ 𝑟 < 𝑚. Hal ini menunjukkan bahwa 𝑎 ≡ 𝑟 (𝑚𝑜𝑑 𝑚) untuk suatu bilangan bulat 𝑟 antara 0 sampai 𝑚 − 1. Jadi, jika ingin
Universitas Sumatera Utara
14
menghitung bilangan bulat modulo 𝑚, cukup menggunakan bilangan 0 ≤ 𝑟 < 𝑚. Dan definisi selanjutnya adalah: ℤ/𝑚ℤ = {0, 1, 2, … , 𝑚 − 1} di mana ℤ/𝑚ℤ disebut ring bilangan bulat modulo 𝑚. Perhatikan bahwa setiap kali dilakukan penambahan atau perkalian dalam ℤ/𝑚ℤ, hasilnya selalu dibagi dengan 𝑚 dan mengambil sisanya untuk mendapatkan sebuah elemen dalam ℤ/𝑚ℤ. Tabel 2.1 memperlihatkan ring ℤ/5ℤ dengan tabel penjumlahan dan perkalian dalam modulo 5 secara lengkap. +
0
1
2
3
4
∙
0
1
2
3
4
0
0
1
2
3
4
0
0
0
0
0
0
1
1
2
3
4
0
1
0
1
2
3
4
2
2
3
4
0
1
2
0
2
4
1
3
3
3
4
0
1
2
3
0
3
1
4
2
4
4
0
1
2
3
4
0
4
3
2
1
Tabel 2.1: Penjumlahan dan perkalian dalam modulo 5. Definisi 2.6: Teorema 2.3(b) menjelaskan bahwa 𝑎 memiliki invers modulo 𝑚 jika dan hanya jika gcd(𝑎, 𝑚) = 1. Bilangan-bilangan yang memiliki invers disebut unit. Himpunan semua unit dinotasikan sebagai (ℤ/𝑚ℤ)∗ = {𝑎 ∈ ℤ/𝑚ℤ ∶ gcd(𝑎, 𝑚) = 1} = {𝑎 ∈ ℤ/𝑚ℤ ∶ 𝑎 memiliki invers modulo 𝑚}, himpunan (ℤ/𝑚ℤ)∗ disebut kumpulan unit (group of units) modulo 𝑚. Perhatikan bahwa jika 𝑎1 dan 𝑎2 adalah unit modulo 𝑚, hasilnya adalah 𝑎1 𝑎2 . Jadi, ketika dua unit dikalikan, hasilnya selalu unit. Sedangkan jika dua unit ditambahkan, hasilnya belum tentu adalah unit. Group of units modulo 24 adalah (ℤ/24ℤ)∗ = {1, 5, 7, 11, 13, 17, 19, 23}. Tabel perkalian untuk (ℤ/24ℤ)∗ seperti ditunjukkan pada Tabel 2.2: ∙
1
5
7
11
13
17
19
23
1
1
5
5
5
7
11
13
17
19
23
1
11
7
17
13
23
19
7
7
11
1
5
19
23
13
17
11
11
7
5
1
23
19
17
13
13
13
17
19
23
1
5
7
11
17
17
13
23
19
5
1
11
7
19
19
23
13
17
7
11
1
5
23
23
19
17
13
11
7
5
1
Tabel 2.2: Perkalian group of units modulo 24.
Universitas Sumatera Utara
15
Definisi 2.7: Fungsi phi Euler (sering juga disebut sebagai fungsi totient Euler) adalah fungsi 𝜙(𝑚) didefinisikan oleh aturan 𝜙(𝑚) = #(ℤ/𝑚ℤ)∗ = #{0 ≤ 𝑎 < 𝑚 ∶ gcd(𝑎, 𝑚) = 1}. Berdasarkan contoh sebelumnya, 𝜙(24) = 8. Dengan kata lain hasil dari fungsi 𝜙(𝑚) adalah banyaknya bilangan bulat nonnegatif dan lebih kecil dari 𝑚 yang relatif prima dengan 𝑚. Jadi, 𝜙(1) = 1 dan untuk bilangan prima 𝑝, 𝜙(𝑝) = 𝑝 − 1, karena 1, 2, 3, … , 𝑝 − 1 semua relatif prima terhadap 𝑝, sedangkan gcd(𝑝, 0) = 𝑝 ≠ 1. Untuk bilangan prima 𝑝, 𝜙(𝑝𝑎 ) = 𝑝𝑎 − 𝑝𝑎−1 (Hoffstein, et al. 2008). 2.2.3. Bilangan prima, faktorisasi prima, dan finite field Di bagian sebelumnya telah dipelajari aritmatika modular dalam operasi penambahan, pengurangan, dan perkalian bilangan bulat modulo 𝑚. Sedangkan pembagian, dapat menjadi masalah karena bilangan bulat dapat dibagi dengan 𝑎 dalam ℤ/𝑚ℤ hanya jika gcd(𝑎, 𝑚) = 1. Jika bilangan bulat 𝑚 adalah prima, maka 𝑚 dapat dibagi dengan setiap elemen ℤ/𝑚ℤ yang bukan nol. Maka, selanjutnya akan dipelajari ring ℤ/𝑝ℤ dengan bilangan prima 𝑝. Definisi 2.8: Bilangan bulat 𝑝 disebut prima jika 𝑝 ≥ 2 dan bilangan bulat positif yang bisa membagi 𝑝 hanya 1 dan 𝑝 (Hoffstein, et al. 2008). Teorema 2.4 (Teorema Dasar Aritmatika). Misalkan bilangan bulat 𝑎 ≥ 2, Maka 𝑎 dapat difaktorkan sebagai hasil dari bilangan prima (Hoffstein, et al. 2008) 𝑒
𝑒
𝑒
𝑒
𝑎 = 𝑝11 × 𝑝22 × 𝑝33 × … × 𝑝𝑟 𝑟 Definisi 2.9. Teorema dasar aritmatika mengatakan bahwa dalam faktorisasi bilangan bulat positif 𝑎 ke bilangan prima 𝑝, setiap 𝑝 memiliki pangkat tertentu. Pangkat ini dinotasikan dengan 𝑜𝑟𝑑𝑝 (𝑎). Untuk semua bilangan prima, 𝑜𝑟𝑑𝑝 (1) = 0 (Hoffstein, et al. 2008). Contoh, faktorisasi 1728 adalah 1728 = 26 ∙ 33 , sehingga 𝑜𝑟𝑑2 (1728) = 6, 𝑜𝑟𝑑3 (1728) = 3, dan 𝑜𝑟𝑑𝑝 (1728) = 0 untuk semua bilangan prima 𝑝 ≥ 5. Jika 𝑝 adalah prima, maka setiap bilangan bukan nol modulo 𝑝 memiliki invers perkalian modulo 𝑝. Ini berarti bahwa operasi aritmatika modulo 𝑝, tidak hanya bisa menambah, mengurangi, mengalikan, tetapi juga bisa membagi dengan bilangan bukan nol, sama seperti operasi pada bilangan real.
Universitas Sumatera Utara
16
Misalkan 𝑝 adalah bilangan prima. Maka setiap anggota 𝑎 dalam ℤ/𝑝ℤ yang bukan nol memiliki invers perkalian, yaitu 𝑏 yang memenuhi 𝑎𝑏 ≡ 1 (𝑚𝑜𝑑 𝑝). Nilai 𝑏 dinotasikan dengan 𝑎−1 𝑚𝑜𝑑 𝑝. Definisi 2.10. Jika 𝑝 adalah bilangan prima, maka himpunan bilangan bulat ℤ/𝑝ℤ modulo 𝑝 dengan aturan penambahan, pengurangan, perkalian, dan pembagiannya adalah contoh dari sebuah field yang merupakan nama umum untuk (komutatif) ring, di mana setiap anggota bukan nol-nya memiliki invers perkalian. Beberapa contoh di antaranya adalah field untuk bilangan real ℝ, field untuk bilangan rasional (pecahan) ℚ, dan field untuk bilangan kompleks ℂ. Field ℤ/𝑝ℤ dari bilangan bulat modulo 𝑝 hanya memiliki jumlah anggota yang berhingga yang disebut sebagai finite field yang dilambangkan dengan 𝔽𝑝 . Jadi, 𝔽𝑝 dan ℤ/𝑝ℤ adalah dua notasi yang berbeda untuk objek yang sama. Demikian pula, anggota dari group of units (ℤ/𝑝ℤ)∗ dilambangkan dengan 𝔽𝑝∗ . Finite field adalah aspek dasar yang paling penting dalam seluruh kriptografi (Hoffstein, et al. 2008). Meskipun ℤ/𝑝ℤ dan 𝔽𝑝 digunakan untuk menotasikan konsep yang sama, namun kesetaraan elemen di antaranya dinyatakan agak berbeda dalam dua aturan. Untuk 𝑎, 𝑏 ∈ 𝔽𝑝 , kesetaraan 𝑎 dan 𝑏 dilambangkan dengan 𝑎 = 𝑏. Sedangkan untuk 𝑎, 𝑏 ∈ ℤ/𝑝ℤ, kesetaraan 𝑎 dan 𝑏 dinotasikan dengan 𝑎 ≡ 𝑏 (𝑚𝑜𝑑 𝑝). 2.3. Advanced Encryption Standard (AES) AES (Advanced Encryption Standard) adalah teknik enkripsi yang dijadikan standar FIPS oleh NIST pada tahun 2001. AES dimaksudkan secara bertahap akan menggantikan DES (Data Encryption Standard) sebagai standar enkripsi di Amerika Serikat untuk abad ke-21 (DES sebagai standard FIPS telah dicabut, Mei 2005). AES menjadi standar melalui proses seleksi. Dari beberapa teknik enkripsi yang dicalonkan untuk menjadi AES, yang terpilih adalah enkripsi Rijndael. Jadi, algoritma AES dikenal juga dengan algoritma Rijndael. Teknik enkripsi ini termasuk jenis block cipher seperti halnya dengan DES. Perbedaan utama antara teknik enkripsi DES dengan AES adalah dalam transformasi subBytes (menggunakan S-boxes). AES melakukan transformasi secara langsung terhadap naskah, sedangkan DES menggunakan substitusi S-box hanya dalam fungsi cipher f, yang hasilnya kemudian dioperasikan terhadap naskah menggunakan exclusive OR. AES juga menggunakan kunci enkripsi yang lebih besar yaitu 128 bit, 192 bit, atau 256 bit (Kromodimoeljo, 2010).
Universitas Sumatera Utara
17
Secara umum, transformasi dalam algoritma Rijndael terdiri dari: subBytes, shiftRows, mixColumns, dan AddRoundKey. Algoritma Rijndael beroperasi terhadap state dari naskah yang dipandang sebagai matriks berukuran 4 × 𝑁𝑏 . Setiap kolom dari state merepresentasikan 1 word, dengan 𝑠0.𝑖 sebagai most significant byte untuk kolom ke-i. Beberapa operasi pada algoritma Rijndael didefinisikan pada tingkat byte yang mewakili anggota dalam polynomial field 𝐺𝐹(28 ). Operasi lainnya didefinisikan dalam istilah 4-byte word (Daemen & Rijmen, 2002). 2.3.1. Matematika pengantar
Polinomial field 𝐺𝐹(28 )
Setiap anggota dalam finite field dapat direpresentasikan dalam beberapa cara yang berbeda. Untuk setiap pangkat bilangan prima ada sebuah finite field yang karenanya semua representasi dari 𝐺𝐹(28 ) adalah isomorfik. Representasi dalam persamaan ini memiliki dampak pada kompleksitas implementasi. Sebuah byte 𝑏, terdiri dari serangkaian bit 𝑏7 𝑏6 𝑏5 𝑏4 𝑏3 𝑏2 𝑏1 𝑏0 yang dianggap sebagai polinomial dengan koefisien dalam {0, 1} (Daemen & Rijmen, 2002): 𝑏7 𝑥 7 + 𝑏6 𝑥 6 + 𝑏5 𝑥 5 + 𝑏4 𝑥 4 + 𝑏3 𝑥 3 + 𝑏2 𝑥 2 + 𝑏1 𝑥 1 + 𝑏0 𝑥 0 . Contoh, byte dengan dengan nilai heksadesimal 57 (biner: 01010111) bersesuaian dengan polinomial: 𝑥 6 + 𝑥 4 + 𝑥 2 + 𝑥 + 1.
Penambahan
Dalam representasi polinomial, jumlah dari dua elemen adalah polinomial dengan koefisien yang diberikan oleh penjumlahan dalam modulo 2 (yaitu, 1 + 1 = 0) terhadap koefisien-koefisiennya. Contoh: 57 + 83 = 𝐷4, atau dengan notasi polinomial: (𝑥 6 + 𝑥 4 + 𝑥 2 + 𝑥 + 1) + (𝑥 7 + 𝑥 + 1) = 𝑥 7 + 𝑥 6 + 𝑥 4 + 𝑥 2 . Dalam notasi biner: 01010111 + 10000011 = 11010100. Operasi penambahan sesuai dengan bitwise XOR (dilambangkan dengan ⨁) pada tingkat byte. Semua kondisi yang harus terpenuhi dalam kelompok Abelian adalah: internal, asosiatif, elemen netral (00), elemen inverse dan komutatif (Daemen & Rijmen, 2002).
Perkalian
Dalam representasi polinomial, perkalian dalam 𝐺𝐹(28 ) bersesuaian dengan perkalian polinomial modulo suatu irreducible binary polynomial berderajat 8. Dalam Rijndael, polinomial ini adalah:
𝑚(𝑥) = (𝑥 8 + 𝑥 4 + 𝑥 3 + 𝑥 + 1)
Universitas Sumatera Utara
18
atau 11𝐵 dalam representasi heksadesimal. Contoh: 57 ∙ 83 = 𝐶1, atau: (𝑥 6 + 𝑥 4 + 𝑥 2 + 𝑥 + 1) ∙ (𝑥 7 + 𝑥 + 1) = 𝑥 13 + 𝑥 11 + 𝑥 9 + 𝑥 8 + 𝑥 7 + 𝑥 7 + 𝑥 5 + 𝑥 3 + 𝑥2 + 𝑥 + 𝑥6 + 𝑥4 + 𝑥2 + 𝑥 + 1 = 𝑥 13 + 𝑥 11 + 𝑥 9 + 𝑥 8 + 𝑥 6 + 𝑥 5 + 𝑥 4 + 𝑥 3 + 1 ≡ 𝑥 7 + 𝑥 6 + 1 𝑚𝑜𝑑 (𝑥 8 + 𝑥 4 + 𝑥 3 + 𝑥 + 1) Jelas, hasilnya akan menjadi polinomial biner berderajat di bawah 8. Tidak seperti penambahan, tidak ada penyederhanaan operasi perkalian pada tingkat byte. Perkalian seperti yang telah didefinisikan sebelumnya adalah asosiatif dan ada elemen netral (01). Untuk setiap polinomial biner 𝑏(𝑥) berderajat di bawah 8, algoritma extended Euclidean digunakan untuk menghitung polinomial 𝑎(𝑥), 𝑐(𝑥) sedemikian rupa sehingga 𝑎(𝑥) ∙ 𝑏(𝑥) + 𝑐(𝑥) ∙ 𝑚(𝑥) = 1, oleh karena itu, 𝑎(𝑥) ∙ 𝑏(𝑥) ≡ 1 𝑚𝑜𝑑 𝑚(𝑥) atau 𝑏 −1 (𝑥) ≡ 𝑎(𝑥) 𝑚𝑜𝑑 𝑚(𝑥). Selain itu, dapat dinyatakan bahwa 𝑎(𝑥) ∙ (𝑏(𝑥) + 𝑐(𝑥)) = 𝑎(𝑥) ∙ 𝑏(𝑥) + 𝑎(𝑥) ∙ 𝑐(𝑥). Ini memungkinkan himpunan byte sebesar 256 dengan XOR sebagai penambahan dan perkalian yang didefinisikan seperti pada struktur finite field 𝐺𝐹(28 ) (Daemen & Rijmen, 2002).
Perkalian dengan 𝑥
Jika 𝑏(𝑥) dikalikan dengan polinomial 𝑥, hasilnya: 𝑏7 𝑥 8 + 𝑏6 𝑥 7 + 𝑏5 𝑥 6 + 𝑏4 𝑥 5 + 𝑏3 𝑥 4 + 𝑏2 𝑥 3 + 𝑏1 𝑥 2 + 𝑏0 𝑥 dalam modulo 𝑚(𝑥). Jika 𝑏7 = 0, penyederhanaan ini disebut operasi identitas, jika 𝑏7 = 1, maka 𝑚(𝑥) harus dikurangi (dengan operasi XOR). Oleh karena itu, perkalian dengan 𝑥 (heksadesimal 02) dapat diimplementasikan pada tingkat byte sebagai pergeseran ke kiri dan dengan kondisi tertentu di-XOR-kan dengan 1𝐵. Operasi ini dilambangkan dengan 𝑏 = 𝑥𝑡𝑖𝑚𝑒(𝑎). Dalam kondisi tertentu, xtime hanya membutuhkan 4 kali XOR. Perkalian dengan pangkat yang lebih tinggi dari 𝑥 dapat diimplementasikan dengan xtime berulang kali. Dengan penambahan terpisah, perkalian dengan konstanta apapun dapat diimplementasikan dengan mudah (Daemen & Rijmen, 2002). Contoh: 57 ∙ 13 = 𝐹𝐸. 57 ∙ 02 = 𝑥𝑡𝑖𝑚𝑒(57) = 𝐴𝐸 57 ∙ 04 = 𝑥𝑡𝑖𝑚𝑒(𝐴𝐸) = 47 57 ∙ 08 = 𝑥𝑡𝑖𝑚𝑒(47) = 8𝐸 57 ∙ 10 = 𝑥𝑡𝑖𝑚𝑒(8𝐸) = 07 57 ∙ 13 = 57 ∙ (01 ⊕ 02 ⊕ 10) = 57 ⊕ 𝐴𝐸 ⊕ 07 = 𝑭𝑬
Universitas Sumatera Utara
19
Polinomial dengan koefisien dalam 𝐺𝐹(28 )
Polinomial dapat didefinisikan dengan koefisien dalam 𝐺𝐹(28 ). Dengan cara ini, vektor 4-byte bersesuai dengan polinomial berderajat di bawah 4. Polinomial dapat ditambahkan dengan hanya menambahkan koefisien yang sesuai. Sebagaimana penambahan dalam 𝐺𝐹(28 ) adalah operasi XOR, penambahan dua vektor juga menggunakan operasi XOR. Anggaplah dua polinomial dalam 𝐺𝐹(28 ), yaitu: 𝑎(𝑥) = 𝑎3 𝑥 3 + 𝑎2 𝑥 2 + 𝑎1 𝑥 + 𝑎0 dan 𝑏(𝑥) = 𝑏3 𝑥 3 + 𝑏2 𝑥 2 + 𝑏1 𝑥 + 𝑏0 . Hasilnya adalah 𝑐(𝑥) = 𝑎(𝑥) ∙ 𝑏(𝑥) 𝑐(𝑥) = 𝑐6 𝑥 6 + 𝑐5 𝑥 5 + 𝑐4 𝑥 4 + 𝑐3 𝑥 3 + 𝑐2 𝑥 2 + 𝑐1 𝑥 + 𝑐0 di mana, 𝑐0 = 𝑎0 ∙ 𝑏0
𝑐4 = 𝑎3 ∙ 𝑏1 ⨁ 𝑎2 ∙ 𝑏2 ⨁ 𝑎1 ∙ 𝑏3
𝑐1 = 𝑎1 ∙ 𝑏0 ⨁ 𝑎0 ∙ 𝑏1
𝑐5 = 𝑎3 ∙ 𝑏2 ⨁ 𝑎2 ∙ 𝑏3
𝑐2 = 𝑎2 ∙ 𝑏0 ⨁ 𝑎1 ∙ 𝑏1 ⨁ 𝑎0 ∙ 𝑏2
𝑐6 = 𝑎3 ∙ 𝑏3
𝑐3 = 𝑎3 ∙ 𝑏0 ⨁ 𝑎2 ∙ 𝑏1 ⨁ 𝑎1 ∙ 𝑏2 ⨁ 𝑎0 ∙ 𝑏3 Jelas, 𝑐(𝑥) tidak dapat lagi diwakili oleh vektor 4-byte. Dengan menjadikan 𝑐(𝑥) dalam modulo polinomial berderajat 4 hasilnya dapat disederhanakan menjadi polinomial berderajat di bawah 4. Pada algoritma Rijndael, hal ini dilakukan dengan polinomial 𝑀(𝑥) = 𝑥 4 + 1. Karena 𝑥 𝑖 𝑚𝑜𝑑 𝑥 4 + 1 = 𝑥 𝑖 𝑚𝑜𝑑 4 adalah hasil modular dari 𝑎(𝑥) dan 𝑏(𝑥), dapat dinotasikan dengan 𝑑(𝑥) = 𝑎 (𝑥) ⊗ 𝑏(𝑥) = 𝑑3 𝑥 3 + 𝑑2 𝑥 2 + 𝑑1 𝑥 + 𝑑0 . Di mana, 𝑑0 = 𝑎0 ⋅ 𝑏0 ⨁ 𝑎3 ⋅ 𝑏1 ⨁ 𝑎2 ⋅ 𝑏2 ⨁ 𝑎1 ⋅ 𝑏3 𝑑1 = 𝑎1 ⋅ 𝑏0 ⨁ 𝑎0 ⋅ 𝑏1 ⨁ 𝑎3 ⋅ 𝑏2 ⨁ 𝑎2 ⋅ 𝑏3 𝑑2 = 𝑎2 ⋅ 𝑏0 ⨁ 𝑎1 ⋅ 𝑏1 ⨁ 𝑎0 ⋅ 𝑏2 ⨁ 𝑎3 ⋅ 𝑏3 𝑑3 = 𝑎3 ⋅ 𝑏0 ⨁ 𝑎2 ⋅ 𝑏1 ⨁ 𝑎1 ⋅ 𝑏2 ⨁ 𝑎0 ⋅ 𝑏3
Operasi perkalian dengan polinomial tetap 𝑎(𝑥) dapat ditulis sebagai perkalian matriks sebagai berikut: 𝑑0 𝑎0 𝑑 𝑎 [ 1 ] = [𝑎1 2 𝑑2 𝑎 3 𝑑3
𝑎3 𝑎0 𝑎1 𝑎2
𝑎2 𝑎3 𝑎0 𝑎1
𝑎1 𝑏0 𝑎2 𝑏1 𝑎3 ] [𝑏2 ] 𝑎0 𝑏3
𝑥 4 + 1 bukan merupakan irreducible polynomial dalam 𝐺𝐹(28 ), ini dikarenakan perkalian dengan polinomial tetap belum tentu memiliki invers. Dalam cipher Rijndael, harus menggunakan polinomial tetap yang memiliki invers (Daemen & Rijmen, 2002).
Universitas Sumatera Utara
20
Perkalian dengan 𝑥
Jika 𝑏(𝑥) dikalikan dengan 𝑥, maka hasilnya adalah 𝑏3 𝑥 4 + 𝑏2 𝑥 3 + 𝑏1 𝑥 2 + 𝑏0 𝑥. Hasil 𝑏(𝑥) ⨂ 𝑥 diperoleh dengan mereduksi hasil di atas dengan modulo 𝑥 4 + 1. Sehingga
menjadi 𝑏2 𝑥 3 + 𝑏1 𝑥 2 + 𝑏0 𝑥 + 𝑏3 . Perkalian dengan 𝑥 setara dengan perkalian dengan matriks seperti di atas di mana semua 𝑎𝑖 = 00 kecuali 𝑎1 = 01. Misalkan 𝑐(𝑥) = 𝑥 ⨂ 𝑏(𝑥), maka: 𝑐0 00 𝑐1 [𝑐 ] = [01 2 00 𝑐3 00
00 00 01 00
00 00 00 01
01 𝑏0 00] [𝑏1 ] 00 𝑏2 00 𝑏3
Oleh karena itu, perkalian dengan 𝑥 atau pemangkatan dengan 𝑥, sesuai dengan pergeseran siklik byte di dalam vektor (Daemen & Rijmen, 2002). 2.3.2. State, cipher key dan jumlah putaran Rijndael menghasilkan blok yang diacak berulang kali berdasarkan variabel panjang blok dan kunci yang masing-masing dapat berukuran 128, 192 atau 256 bit. Naskah asli atau naskah acak (cipher) yang belum selesai ditransformasi disebut state. Suatu state digambarkan sebagai array dua dimensi dalam byte. Array ini memiliki empat baris dan jumlah kolom dilambangkan dengan 𝑁𝑏 yang sama dengan panjang blok dibagi dengan 32. Cipher key juga digambarkan sebagai array dua dimensi dengan empat baris dan jumlah kolom dilambangkan dengan 𝑁𝑘 yang sama dengan panjang kunci dibagi dengan 32. Dalam beberapa kasus, blok ini juga dianggap sebagai array satu dimensi dari vektor 4-byte, di mana setiap vektor terdiri dari kolom yang sesuai dalam representasi array dua dimensi. Array ini memiliki panjang masing-masing 4, 6, atau 8, dan indeks dalam rentang 0. .3, 0. .5, atau 0. .7. Vektor 4-byte ini disebut dengan word. Input yang diproses dan output yang dihasilkan oleh Rijndael adalah array satu dimensi berukuran 4 × (𝑁𝑏 − 1) byte atau setara dengan 16, 24 atau 32 byte dan indeks dalam rentang 0. .15, 0. .23 atau 0. .31. Setiap input dalam satuan byte dipetakan ke dalam state dengan urutan 𝑏0,0 , 𝑏1,0 , 𝑏2,0 , 𝑏3,0 , 𝑏0,1 , 𝑏1,1 , 𝑏2,1 , 𝑏3,1 , … , 𝑏3,𝑁𝑏−1 , begitu juga dengan cipher key yang dipetakan dengan urutan 𝑘0,0 , 𝑘1,0 , 𝑘2,0 , 𝑘3,0 , 𝑘0,1 , 𝑘1,1 , 𝑘2,1 , 𝑘3,1 , … , 𝑘3,𝑁𝑘−1 . Di akhir operasi, output diekstrak kembali dari state dengan urutan yang sama (Daemen & Rijmen, 2002).
Universitas Sumatera Utara
21
𝑏0,0 𝑏0,1 𝑏0,2 𝑏0,3 𝑏0,4 𝑏0,5
𝑘0,0 𝑘0,1 𝑘0,2 𝑘0,3
𝑏1,0 𝑏1,1 𝑏1,2 𝑏1,3 𝑏1,4 𝑏1,5
𝑘1,0 𝑘1,1 𝑘1,2 𝑘1,3
𝑏2,0 𝑏2,1 𝑏2,2 𝑏2,3 𝑏2,4 𝑏2,5
𝑘2,0 𝑘2,1 𝑘2,2 𝑘2,3
𝑏3,0 𝑏3,1 𝑏3,2 𝑏3,3 𝑏3,4 𝑏3,5
𝑘3,0 𝑘3,1 𝑘3,2 𝑘3,3
Tabel 2.3: Contoh representasi state (𝑁𝑏 = 6) dan cipher key (𝑁𝑘 = 4). Jika indeks array satu dimensi dalam byte suatu blok adalah 𝑛 dan indeks array dua dimensi adalah (𝑖, 𝑗), maka: 𝑗 = ⌊𝑛/4⌋,
𝑖 = 𝑛 𝑚𝑜𝑑 4,
𝑛 = 𝑖 + 4𝑗
Nilai 𝑖 adalah jumlah vektor 4-byte atau word, sedangkan 𝑗 menunjukkan indeks vektor atau word dalam blok. Banyaknya jumlah putaran 𝑁𝑟 bergantung pada panjang blok 𝑁𝑏 dan kunci 𝑁𝑘 (Daemen & Rijmen, 2002), seperti ditunjukkan pada Tabel 2.3. 𝑵𝒓
𝑁𝑏 = 4
𝑁𝑏 = 6
𝑁𝑏 = 8
𝑁𝑘 = 4
10
12
14
𝑁𝑘 = 6
12
12
14
𝑁𝑘 = 8
14
14
14
Tabel 2.4: Jumlah putaran 𝑁𝑟 sebagai fungsi blok terhadap panjang kunci. 2.3.3. Enkripsi Pada proses enkripsi AES dilakukan transformasi subBytes, shiftRows, mixColumns, dan addRoundKey berulang kali hingga 𝑁𝑟 − 1. Di putaran ke-𝑁𝑟 , transformasi yang dilakukan tetap sama, tetapi tanpa transformasi mixColumns. Berikut pseudocode enkripsi AES: Round(state, roundKey) 1. subBytes(state); 2. shiftRows(state); 3. mixColumns(state); 4. addRoundKey(state, roundKey);
Transformasi subBytes
Transformasi subBytes adalah substitusi byte non-linear, yang beroperasi pada setiap byte pada state secara independen. Tabel substitusi (S-box) dapat diinvers dan dibuat dengan dua transformasi. Pertama, menggunakan invers perkalian dalam 𝐺𝐹(28 ), kemudian menerapkan transformasi affine dalam 𝐺𝐹(28 ) (Daemen & Rijmen, 2002) yang didefinisikan sebagai berikut:
Universitas Sumatera Utara
22
𝑦0 1 𝑦1 1 𝑦2 1 𝑦3 1 𝑦4 ≡ 1 𝑦5 0 𝑦6 0 [𝑦7 ] [0
0 0 1 1 1 1 1 0
0 1 1 1 1 1 0 0
0 0 0 1 1 1 1 1
1 0 0 0 1 1 1 1
1 1 1 0 0 0 1 1
1 1 0 0 0 1 1 1
1 1 𝑥0 1 1 𝑥1 0 1 𝑥2 1 𝑥3 + 0 𝑚𝑜𝑑 2 0 𝑥4 0 0 𝑥5 1 1 0 𝑥6 1] [𝑥7 ] [0]
Contoh: 𝑠𝑢𝑏𝐵𝑦𝑡𝑒𝑠(𝐴7) = 5𝐶, 𝑠𝑢𝑏𝐵𝑦𝑡𝑒𝑠(3𝐹) = 75 (Paar, 2010). 0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0
63
7C
77
7B
F2
6B
6F
C5
30
01
67
2B
FE
D7
AB
76
1
CA
82
C9
7D
FA
59
47
F0
AD
D4
A2
AF
9C
A4
72
C0
2
B7
FD
93
26
36
3F
F7
CC
34
A5
E5
F1
71
D8
31
15
3
04
C7
23
C3
18
96
05
9A
07
12
80
E2
EB
27
B2
75
4
09
83
2C
1A
1B
6E
5A
A0
52
3B
D6
B3
29
E3
2F
84
5
53
D1
00
ED
20
FC
B1
5B
6A
CB
BE
39
4A
4C
58
CF
6
D0
EF
AA
FB
43
4D
33
85
45
F9
02
7F
50
3C
9F
A8
7
51
A3
40
8F
92
9D
38
F5
BC
B6
DA
21
10
FF
F3
D2
8
CD
0C
13
EC
5F
97
44
17
C4
A7
7E
3D
64
5D
19
73
9
60
81
4F
DC
22
2A
90
88
46
EE
B8
14
DE
5E
0B
DB
A
E0
32
3A
0A
49
06
24
5C
C2
D3
AC
62
91
95
E4
79
B
E7
C8
37
6D
8D
D5
4E
A9
6C
56
F4
EA
65
7A
AE
08
C
BA
78
25
2E
1C
A6
B4
C6
E8
DD
74
1F
4B
BD
8B
8A
D
70
3E
B5
66
48
03
F6
0E
61
35
57
B9
86
C1
1D
9E
E
E1
F8
98
11
69
D9
8E
94
9B
1E
87
E9
CE
55
28
DF
F
8C
A1
89
0D
BF
E6
42
68
41
99
2D
0F
B0
54
BB
16
Tabel 2.5: AES S-Box.
Transformasi shiftRows
Pada transformasi shiftRows, deretan baris pada state digeser ke kiri sebanyak 𝑛 kali. Untuk 𝑁𝑏 < 8, baris pertama tidak bergeser, baris kedua digeser sekali ke kiri, baris ketiga digeser dua kali ke kiri, dan baris keempat digeser sebanyak tiga kali ke kiri atau digeser sekali ke kanan. Pergeseran ini dinotasikan dengan 𝐶1 , 𝐶2 , dan 𝐶3 tergantung pada panjang blok 𝑁𝑏 (Daemen & Rijmen, 2002) seperti pada Tabel 2.5: 𝑵𝒃
𝐶1
𝐶2
𝐶3
4
1
2
3
6
1
2
3
8
1
3
4
Tabel 2.6: Besarnya pergeseran baris pada shiftRows terhadap panjang blok.
Universitas Sumatera Utara
23
𝑆0
𝑆4
𝑆8
𝑆12
Tidak digeser
𝑆0
𝑆4
𝑆8
𝑆12
𝑆1
𝑆5
𝑆9
𝑆13
Digeser 𝐶1 kali
𝑆5
𝑆9
𝑆13
𝑆1
𝑆2
𝑆6
𝑆10
𝑆14
Digeser 𝐶2 kali
𝑆10
𝑆14
𝑆2
𝑆6
𝑆3
𝑆7
𝑆11
𝑆15
Digeser 𝐶3 kali
𝑆15
𝑆3
𝑆7
𝑆11
mixColumns(state, Nb) 1. C = { 0, 1, 2, 3 }; 2. if(Nb > 6) 3. C = { 0, 1, 2, 4 }; 4. for (i ← 0; i < Nb; i ← i + 1) 5. for (j ← 0; j < 4; j ← j + 1) block[i][j] = state[(i + C[j]) % Nb][j]; 6. 7. return block;
Transformasi mixColumns
Pada transformasi mixColumns, setiap kolom pada state dapat dipandang sebagai polinomial dalam 𝐺𝐹(28 ) dan dikalikan dengan polinomial tetap modulo 𝑥 4 + 1, yaitu: 𝑐(𝑥) = 03𝑥 3 + 01𝑥 2 + 01𝑥 + 02. Polinomial ini adalah relatif prima untuk 𝑥 4 + 1 dan memiliki invers (Daemen & Rijmen, 2002). Misalkan 𝑏(𝑥) = 𝑐(𝑥) ⨂ 𝑎(𝑥), maka perkalian matriksnya adalah: 𝑏0 02 𝑏1 [ ] = [01 01 𝑏2 03 𝑏3
03 02 01 01
01 03 02 01
01 𝑎0 01] [𝑎1 ] 03 𝑎2 02 𝑎3
Contoh: Misalkan state seperti berikut, dan akan dilakukan transformasi mixColumns, 02
03
01
01
01
02
03
01
98
01
01
02
03
E5
03
01
01
02
D4
E0
B8
1E
BF
B4
41
27
5D
52
11
30
AE
F1
.
=
04
E0
48
28
66
CB
F8
06
81
19
D3
26
E5
9A
7A
4C
𝑆0 = (𝐷4 ⋅ 02) ⨁ (𝐵𝐹 ⋅ 03) ⨁ (5𝐷 ⋅ 01) ⨁ (30 ⋅ 01) = 04 𝑆1 = (𝐷4 ⋅ 01) ⨁ (𝐵𝐹 ⋅ 02) ⨁ (5𝐷 ⋅ 03) ⨁ (30 ⋅ 01) = 66 𝑆2 = (𝐷4 ⋅ 01) ⨁ (𝐵𝐹 ⋅ 01) ⨁ (5𝐷 ⋅ 02) ⨁ (30 ⋅ 03) = 81 𝑆3 = (𝐷4 ⋅ 03) ⨁ (𝐵𝐹 ⋅ 01) ⨁ (5𝐷 ⋅ 01) ⨁ (30 ⋅ 02) = 5𝐸 ⋮
⋮
⋮
𝑆15 = (1𝐸 ⋅ 03) ⨁ (27 ⋅ 01) ⨁ (98 ⋅ 01) ⨁ (𝐸5 ⋅ 02) = 4𝐶
Universitas Sumatera Utara
24
Transformasi addRoundKey
Transformasi ini cukup sederhana, yaitu dengan melakukan operasi XOR terhadap cipher key dengan state. Cipher key diperoleh melalui proses key schedule, sebagian menyebut proses ini dengan ekspansi kunci. Panjang cipher key bervariasi tergantung dengan panjang kuncinya (Daemen & Rijmen, 2002). Untuk AES 128-bit dengan state sebesar 4 word, diperlukan cipher key dengan panjang 44 word. Hal ini dikarenakan jumlah putarannya sebanyak 10 kali, dengan setiap putaran diperlukan 𝑁𝑘 sebesar 4 word untuk dilakukan XOR terhadap state dengan besar yang sama (𝑁𝑏 = 4 word). Dengan demikian, total panjang kunci adalah 4 ∗ 10 word = 40 word ditambah dengan addRoundKey yang pertama kali, sehingga 40 word + 4 word = 44 word. Hal yang sama untuk AES 192-bit dan AES 256-bit, panjang cipher key yang diperlukan masing-masing 52 word dan 60 word. Panjang state 𝑁𝑏 harus sama dengan panjang kunci 𝑁𝑘 , seperti berikut: 04
E0
48
28
66
CB
F8
06
81
19
D3
26
E5
9A
7A
4C
⨁
A0
88
23
2A
FA
54
A3
6C
FE
2C
39
76
17
B1
39
05
=
A4
68
6B
02
9C
9F
5B
6A
7F
35
EA
50
F2
2B
43
49
Universitas Sumatera Utara
25
Start Nr, key, message
cipherKey =
keySchedule(key)
addRoundKey(message, key)
i=0
subBytes(state, cipherKey[i])
False
i < Nr - 1
shiftRows(state, cipherKey[i])
True
subBytes(state, cipherKey[i])
shiftRows(state, cipherKey[i]) i=i+1
addRoundKey(state, cipherKey[i])
mixColumns(state, cipherKey[i])
cipher
addRoundKey(state, cipherKey[i])
End
Gambar 2.1: Flowchart algoritma enkripsi AES. 2.3.4. Dekripsi Algoritma dekripsi AES adalah kebalikan dari algoritma enkripsi AES. Jumlah putaran tetap sama, hanya saja pada putaran pertama transformasi yang dilakukan adalah addRoundKey, shiftRows, dan subBytes yang sama dengan kebalikan dari transformasi pada proses enkripsi AES di putaran terakhir. Sisa putaran selanjutnya dilakukan transformasi dengan urutan sebagai berikut: addRoundKey, mixColumns, shiftRows, dan subBytes.
Universitas Sumatera Utara
26
Start Nr, key, cipher
cipherKey =
keySchedule(key)
addRoundKey(cipher, cipherKey[Nr - 1])
shiftRows(state, cipherKey[Nr - 1])
subBytes(state, cipherKey[Nr - 1])
i = Nr - 2
addRoundKey(state, key)
False
i>-1
cipher
True
addRoundKey(state, cipherKey[i])
mixColumns(state, cipherKey[i]) i=i-1
End
shiftRows(state, cipherKey[i])
subBytes(state, cipherKey[i])
Gambar 2.2: Flowchart algoritma dekripsi AES.
Transformasi subBytes invers
Sama seperti proses enkripsi, hanya saja transformasi subBytes invers pada proses dekripsi menggunakan tabel S-box invers yang diperoleh dari invers pemetaan affine, diikuti perkalikan invers dalam 𝐺𝐹(28 ). Tabel 2.6 adalah tabel S-𝐵𝑜𝑥′.
Universitas Sumatera Utara
27
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
0
52
09
6A
D5
30
36
A5
38
BF
40
A3
9E
81
F3
D7
FB
1
7C
E3
39
82
9B
2F
FF
87
34
8E
43
44
C4
DE
E9
CB
2
54
7B
94
32
A6
C2
23
3D
EE
4C
95
0B
42
FA
C3
4E
3
08
2E
A1
66
28
D9
24
B2
76
5B
A2
49
6D
8B
D1
25
4
72
F8
F6
64
86
68
98
16
D4
A4
5C
CC
5D
65
B6
92
5
6C
70
48
50
FD
ED
B9
DA
5E
15
46
57
A7
8D
9D
84
6
90
D8
AB
00
8C
BC
D3
0A
F7
E4
58
05
B8
B3
45
06
7
D0
2C
1E
8F
CA
3F
0F
02
C1
AF
BD
03
01
13
8A
6B
8
3A
91
11
41
4F
67
DC
EA
97
F2
CF
CE
F0
B4
E6
73
9
96
AC
74
22
E7
AD
35
85
E2
F9
37
E8
1C
75
DF
6E
A
47
F1
1A
71
1D
29
C5
89
6F
B7
62
0E
AA
18
BE
1B
B
FC
56
3E
4B
C6
D2
79
20
9A
DB
C0
FE
78
CD
5A
F4
C
1F
DD
A8
33
88
07
C7
31
B1
12
10
59
27
80
EC
5F
D
60
51
7F
A9
19
B5
4A
0D
2D
E5
7A
9F
93
C9
C9
EF
E
A0
E0
3B
4D
AE
2A
F5
B0
C8
EB
BB
3C
83
53
99
61
F
17
2B
04
7E
BA
77
D6
26
E1
69
14
63
55
21
0C
7D
Tabel 2.7: AES S-𝐵𝑜𝑥′.
Transformasi shiftRows invers
Pada dekripsi, shiftRows invers ditransformasikan dengan arah yang berlawanan dengan shiftRows pada proses enkripsi. Jadi, arah pergeserannya adalah ke kanan.
𝑆0
𝑆4
𝑆8
𝑆12
𝑆0
𝑆4
𝑆8
𝑆12
𝑆5
𝑆9
𝑆13
𝑆1
𝑆1
𝑆5
𝑆9
𝑆13
𝑆10
𝑆14
𝑆2
𝑆6
𝑆2
𝑆6
𝑆10
𝑆14
𝑆15
𝑆3
𝑆7
𝑆11
𝑆3
𝑆7
𝑆11
𝑆15
Transformasi mixColumns invers
Transformasi mixColumns invers pada dekripsi sama seperti mixColumns pada proses enkripsi, hanya saja setiap kolom state ditransformasikan dengan perkalian terhadap polinomial 0𝐵𝑥 3 + 0𝐷𝑥 2 + 09𝑥 + 0𝐸. Yang memenuhi hukum invers: (03𝑥 3 + 01𝑥 2 + 01𝑥 + 02) ⨂ (0𝐵𝑥 3 + 0𝐷𝑥 2 + 09𝑥 + 0𝐸) = 01, sehingga perkalian matriksnya adalah: 𝑏0 0𝐸 𝑏1 [ ] = [ 09 0𝐷 𝑏2 0𝐵 𝑏3
0𝐵 0𝐸 09 0𝐷
0𝐷 0𝐵 0𝐸 09
09 𝑎0 0𝐷] [𝑎1 ] 0𝐵 𝑎2 0𝐸 𝑎3
Universitas Sumatera Utara
28
2.3.5. Key sechedule Round key berasal dari Cipher key dengan menggunakan proses Key schedule yang nantinya diperlukan pada transformasi addRoundKey, di mana dilakukan proses XOR terhadap state dengan round key. Proses ini terdiri dari dua tahap, yaitu ekspansi kunci dan pemilihan round key. Prinsip dasarnya adalah sebagai berikut: Jumlah round key dalam bit adalah sama dengan panjang blok dikalikan dengan jumlah putaran ditambah satu. (Misalnya, untuk panjang blok 128 bit dan 10 putaran, jumlah round key yang diperlukan sebesar 1408 bit). Cipher key yang sudah diperbesar disebut Expanded key. Round key diambil dari expanded key dengan cara berikut: round key yang pertama diambil dari 𝑁𝑏 word pertama, round key yang kedua diambil dari 𝑁𝑏 word berikutnya, dan begitu seterusnya. Expanded key adalah array sebesar 4-byte word dan dilambangkan dengan 𝑊[𝑁𝑏 ∗ (𝑁𝑟 + 1)]. 𝑁𝑘 word pertama berisi cipher key, sementara word lainnya didefinisikan secara rekursif dalam word dengan indeks yang lebih kecil. Fungsi ekspansi kunci tergantung pada nilai 𝑁𝑘 . Dalam uraian ini, 𝑠𝑢𝑏𝐵𝑦𝑡𝑒(𝑊) adalah fungsi yang mengembalikan 4-byte word, di mana setiap byte adalah hasil dari penerapan Rijndael S-box terhadap byte yang posisinya sesuai dengan word masukan. Fungsi 𝑟𝑜𝑡𝐵𝑦𝑡𝑒(𝑊) mengembalikan sebuah word di mana suatu word masukan (𝑎, 𝑏, 𝑐, 𝑑) menghasilkan word keluaran (𝑏, 𝑐, 𝑑, 𝑎). Pada 𝑁𝑘 pertama diisi dengan cipher key. Setiap word berikutnya 𝑊[𝑖] adalah sama dengan XOR dengan word sebelumnya 𝑊[𝑖 − 1] dan 𝑁𝑘 word diposisikan dengan 𝑊[𝑖 − 𝑁𝑘 ]. Untuk word dalam posisi yang merupakan kelipatan 𝑁𝑘 , transformasi dengan operasi XOR diterapkan terlebih dahulu terhadap 𝑊[𝑖 − 1] dengan dan konstanta putaran. Konstanta putaran ini didefinisikan dengan: 𝑅𝑐𝑜𝑛[𝑖] = [𝑅𝐶[𝑖]
00 00
00],
di mana 𝑅𝐶[𝑖] mewakili elemen dalam 𝐺𝐹(28 ) dengan nilai 𝑥 𝑖−1 . Round key ke-𝑖 sama dengan word 𝑊[𝑁𝑏 ∗ 𝑖] sampai 𝑊[𝑁𝑏 ∗ (𝑖 + 1)] (Daemen & Rijmen, 2002).
Universitas Sumatera Utara
29
2.4. Algoritma Percobaan Bilangan Prima Miller-Rabin Teorema kecil Fermat menjelaskan bahwa jika 𝑝 adalah bilangan prima, maka berlaku: 𝑎𝑝−1 ≡ 1 (𝑚𝑜𝑑 𝑝), untuk setiap bilangan bulat 𝑎 dan 𝑝 ∤ 𝑎. Jika kedua sisi dikalikan dengan 𝑎, maka teorema Fermat akan menjadi 𝑎𝑝 ≡ 𝑎 (𝑚𝑜𝑑 𝑝). Selanjutnya dikatakan bahwa 𝑎 adalah witness terhadap 𝑛 jika 𝑎𝑛 ≢ 𝑎 (𝑚𝑜𝑑 𝑛). Witness terhadap 𝑛 dikombinasikan dengan teorema Fermat cukup untuk membuktikan tanpa keraguan bahwa 𝑛 adalah komposit. Sedangkan cara untuk menilai kemungkinan bahwa 𝑛 adalah prima, dengan mencoba berbagai nilai 𝑎1 , 𝑎2 , 𝑎3 dan seterusnya. Jika salah satunya adalah witness terhadap 𝑛, maka disimpulkan bahwa 𝑛 adalah komposit. Akan tetapi jika di antaranya tidak ada witness terhadap 𝑛, maka 𝑛 diduga adalah prima. Diketahui sebuah bilangan komposit 561 = 3 ∙ 11 ∙ 17, dan tentu saja bilangan ini memiliki witness. Dan ternyata setelah diteliti, bilangan tersebut tidak memiliki witness. Dengan kata lain 𝑎561 ≡ 𝑎 (𝑚𝑜𝑑 561), untuk setiap bilangan bulat 𝑎. Dialah R.D. Carmichael yang pada tahun 1910 telah menemukan bilangan komposit yang tidak memiliki witness ini, dan dia menyebutnya dengan bilangan Carmichael. Dan pada tahun 1984, Alford, Granville, dan Pomerance telah menemukan ada tak berhingga bilangan Carmichael. Jadi, teorema Fermat tidak lagi dapat mengungkap apakah 𝑛 adalah (mungkin) prima atau komposit. Berikut adalah aturan-aturan dalam bilangan prima yang akan diformulasikan menjadi pengecekan bilangan prima Miller-Rabin dengan menyetujui bahwa setiap bilangan komposit memiliki sejumlah besar witness. Misalkan 𝑝 adalah sebuah bilangan prima, maka 𝑝 − 1 = 2𝑘 𝑞,
𝑞 adalah bilangan ganjil.
Misalkan 𝑎 adalah bilangan bulat apapun yang tidak bisa dibagi dengan 𝑝, maka satu dari dua kondisi berikut adalah benar:
𝑎𝑞 ≡ 1 (𝑚𝑜𝑑 𝑝).
Salah satu dari 𝑎𝑞 , 𝑎2𝑞 , 𝑎4𝑞 , …, 𝑎2
𝑘−1 𝑞
adalah kongruen −1 modulo 𝑝.
Definisi 2.12. Misalkan 𝑛 adalah sebuah bilangan ganjil, maka 𝑛 − 1 = 2𝑘 𝑞. Bilangan bulat 𝑎 yang memenuhi 𝑔𝑐𝑑(𝑎, 𝑛) = 1 disebut witness Miller-Rabin terhadap 𝑛 jika kedua kondisi berikut adalah benar:
Universitas Sumatera Utara
30
𝑎𝑞 ≢ 1 (𝑚𝑜𝑑 𝑛).
𝑎2 𝑞 ≢ −1 (𝑚𝑜𝑑 𝑛), untuk setiap 𝑖 = 0, 1, 2, … , 𝑘 − 1 (Hoffstein, et al. 2008).
𝑖
Jika ada 𝑎 yang merupakan witness Miller-Rabin terhadap 𝑛, maka dapat dipastikan 𝑛 adalah bilangan komposit. Dan sedikitnya 75% bilangan antara 1 dan -1 adalah witness Miller-Rabin terhadapa 𝑛. Miller-Rabin adalah algoritma pengecekan bilangan prima secara probabilistik terhadap 𝑛. Caranya adalah dengan menghitung 𝑛 − 1 ≡ 2𝑘 𝑞 (𝑚𝑜𝑑 𝑛). Lalu hitung 𝑎𝑞 (𝑚𝑜𝑑 𝑛), jika hasilnya kongruen 1, maka 𝑛 mungkin prima. Tetapi, jika hasilnya tidak kongruen 1, maka hitung nilai dari setiap 2𝑞
𝑎𝑞 ≡ 𝑎2𝑞 ≡ 𝑎2
𝑘−1 𝑞
≡ ⋯ ≡ 𝑎2
(𝑚𝑜𝑑 𝑛).
Jika pada salah satu nilai kongruen dengan −1, maka 𝑛 mungkin prima. Dan jika sampai pada 𝑘 − 1 tidak diperoleh nilai yang kongruen dengan −1, maka 𝑛 adalah komposit. Misalkan bilangan ganjil 𝑛 = 172947529 akan diperiksa apakah (mungkin) prima atau komposit dengan 𝑎 = 17, maka 𝑛 − 1 = 172947528 = 23 ⋅ 21618441. Selanjutnya hitung 1721618441 ≡ 1 (𝑚𝑜𝑑 172947529), maka 𝑎 = 17 bukan witness Miller-Rabin terhadap 𝑛. Ganti 𝑎 = 3, diperoleh 321618441 ≡ −1 (𝑚𝑜𝑑 172947529). Nilai 𝑎 = 3 juga gagal menjadi witness Miller-Rabin terhadap 𝑛, ini berarti 𝑛 mungkin prima. Akan tetapi jika dicoba dengan 𝑎 = 23, 221618441 ≡ 40063806 (𝑚𝑜𝑑 172947529), 22⋅21618441 ≡ 2257065
(𝑚𝑜𝑑 172947529),
24⋅21618441 ≡ 1
(𝑚𝑜𝑑 172947529),
diperoleh hasil 1 yang berarti 𝑎 = 23 adalah witness Miller-Rabin terhadap 𝑛, sehingga dapat disimpulkan bahwa 𝑛 adalah bilangan komposit. Dan faktanya 𝑛 adalah bilangan Carmichael (Hoffstein, et al. 2008).
Universitas Sumatera Utara
31
2.5. Elliptic Curve (Kurva Eliptik) Kurva eliptik adalah himpunan solusi dalam bentuk persamaan: 𝑌 2 = 𝑋 3 + 𝐴𝑋 + 𝐵. Persamaan jenis ini disebut persamaan Weierstrass, seorang ahli matematika yang telah mempelajarinya secara ekstensif selama abad ke-19. Gambar 2.3 adalah dua contoh kurva eliptik, 𝐸1 : 𝑌 2 = 𝑋 3 − 3𝑋 + 3 dan 𝐸2 : 𝑌 2 = 𝑋 3 − 6𝑋 + 5.
𝐸1 : 𝑌 2 = 𝑋 3 − 3𝑋 + 3
𝐸2 : 𝑌 2 = 𝑋 3 − 6𝑋 + 5
Gambar 2.3: Dua contoh kurva eliptik Sebuah fitur yang mengagumkan dari kurva eliptik adalah bahwa ada cara alami untuk mengambil dua buah titik pada sebuah kurva eliptik dan "menambahkan"-nya untuk menghasilkan titik ketiga. Cara yang paling tepat untuk menggambarkan hukum "penambahan" pada kurva eliptik ini adalah dengan menggunakan geometri.
Gambar 2.4: Hukum penambahan pada kurva eliptik. Misalkan 𝑃 dan 𝑄 adalah dua titik pada kurva eliptik 𝐸, seperti yang diilustrasikan pada Gambar 2.4. Jika ada garis 𝐿 melalui titik 𝑃 dan 𝑄, maka garis ini akan memotong 𝐸 di tiga titik, yaitu 𝑃, 𝑄, dan satu titik lainnya 𝑅. Selanjutnya, titik 𝑅 ini dicerminkan terhadap sumbu 𝑋 (dengan mengalikan koordinat 𝑌 dengan −1) untuk mendapatkan titik yang baru, 𝑅′ . Titik 𝑅′ ini adalah hasil "penambahan" dari 𝑃 dan 𝑄
Universitas Sumatera Utara
32
yang tidak sama seperti proses penambahan pada umumnya. Hukum penjumlahan ini dilambangkan dengan ⊕. Sehingga dapat ditulis 𝑃 ⊕ 𝑄 = 𝑅′ (Hoffstein, et al. 2008). Contoh 2.2. Misalkan kurva eliptik 𝐸 sebagai berikut: 𝑌 2 = 𝑋 3 − 15𝑋 + 18
(1)
Titik 𝑃 = (7, 16) dan 𝑄 = (1, 2) berada di kurva 𝐸. Persamaan garis 𝐿 yang menghubungkan kedua titik itu adalah 7
1
3
3
𝐿∶𝑌= 𝑋−
(2)
Untuk mencari titik-titik di mana kurva 𝐸 dan garis 𝐿 berpotongan, substitusikan persamaan (2) ke dalam persamaan (1), sehingga: 7 1 2 ( 𝑋 − ) = 𝑋 3 − 15𝑋 + 18 3 3 49 2 14 1 𝑋 − + = 𝑋 3 − 15𝑋 + 18 9 9 9 49 121 161 0 = 𝑋3 − 𝑋2 − 𝑋+ 9 9 9 Selanjutnya, perlu ditemukan akar kubik dari persamaan polinomial ini. Secara umum, menemukan akar kubik sangat sulit. Namun, dalam hal ini dua akar sudah diketahui, yaitu 𝑋 = 7 dan 𝑋 = 1, karena 𝑃 dan 𝑄 berada di perpotongan 𝐸 ∩ 𝐿. Hal ini menjadi mudah untuk menemukan akar yang lain, 𝑋3 −
49 2 121 161 23 𝑋 − 𝑋+ = (𝑋 − 7) ∙ (𝑋 − 1) ∙ (𝑋 + ) 9 9 9 9
sehingga titik ketiga dari perpotongan garis 𝐿 dan kurva 𝐸 memiliki koordinat 𝑋 sama 23
23
9
9
dengan − . Selanjutnya mencari koordinat 𝑌 dengan menyubstitusikan 𝑋 = − dalam persamaan (2), sehingga diketahui titik 𝑅 = (−
ke
23 170 9
,
27
). Terahir, refleksikan titik
𝑅 ini dengan sumbu 𝑋 untuk mendapatkan 𝑃 ⨁ 𝑄 = (−
23 170 ,− ) 9 27
Ada beberapa hal yang perlu diperhatikan pada penambahan kurva eliptik. Bayangkan apa yang terjadi pada garis 𝐿 yang menghubungkan titik 𝑃 dan 𝑄, jika titik 𝑄 digeser sepanjang kurva dan semakin dekat ke titik 𝑃. Dalam limit 𝑄 mendekati 𝑃, garis 𝐿 akan menjadi garis tangen pada kurva 𝐸 di titik 𝑃. Jadi, dapat dikatakan titik 𝑃 ditambahkan ke dirinya sendiri. Untuk menambahkan titik 𝑃 dengan 𝑃, garis 𝐿 harus menjadi garis tangen terhadap kurva 𝐸 di titik 𝑃, seperti pada Gambar 2.5. Maka garis
Universitas Sumatera Utara
33
𝐿 memotong 𝐸 di titik 𝑃 dan satu titik lainnya, 𝑅. Sama seperti sebelumnya, garis 𝐿 tetap memotong kurva 𝐸 di tiga titik, namun 𝑃 dihitung sebagai dua di antaranya.
𝐿 menjadi garis tangen kurva 𝐸 di titik 𝑃
Gambar 2.5: Penambahan titik 𝑃 dengan dirinya sendiri. Melanjutkan dengan kurva 𝐸 dan titik 𝑃 pada Contoh 2.2 untuk menghitung 𝑃 ⨁ 𝑃, kemiringan 𝜆 dapat dihitung dengan diferensiasi dari persamaan (1). 2𝑌
𝑑𝑌 3𝑋 2 − 15 = 𝑑𝑋 2𝑌
𝑑𝑌 = 3𝑋 2 − 15, 𝑑𝑋
Dengan menyubstitusikan titik 𝑃 = (7, 16), diperoleh kemiringan 𝜆 =
33 8
. Jadi,
persamaan garis tangen 𝐸 di titik 𝑃 adalah: 𝐿: 𝑌 =
33 8
𝑋−
103
(3)
8
Sekarang substitusikan persamaan (3) ke dalam persamaan (1) untuk kurva 𝐸, sederhanakan, lalu faktorkan: 33 103 2 ( 𝑋− ) = 𝑋 3 − 15𝑋 + 18 8 8 1089 2 2919 9457 𝑋3 − 𝑋 + 𝑋+ =0 64 32 64 193 (𝑋 − 7)2 ∙ (𝑋 − )=0 64
Koordinat 𝑋 pada titik 𝑃, yaitu 𝑋 = 7, muncul sebagai akar kuadrat dari polinomial kubik, sehingga mudah untuk mencari akar ketiga. Akhirnya, substitusikan 𝑋=
193 64
ke persamaan (3) pada garis 𝐿, sehingga didapatkan 𝑌 = −
223
, lalu ganti tanda
512
pada 𝑌 untuk mendapatkan 𝑃⨁𝑃 =(
193 223 , ) 64 512
Universitas Sumatera Utara
34
Muncul permasalahan pada "hukum penambahan" jika mencoba untuk menambahkan titik 𝑃 (𝑎, 𝑏) dengan refleksinya dengan sumbu 𝑋, yaitu 𝑃′ (𝑎, −𝑏). Garis 𝐿 yang melalui titik 𝑃 dan 𝑃′ adalah garis vertikal 𝑋 = 𝑎, dan garis ini memotong kurva 𝐸 hanya di dua titik, yaitu 𝑃 dan 𝑃′. Tidak ada titik ketiga yang memotong kurva, sehingga tampak terjebak dalam permasalahan ini. Tapi, sebenarnya inilah jalan keluarnya. Solusinya adalah dengan membuat titik tambahan, 𝒪 yang ada di "tak terhingga". Lebih tepatnya titik 𝒪 tidak ada dalam koordinat 𝑋𝑌, tapi diandaikan bahwa titik ini terletak di sepanjang garis vertikal. Selanjutnya ditetapkan 𝑃 ⨁ 𝑃′ = 𝒪 Garis 𝐿 yang menghubungkan 𝑃 ke 𝒪 adalah garis vertikal yang melalui titik 𝑃 dan 𝒪 yang diandaikan ada dan terletak di sepanjang garis vertikal dan garis vertikal ini memotong kurva 𝐸 pada titik-titik 𝑃, 𝒪, dan 𝑃′ (𝑎, −𝑏). Untuk menambahkan 𝑃 dengan 𝒪, refleksikan 𝑃′ pada sumbu 𝑋 yang mendapat kembali titik 𝑃. Dengan kata lain, 𝑃 ⨁ 𝒪 = 𝑃′. Jadi, 𝒪 bertindak seperti nol pada penjumlahan kurva.
Gambar 2.6: Garis vertikal 𝐿 yang melalui 𝑃(𝑎, 𝑏) dan 𝑃′(𝑎, −𝑏). Maka dapat diambil kesimpulan baru, kurva eliptik 𝐸 adalah himpunan solusi untuk persamaan Weierstrass 𝐸: 𝑌 2 = 𝑋 3 + 𝐴𝑋 + 𝐵 bersama dengan titik tambahan 𝒪, di mana konstanta 𝐴 dan 𝐵 harus memenuhi 4𝐴3 + 27𝐵2 ≠ 0. Hukum penambahan pada kurva 𝐸 didefinisikan sebagai berikut: misalkan 𝑃 dan 𝑄 adalah dua titik pada kurva 𝐸, dan 𝐿 adalah garis yang menghubungkan 𝑃 dan 𝑄, atau garis singgung terhadap 𝐸 di titik 𝑃 jika 𝑃 = 𝑄. Kemudian perpotongan 𝐸 dengan 𝐿 terdiri dari tiga titik 𝑃, 𝑄, dan 𝑅, dan dengan pemahaman bahwa 𝒪 diandaikan
Universitas Sumatera Utara
35
ada dan terletak di sepanjang garis vertikal. Jika 𝑅 (𝑎, 𝑏) adalah hasil penjumlahan dari 𝑃 dan 𝑄 yang didefinisikan sebagai pencerminan dari 𝑅 terhadap sumbu 𝑋, yaitu 𝑅′ (𝑎, −𝑏). Penjumlahan ini dinotasikan dengan 𝑃 ⨁ 𝑄, atau hanya dengan 𝑃 + 𝑄 (Hoffstein, et al. 2008). Selanjutnya, jika 𝑃 = (𝑎, 𝑏), maka refleksi 𝑃 terhadap sumbu 𝑋 dapat dinotasikan dengan ⊖ 𝑃 = (𝑎, −𝑏), atau hanya dengan – 𝑃, dan dapat didefinisikan 𝑃 ⊖ 𝑄 (atau 𝑃 − 𝑄) menjadi 𝑃 ⊕ (⊖ 𝑄). Demikian pula, penambahan berulang dapat direpresentasikan sebagai perkalian suatu titik dengan integer (Hoffstein, et al. 2008), 𝑛𝑃 = 𝑃 + 𝑃 + 𝑃 + ⋯ + 𝑃 𝑛 kali 3
2
Hasil dari △𝐸 = 4𝐴 + 27𝐵 disebut diskriminan 𝐸. Kondisi △𝐸 ≠ 0 adalah setara dengan kondisi bahwa polinomial kubik 𝑋 3 + 𝐴𝑋 + 𝐵 tidak memiliki akar yang diulang, yaitu jika 𝑋 3 + 𝐴𝑋 + 𝐵 difaktorkan secara lengkap menjadi: 𝑋 3 + 𝐴𝑋 + 𝐵 = (𝑋 − 𝑒1 )(𝑋 − 𝑒2 )(𝑋 − 𝑒3 ) di mana 𝑒1 , 𝑒2 , 𝑒3 adalah bilangan kompleks, kemudian 4𝐴3 + 27𝐵2 ≠ 0 jika dan hanya jika 𝑒1 , 𝑒2 , dan 𝑒3 semua berbeda. Kurva dengan △𝐸 = 0 memiliki titik tunggal. Hukum penambahan tidak bekerja dengan baik pada kurva tersebut. Itulah sebabnya mengapa diperlukan kondisi △𝐸 ≠ 0 dalam sebuah kurva eliptik. Teorema 2.5. Misalkan 𝐸 menjadi kurva eliptik, maka hukum penambahan 𝐸 memiliki sifat sebagai berikut: a) 𝑃 + 𝒪 = 𝒪 + 𝑃 = 𝑃
untuk semua 𝑃 ∈ 𝐸.
(Identitas)
b) 𝑃 + (−𝑃) = 𝒪
untuk semua 𝑃 ∈ 𝐸.
(Invers)
c) (𝑃 + 𝑄) + 𝑅 = 𝑃 + (𝑄 + 𝑅)
untuk semua 𝑃, 𝑄, 𝑅 ∈ 𝐸.
(Asosiatif)
d) 𝑃 + 𝑄 = 𝑄 + 𝑃
untuk semua 𝑃, 𝑄 ∈ 𝐸.
(Komutatif)
Dengan kata lain, hukum penambahan menjadikan titik-titik pada 𝐸 menjadi grup abelian (Hoffstein, et al. 2008). Teorema 2.6: (Algoritma Penambahan pada Kurva Eliptik). Misalkan 𝐸: 𝑌 2 = 𝑋 3 + 𝐴𝑋 + 𝐵 adalah sebuah kurva eliptik, dan misalkan 𝑃1 dan 𝑃2 adalah titik-titik pada 𝐸. Maka: a) Jika 𝑃1 = 𝒪, maka 𝑃1 + 𝑃2 = 𝑃2 . b) Sebaliknya, jika 𝑃2 = 𝒪, maka 𝑃1 + 𝑃2 = 𝑃1 .
Universitas Sumatera Utara
36
c) Sebaliknya, nyatakan 𝑃1 = (𝑥1 , 𝑦1 ) dan 𝑃2 = (𝑥2 , 𝑦2 ). d) Jika 𝑥1 = 𝑥2 dan 𝑦1 = −𝑦2 , maka 𝑃1 + 𝑃2 = 𝒪. e) Sebaliknya, definisikan 𝜆 dengan: 𝑦2 − 𝑦1 , 𝑥2 − 𝑥1 𝜆= 3𝑥12 + 𝐴 , { 2𝑦1
𝑗𝑖𝑘𝑎 𝑃1 ≠ 𝑃2 𝑗𝑖𝑘𝑎 𝑃1 = 𝑃2
lalu tentukan 𝑥3 = 𝜆2 − 𝑥1 − 𝑥2 dan 𝑦3 = 𝜆(𝑥1 − 𝑥3 ) − 𝑦1 . Maka 𝑃1 + 𝑃2 = (𝑥3 , 𝑦3 ) Untuk bagian (e), diketahui bahwa jika 𝑃1 ≠ 𝑃2 , maka 𝜆 adalah kemiringan garis yang melalui 𝑃1 dan 𝑃2 , dan jika 𝑃1 = 𝑃2 , maka 𝜆 adalah kemiringan garis singgung di 𝑃1 = 𝑃2 . Dalam kedua kasus, garis 𝐿 diberikan oleh persamaan 𝑌 = 𝜆𝑋 + 𝑣 dengan 𝑣 = 𝑦1 − 𝜆𝑥1 . Dengan menyubstitusikan persamaan garis 𝐿 ke dalam persamaan untuk 𝐸, (𝜆𝑋 + 𝑣)2 = 𝑋 3 + 𝐴𝑋 + 𝐵
maka:
𝑋 3 − 𝜆2 𝑋 2 + (𝐴 − 2𝜆𝑣)𝑋 + (𝐵 − 𝑣 2 ) = 0 𝑋 3 − 𝜆2 𝑋 2 + (𝐴 − 2𝜆𝑣)𝑋 + (𝐵 − 𝑣 2 ) = (𝑋 − 𝑥1 )(𝑋 − 𝑥2 )(𝑋 − 𝑥3 ) Koefisien 𝑋 2 di sisi kanan adalah −𝑥1 − 𝑥2 − 𝑥3 , yang sama dengan −𝜆2 , koefisien 𝑋 2 di sisi kiri. Dengan demikian dapat diperoleh: −𝜆2 = −𝑥1 − 𝑥2 − 𝑥3 𝒙𝟑 = 𝜆2 − 𝑥1 − 𝑥2 , dan kemudian untuk mendapatkan koordinat 𝑌 dari titik ketiga yang memotong kurva 𝐸 adalah:
𝑦3 = 𝜆𝑥3 + 𝑣 𝑦3 = 𝜆𝑥3 + 𝑦1 − 𝜆𝑥1 𝒚𝟑 = 𝜆(𝑥3 − 𝑥1 ) + 𝑦1
Akhirnya untuk mendapatkan 𝑃1 + 𝑃2 , refleksikan 𝑦3 terhadap sumbu 𝑋 yang berarti mengalikan koordinat 𝑌 dengan −1, −𝒚𝟑 = 𝜆(𝑥1 − 𝑥3 ) − 𝑦1 (Hoffstein, et al. 2008). 2.5.1. Kurva eliptik dalam finite field Untuk menerapkan teori kurva eliptik ke dalam kriptografi, hanya perlu melihat kurva eliptik di mana titik-titiknya memiliki koordinat dalam finite field 𝔽𝑝 . Secara sederhana, persamaan kurva eliptik dalam finite field 𝔽𝑝 dapat didefinisikan dalam bentuk: 𝐸: 𝑌 2 = 𝑋 3 + 𝐴𝑋 + 𝐵
Universitas Sumatera Utara
37
di mana 𝐴, 𝐵 ∈ 𝔽𝑝 harus memenuhi kondisi 4𝐴3 + 27𝐵2 ≠ 0, kemudian titik-titik pada 𝐸 dengan koordinatnya dalam 𝔽𝑝 , dapat dinotasikan sebagai 𝐸(𝔽𝑝 ) = {(𝑥, 𝑦) ∶ 𝑥, 𝑦 ϵ 𝔽𝑝 memenuhi 𝑦 2 = 𝑥 3 + 𝐴𝑥 + 𝐵} ∪ {𝒪}. Misalkan sebuah kurva eliptik 𝐸 ∶ 𝑌 2 = 𝑋 3 + 3𝑋 + 8 dalam finite field 𝔽13 . Titik-titik pada 𝐸(𝔽13 ) dapat ditemukan dengan menyubstitusikan semua kemungkinan nilai 𝑋 = 0, 1, 2, … , 12 dan melihat nilai 𝑋 mana yang sama dengan kuadrat dari 𝑋 3 + 3𝑋 + 8 (𝑚𝑜𝑑 13). Misalkan, untuk 𝑋 = 0, maka 𝑋 3 + 3𝑋 + 8 = (0)3 + 3(0) + 8 = 8, dan 𝑋 2 ≢ 8 (𝑚𝑜𝑑 13). Selanjutnya untuk 𝑋 = 1, maka 13 + 3(1) + 8 = 12 dan merupakan kuadrat modulo 13. Pada kenyataannya, nilai tersebut selalu memiliki dua akar kuadrat, yaitu: 52 ≡ 12 (𝑚𝑜𝑑 13) dan 82 ≡ 12 (𝑚𝑜𝑑 13). Hasilnya adalah dua titik (1, 5) dan (1, 8) pada 𝐸(𝔽13 ). Dan berikut adalah daftar seluruh titik pada 𝐸(𝔽13 ), 𝐸(𝔽13 ) = { 𝒪, (1, 5), (1, 8), (2, 3), (2, 10), (9, 6), (9, 7), (12, 2), (12, 11) }. Jadi, 𝐸(𝔽13 ) terdiri dari 9 buah titik atau #𝐸(𝔽13 ) = 9. Selanjutnya, gunakan algoritma penambahan dua buah titik untuk menambahkan titik 𝑃 = (9, 7) dan 𝑄 = (1, 8) pada 𝐸(𝔽13 ). Langkah pertama adalah hitung kemiringan garis, 𝜆. Karena 𝑃1 ≠ 𝑃2 , maka: 𝜆=
𝑦2 − 𝑦1 8 − 7 1 1 = = ≡ (𝑚𝑜𝑑 13) ≡ 8 (𝑚𝑜𝑑 13) 𝑥2 − 𝑥1 1 − 9 −8 5
Selanjutnya hitung: 𝑣 = 𝑦1 − 𝜆𝑥1 = 7 − 8(9) = −65 ≡ 0 (𝑚𝑜𝑑 13). Terakhir hitung 𝑥3 dan 𝑦3 yang merupakan koordinat dari titik hasil penambahan 𝑃 dan 𝑄, 𝑥3 = 𝜆2 − 𝑥1 − 𝑥2 = 64 − 9 − 1 = 54 ≡ 2 (𝑚𝑜𝑑 13) −𝑦3 = −(𝜆𝑥3 + 𝑣) = −(8(2) + 0) = −16 ≡ 10 (𝑚𝑜𝑑 13) Jadi, 𝑃 + 𝑄 = (1, 8) + (9, 7) = (2, 10) dalam 𝐸(𝔽13 ). Demikian pula, jika ingin menambahkan 𝑃 = (9, 7) ke dirinya sendiri. Karena 𝑃1 = 𝑃2 , maka hitung 𝜆 dengan: 𝜆=
3𝑥12 + 𝐴 3(92 ) + 3 246 = = ≡ 1 (𝑚𝑜𝑑 13) 2(7) 14 2𝑦1
kemudian hitung: 𝑥3 = 𝜆2 − 𝑥1 − 𝑥2 = 1 − 9 − 9 = −17 ≡ 9 (𝑚𝑜𝑑 13) −𝑦3 = 𝜆(𝑥1 − 𝑥3 ) − 𝑦1 = (9 − 9) ∙ 1 − 7 = −7 ≡ 6 (𝑚𝑜𝑑 13). Jadi, 𝑃 + 𝑃 = (9, 7) + (9, 7) = (9, 6) dalam 𝐸(𝔽13 ).
Universitas Sumatera Utara
38
Hal ini jelas bahwa himpunan titik-titik 𝐸(𝔽𝑝 ) adalah himpunan berhingga, karena banyaknya kemungkinan untuk koordinat 𝑋 dan 𝑌 juga berhingga. Lebih tepatnya ada kemungkinan 𝑝 untuk 𝑋, dan untuk setiap 𝑋 dalam persamaan 𝑌 2 = 𝑋 3 + 𝐴𝑋 + 𝐵 menghasilkan paling banyak dua kemungkinan nilai untuk 𝑌. Penambahan dengan titik 𝒪 menunjukkan bahwa ⋕ 𝐸(𝔽𝑝 ) memiliki paling banyak 2𝑝 + 1 titik. Namun, perkiraan ini jauh lebih besar dari ukuran sebenarnya. (Hoffstein, et al. 2008) 2.5.2. Masalah logaritma diskrit kurva eliptik Kriptografi kurva eliptik pertama kali dikembangkan oleh Neal Koblitz dan Victor S. Miller pada tahun 1985. Untuk menciptakan sistem kriptografi berdasarkan masalah logaritma diskrit dalam finite field 𝔽∗ 𝑝 , publikasikan dua buah parameter 𝑔 dan ℎ, dan parameter rahasianya adalah pangkat 𝑥 yang memenuhi kongruensi ℎ ≡ 𝑔 𝑥 (𝑚𝑜𝑑 𝑝). Selanjutnya parameter 𝑔 dan ℎ dapat dipandang sebagai anggota dari group 𝔽∗ 𝑝 , maka parameter rahasia 𝑥 dapat ditemukan sedemikian rupa sehingga ℎ ≡ 𝑔 × 𝑔 × 𝑔 × … × 𝑔 (𝑚𝑜𝑑 𝑝). 𝑥 kali
Dengan kata lain, untuk mendapatkan ℎ perlu menentukan berapa kali 𝑔 harus dikalikan. Dengan formulasi ini, jelas bahwa Alice dapat melakukan hal yang sama dengan titik-titik pada group 𝐸(𝔽𝑝 ) dari sebuah kurva elips 𝐸 dalam finite field 𝔽𝑝 . Alice memilih dan memublikasikan dua buah titik 𝑃 dan 𝑄 dalam 𝐸(𝔽𝑝 ), dan parameter rahasianya adalah sebuah bilangan bulat 𝑛 yang membuat 𝑄 = 𝑃 + 𝑃 + 𝑃 + ⋯ + 𝑃 = 𝑛𝑃. 𝑛 kali penambahan
Kemudian Eve perlu mencari tahu berapa kali titik 𝑃 harus ditambahkan dengan dirinya sendiri untuk mendapatkan 𝑄. Meskipun "hukum penambahan" pada kurva eliptik secara konvensional ditulis dengan tanda tambah, penambahan pada 𝐸 sebenarnya operasi yang sangat rumit, sehingga masalah kurva eliptik ini dapat dianalogikan dengan masalah logaritma diskrit yang mungkin cukup sulit untuk dipecahkan. Definisi 2.11. Misalkan 𝐸 adalah kurva eliptik dalam finite field 𝔽𝑝 , lalu 𝑃 dan 𝑄 menjadi titik-titik di 𝐸(𝔽𝑝 ). Masalah logaritma diskrit kurva eliptik adalah masalah
Universitas Sumatera Utara
39
menemukan bilangan bulat 𝑛 sedemikian rupa sehingga 𝑄 = 𝑛𝑃. Dengan menganalogikan masalah logaritma diskrit untuk 𝔽∗ 𝑝 , bilangan bulat 𝑛 dapat dinotasikan sebagai 𝑛 = 𝑙𝑜𝑔𝑃 (𝑄), dan 𝑛 dapat disebut logaritma diskrit eliptik 𝑄 terhadap 𝑃 (Hoffstein, et al. 2008). Definisi 𝑙𝑜𝑔𝑃 (𝑄) tidak cukup tepat. Kesulitan pertama adalah bahwa mungkin ada titik-titik 𝑃, 𝑄 ∈ 𝐸(𝔽𝑝 ), tetapi 𝑄 bukan kelipatan dari 𝑃. Dalam kasus ini, 𝑙𝑜𝑔𝑃 (𝑄) tidak terdefinisi. Namun untuk tujuan kriptografi, 𝑙𝑜𝑔𝑃 (𝑄) ada dan nilainya adalah parameter rahasia milik Alice. Kesulitan kedua adalah bahwa jika ada suatu nilai 𝑛 yang memenuhi 𝑄 = 𝑛𝑃, maka ada banyak nilai untuk 𝑛. Untuk memahaminya, pertama perhatikan bahwa ada bilangan bulat positif 𝑠 sehingga 𝑠𝑃 = 𝒪. Karena 𝐸(𝔽𝑝 ) adalah berhingga, maka titik 𝑃, 2𝑃, 3𝑃, … seluruhnya tidak bisa menjadi berbeda. Oleh karena itu, ada bilangan bulat 𝑘 > 𝑗, sehingga 𝑘𝑃 = 𝑗𝑃 dan 𝑠 = 𝑘 − 𝑗. Bilangan terkecil di mana 𝑠 ≥ 1 disebut order dari 𝑃. Jadi, jika 𝑠 adalah order dari 𝑃 dan jika 𝑛0 adalah bilangan bulat apapun di mana 𝑄 = 𝑛0 𝑃, maka solusi 𝑄 = 𝑛𝑃 adalah bilangan bulat 𝑛 = 𝑛0 + 𝑖 ∙ 𝑠 dengan 𝑖 ∈ ℤ. Ini berarti bahwa nilai 𝑙𝑜𝑔𝑃 (𝑄) adalah anggota ℤ/𝑠ℤ, yaitu 𝑙𝑜𝑔𝑃 (𝑄) yang merupakan bilangan bulat modulo 𝑠, di mana 𝑠 adalah order dari 𝑃. Keuntungan dari mendefinisikan nilai-nilai menjadi ℤ/𝑠ℤ adalah bahwa logaritma diskrit eliptik akan memenuhi 𝑙𝑜𝑔𝑃 (𝑄1 + 𝑄2 ) = 𝑙𝑜𝑔𝑃 (𝑄1 ) + 𝑙𝑜𝑔𝑃 (𝑄2 )
untuk semua 𝑄1 , 𝑄2 ∈ 𝐸(𝔽𝑝 ).
2.6. Elliptic Curve ElGamal Public Key Cryptosystem Sangat mudah untuk membuat analogi langsung sistem kriptografi kunci publik ElGamal terhadap kriptografi kurva eliptik. Secara singkat, Alice dan Bob setuju untuk menggunakan bilangan prima tertentu 𝑝, kurva eliptik 𝐸, dan titik 𝑃 ∈ 𝐸(𝔽𝑝 ). Alice memilih pengali rahasia 𝑛𝐴 dan memublikasikan titik 𝑄𝐴 = 𝑛𝐴 𝑃 sebagai kunci publiknya. Pesan rahasia Bob adalah titik 𝑀 ∈ 𝐸(𝔽𝑝 ), dia memilih sebuah bilangan bulat 𝑘 untuk dijadikan kunci ephemeral dan menghitung 𝐶1 = 𝑘𝑃 dan 𝐶2 = 𝑀 + 𝑘𝑄𝐴 . Bob mengirimkan dua titik (𝐶1 , 𝐶2 ) ke Alice, yang akan digunakan untuk menghitung 𝐶2 − 𝑛𝐴 𝐶1 = (𝑀 + 𝑘𝑄𝐴 ) − 𝑛𝐴 (𝑘𝑃) = 𝑀 + 𝑘(𝑛𝐴 𝑃) − 𝑛𝐴 (𝑘𝑃) = 𝑀 dan mendapatkan kembali pesan rahasia.
Universitas Sumatera Utara
40
Pembuatan Parameter Publik Bangkitkan sebuah bilangan prima 𝒑 yang besar. Bangkitkan sebuah persamaan kurva eliptik 𝑬 dalam 𝔽𝒑 . Pilih sebuah titik 𝑷 ∈ 𝑬(𝔽𝒑 ).
Bob
Alice
Pilih sebuah kunci rahasia 𝒏𝑨 .
Meminta kunci publik
Hitung
𝑸𝑨 = 𝒏𝑨 𝑷 ∈ 𝑬(𝔽𝒑 ).
Kirim kunci publik 𝑸𝑨
Pilih plaintext 𝑴 ∈ 𝑬(𝔽𝒑 ).
Pilih sebuah kunci ephemeral 𝒌.
Gunakan kunci publik 𝑸𝑨 dari Alice untuk menghitung: 𝑪𝟏 = 𝒌𝑷 ∈ 𝑬(𝔽𝒑 ) 𝑪𝟐 = 𝑴 + 𝒌𝑸𝑨 ∈ 𝑬(𝔽𝒑 ). Hitung 𝑪𝟐 − 𝒏𝑨 𝑪𝟏 ∈ 𝑬(𝔽𝒑 ) untuk mendapatkan pesan 𝑴.
Kirim cipher 𝑪𝟏 dan 𝑪𝟐
Gambar 2.7: Sistem kriptografi kunci publik ElGamal kurva eliptik.
Universitas Sumatera Utara