<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Cryptography on kenji.blog</title><link>http://kenji.blog/id/categories/cryptography/</link><description>Recent content in Cryptography on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>id</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 22:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/id/categories/cryptography/index.xml" rel="self" type="application/rss+xml"/><item><title>Dasar dan Implementasi Kriptografi Menggunakan Teorema Kecil Fermat</title><link>http://kenji.blog/id/p/fermats-little-theorem-cryptography-implementation/</link><pubDate>Fri, 11 Sep 2026 22:00:00 +0900</pubDate><guid>http://kenji.blog/id/p/fermats-little-theorem-cryptography-implementation/</guid><description>&lt;img src="http://kenji.blog/p/fermats-little-theorem-cryptography-implementation/img/eyecatch.jpg" alt="Featured image of post Dasar dan Implementasi Kriptografi Menggunakan Teorema Kecil Fermat" />&lt;h2 id="1-pendahuluan-misteri-matematika-yang-mendukung-kriptografi-modern">1. Pendahuluan: Misteri Matematika yang Mendukung Kriptografi Modern
&lt;/h2>&lt;p>Dalam masyarakat digital modern, khususnya dalam komunikasi melalui internet, &amp;ldquo;kriptografi&amp;rdquo; (enkripsi) telah menjadi teknologi dasar yang sangat penting. Kemampuan kita untuk menjelajahi situs web dengan aman melalui HTTPS di peramban, melakukan transaksi keuangan melalui perbankan daring, dan bertukar pesan pribadi di aplikasi perpesanan, semuanya dimungkinkan karena adanya protokol kriptografi yang didukung oleh teori matematika tingkat tinggi yang bekerja di latar belakang. Di antaranya, &amp;ldquo;kriptografi kunci publik&amp;rdquo; memainkan peran yang sangat penting, dan perwakilan utamanya adalah &lt;strong>Kriptografi RSA&lt;/strong>.&lt;/p>
&lt;p>Keamanan dan keabsahan banyak algoritma kriptografi, termasuk kriptografi RSA, sangat bergantung pada teorema yang sangat indah dan kuat yang ditemukan oleh ahli matematika Prancis abad ke-17, Pierre de Fermat. Itulah &lt;strong>Teorema Kecil Fermat (Fermat&amp;rsquo;s Little Theorem)&lt;/strong>. Selanjutnya, Teorema Euler dari Leonhard Euler, yang merupakan generalisasi dari teorema ini, juga memainkan peran penting dalam teori kriptografi.&lt;/p>
&lt;p>Artikel ini akan membahas secara mendalam dari dasar bagaimana penemuan matematika murni berupa Teorema Kecil Fermat diterapkan pada teknologi kriptografi praktis modern, khususnya dalam &amp;ldquo;pengujian primalitas&amp;rdquo; (primality test) dan &amp;ldquo;kriptografi RSA&amp;rdquo;. Ini adalah panduan teknis yang sangat rinci yang mencakup pembuktian matematika, mekanisme enkripsi dan dekripsi, serta implementasi algoritma spesifik menggunakan C++ dan Python.&lt;/p>
&lt;hr>
&lt;h2 id="2-dasar-dasar-kongruensi-dan-aritmetika-modular">2. Dasar-dasar Kongruensi dan Aritmetika Modular
&lt;/h2>&lt;p>Untuk memahami Teorema Kecil Fermat, pertama-tama kita perlu membiasakan diri dengan konsep matematika yang disebut &amp;ldquo;aritmetika modular&amp;rdquo; (kekongruenan). Aritmetika modular adalah sistem perhitungan yang berfokus pada &amp;ldquo;sisa&amp;rdquo; ketika dibagi dengan bilangan tertentu yang tetap (disebut modulus). Karena perhitungannya mirip dengan tampilan jam (yang berputar kembali setiap 12 jam), ini sering juga disebut &amp;ldquo;matematika jam&amp;rdquo;.&lt;/p>
&lt;p>Ketika bilangan bulat $a$ dan $b$ memiliki sisa yang sama saat dibagi dengan bilangan bulat positif $n$, secara matematis ditulis sebagai berikut:&lt;/p>
$$
a \equiv b \pmod n
$$
&lt;p>Ini dibaca &amp;ldquo;$a$ dan $b$ kongruen dalam modulo $n$&amp;rdquo;. Misalnya, sisa dari 17 dibagi 5 adalah 2, dan sisa dari 12 dibagi 5 juga 2. Oleh karena itu, kita dapat menulisnya sebagai berikut:&lt;/p>
$$
17 \equiv 12 \pmod 5 \equiv 2 \pmod 5
$$
&lt;p>Dalam aritmetika modular, empat operasi aritmetika dasar (penjumlahan, pengurangan, perkalian) berlaku seperti biasa.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Penjumlahan&lt;/strong>: Jika $a \equiv b \pmod n$ dan $c \equiv d \pmod n$, maka $a + c \equiv b + d \pmod n$&lt;/li>
&lt;li>&lt;strong>Pengurangan&lt;/strong>: Jika $a \equiv b \pmod n$ dan $c \equiv d \pmod n$, maka $a - c \equiv b - d \pmod n$&lt;/li>
&lt;li>&lt;strong>Perkalian&lt;/strong>: Jika $a \equiv b \pmod n$ dan $c \equiv d \pmod n$, maka $a \times c \equiv b \times d \pmod n$&lt;/li>
&lt;li>&lt;strong>Perpangkatan&lt;/strong>: Jika $a \equiv b \pmod n$, maka untuk sembarang bilangan asli $k$, $a^k \equiv b^k \pmod n$&lt;/li>
&lt;/ol>
&lt;p>Namun, perlu berhati-hati mengenai &lt;strong>pembagian&lt;/strong>. Secara umum, meskipun $a \times c \equiv b \times c \pmod n$, kita tidak bisa begitu saja membagi kedua ruas dengan $c$ untuk mendapatkan $a \equiv b \pmod n$. Hal ini hanya berlaku jika $c$ dan $n$ saling prima (faktor persekutuan terbesarnya adalah 1). Konsep &amp;ldquo;invers modular&amp;rdquo; ini akan menjadi sangat penting dalam pembuatan kunci untuk kriptografi RSA yang akan dibahas nanti.&lt;/p>
&lt;hr>
&lt;h2 id="3-latar-belakang-matematika-dan-pembuktian-teorema-kecil-fermat">3. Latar Belakang Matematika dan Pembuktian Teorema Kecil Fermat
&lt;/h2>&lt;p>Setelah memahami dasar-dasar aritmetika modular, mari kita lihat Teorema Kecil Fermat yang menjadi topik utama.&lt;/p>
&lt;h3 id="31-definisi-teorema">3.1 Definisi Teorema
&lt;/h3>&lt;p>Teorema Kecil Fermat dirumuskan sebagai berikut:&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Teorema Kecil Fermat (Fermat&amp;rsquo;s Little Theorem)&lt;/strong>
Misalkan $p$ adalah bilangan prima dan $a$ adalah sembarang bilangan bulat yang bukan kelipatan $p$ (yaitu $a$ dan $p$ saling prima). Maka, persamaan kongruensi berikut berlaku:
&lt;/p>
$$ a^{p-1} \equiv 1 \pmod p $$
&lt;/blockquote>
&lt;p>Secara umum, ini juga sering direpresentasikan dengan menghilangkan syarat &amp;ldquo;$a$ bukan kelipatan $p$&amp;rdquo; sehingga berlaku untuk semua bilangan bulat $a$. Dalam hal ini, kedua ruas dikalikan dengan $a$ menjadi:&lt;/p>
$$
a^p \equiv a \pmod p
$$
&lt;h3 id="32-konfirmasi-dengan-contoh-spesifik">3.2 Konfirmasi dengan Contoh Spesifik
&lt;/h3>&lt;p>Mari kita periksa apakah teorema ini benar-benar berlaku menggunakan angka-angka spesifik.
Misalkan bilangan prima $p = 5$. Maka $p-1 = 4$. Kita pilih sembarang bilangan bulat $a$ yang bukan kelipatan $p$.&lt;/p>
&lt;ul>
&lt;li>Untuk $a = 2$: $2^{5-1} = 2^4 = 16$. $16 \div 5 = 3$ sisa $1$. Jadi $16 \equiv 1 \pmod 5$. (Berlaku)&lt;/li>
&lt;li>Untuk $a = 3$: $3^{5-1} = 3^4 = 81$. $81 \div 5 = 16$ sisa $1$. Jadi $81 \equiv 1 \pmod 5$. (Berlaku)&lt;/li>
&lt;li>Untuk $a = 4$: $4^{5-1} = 4^4 = 256$. $256 \div 5 = 51$ sisa $1$. Jadi $256 \equiv 1 \pmod 5$. (Berlaku)&lt;/li>
&lt;/ul>
&lt;p>Dengan cara ini, tidak peduli berapa nilai $a$ yang dipilih (asalkan bukan kelipatan 5), jika dipangkatkan 4 lalu dibagi 5, sisanya pasti 1. Terlihat seperti sulap, tetapi ini berasal dari sifat indah yang dimiliki bilangan prima.&lt;/p>
&lt;h3 id="33-pembuktian-matematika-dari-teorema">3.3 Pembuktian Matematika dari Teorema
&lt;/h3>&lt;p>Mengapa hal ini bisa terjadi? Di sini kita akan memperkenalkan pembuktian elegan menggunakan himpunan kelas residu.&lt;/p>
&lt;p>Pertimbangkan himpunan $S = \{1, 2, 3, \dots, p-1\}$. Ini adalah elemen perwakilan dari bilangan bulat yang memiliki sisa $1$ hingga $p-1$ jika dibagi dengan $p$.
Sekarang, pertimbangkan himpunan baru $T$ di mana setiap elemen dikalikan dengan bilangan bulat $a$ yang saling prima dengan $p$.
&lt;/p>
$$ T = \{1a, 2a, 3a, \dots, (p-1)a\} $$
&lt;p>Mari kita pertimbangkan sisa dari setiap elemen di himpunan $T$ ketika dibagi dengan $p$. Hebatnya, meskipun urutannya mungkin berubah, himpunan sisa-sisa ini persis sama dengan himpunan elemen asli $S$.
Mengapa:&lt;/p>
&lt;ol>
&lt;li>Tidak ada elemen di $T$ yang menjadi kelipatan $p$ (karena baik $a$ maupun elemen aslinya bukan kelipatan $p$).&lt;/li>
&lt;li>Tidak ada dua elemen berbeda di $T$ yang kongruen modulo $p$. Jika $ia \equiv ja \pmod p$ ($i \neq j$), karena $a$ dan $p$ saling prima, kita dapat membagi kedua ruas dengan $a$, sehingga didapat $i \equiv j \pmod p$ yang mana ini adalah kontradiksi.&lt;/li>
&lt;/ol>
&lt;p>Oleh karena itu, hasil kali semua elemen di $S$ dan hasil kali semua elemen di $T$ akan kongruen dalam modulo $p$.&lt;/p>
$$
(1a) \times (2a) \times \dots \times ((p-1)a) \equiv 1 \times 2 \times \dots \times (p-1) \pmod p
$$
&lt;p>Jika kita menyederhanakan ruas kiri, karena terdapat $a$ sebanyak $p-1$ buah,&lt;/p>
$$
a^{p-1} \cdot (p-1)! \equiv (p-1)! \pmod p
$$
&lt;p>Karena $(p-1)!$ saling prima dengan $p$, kita dapat membagi kedua ruas dengan $(p-1)!$, dan pada akhirnya menghasilkan teorema berikut.&lt;/p>
$$
a^{p-1} \equiv 1 \pmod p
$$
&lt;p>Inilah pembuktian Teorema Kecil Fermat.&lt;/p>
&lt;hr>
&lt;h2 id="4-fungsi-totient-euler-dan-teorema-euler">4. Fungsi Totient Euler dan Teorema Euler
&lt;/h2>&lt;p>Teorema Kecil Fermat adalah teorema tentang &amp;ldquo;bilangan prima $p$&amp;rdquo;, namun Leonhard Euler menggeneralisasinya menjadi berlaku untuk &amp;ldquo;sembarang bilangan bulat positif $n$&amp;rdquo;. Generalisasi ini sangat penting untuk memahami kriptografi RSA.&lt;/p>
&lt;h3 id="41-fungsi-totient-euler-phin">4.1 Fungsi Totient Euler $\phi(n)$
&lt;/h3>&lt;p>Fungsi Totient Euler (atau fungsi $\phi$ Euler) $\phi(n)$ adalah fungsi yang menyatakan &amp;ldquo;jumlah bilangan bulat dari $1$ hingga $n$ yang saling prima dengan $n$&amp;rdquo;.&lt;/p>
&lt;ul>
&lt;li>Untuk bilangan prima $p$, karena semua bilangan dari $1$ hingga $p-1$ saling prima dengan $p$, maka $\phi(p) = p - 1$.&lt;/li>
&lt;li>Untuk dua bilangan prima berbeda $p, q$, pada hasil kalinya $n = p \times q$, $\phi(n)$ dapat dicari dengan rumus yang sangat sederhana.
$$ \phi(p \times q) = \phi(p) \times \phi(q) = (p - 1)(q - 1) $$&lt;/li>
&lt;/ul>
&lt;p>Sifat ini menjadi logika inti dalam pembuatan kunci kriptografi RSA.&lt;/p>
&lt;h3 id="42-teorema-euler">4.2 Teorema Euler
&lt;/h3>&lt;p>Euler menggeneralisasi Teorema Kecil Fermat sebagai berikut:&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Teorema Euler (Euler&amp;rsquo;s Theorem)&lt;/strong>
Untuk bilangan bulat positif $n$ dan bilangan bulat $a$ yang saling prima dengannya, berlaku persamaan berikut:
&lt;/p>
$$ a^{\phi(n)} \equiv 1 \pmod n $$
&lt;/blockquote>
&lt;p>Jika $n$ adalah bilangan prima $p$, karena $\phi(p) = p - 1$, ini menjadi tepat sama dengan Teorema Kecil Fermat ($a^{p-1} \equiv 1 \pmod p$). Dengan kata lain, Teorema Kecil Fermat hanyalah kasus khusus dari Teorema Euler.&lt;/p>
&lt;hr>
&lt;h2 id="5-menemukan-bilangan-prima-raksasa-uji-primalitas-fermat">5. Menemukan Bilangan Prima Raksasa: Uji Primalitas Fermat
&lt;/h2>&lt;p>Dalam teknologi kriptografi (seperti RSA dan pertukaran kunci Diffie-Hellman), kita perlu menemukan &amp;ldquo;bilangan prima raksasa&amp;rdquo; yang panjangnya bisa mencapai ratusan digit dengan sangat cepat. Namun, untuk menentukan apakah sebuah angka besar $N$ adalah bilangan prima, menggunakan metode &amp;ldquo;uji pembagian&amp;rdquo; yang mencoba membagi angka tersebut dengan semua bilangan dari $2$ hingga $\sqrt{N}$ akan memakan waktu selama umur alam semesta.&lt;/p>
&lt;p>Oleh karena itu, muncul &amp;ldquo;metode uji primalitas probabilistik&amp;rdquo; yang memanfaatkan Teorema Kecil Fermat, yaitu &lt;strong>Uji Fermat (Fermat Primality Test)&lt;/strong>.&lt;/p>
&lt;h3 id="51-apa-itu-uji-primalitas-probabilistik">5.1 Apa itu Uji Primalitas Probabilistik?
&lt;/h3>&lt;p>Menurut Teorema Kecil Fermat, jika $p$ adalah bilangan prima, maka untuk sembarang $a$ ($1 &lt; a &lt; p$), $a^{p-1} \equiv 1 \pmod p$ pasti berlaku.
Berdasarkan kontraposisinya, kita dapat menyatakan bahwa &amp;ldquo;jika untuk suatu $a$ berlaku $a^{p-1} \not\equiv 1 \pmod p$, maka $p$ &lt;strong>pasti bukan bilangan prima (merupakan bilangan komposit)&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;p>Dengan demikian, jika kita ingin menguji apakah $N$ adalah bilangan prima, kita memilih beberapa $a$ secara acak, menghitung $a^{N-1} \pmod N$, dan memeriksa apakah hasilnya $1$. Jika setidaknya satu kali menghasilkan selain $1$, maka dipastikan $N$ adalah bilangan komposit. Jika hasilnya selalu $1$ tak peduli berapa kali kita mencoba, kita dapat menyimpulkan dengan probabilitas tinggi bahwa $N$ &amp;ldquo;kemungkinan besar adalah bilangan prima&amp;rdquo;.&lt;/p>
&lt;h3 id="52-penjelasan-algoritma-dan-diagram-alur">5.2 Penjelasan Algoritma dan Diagram Alur
&lt;/h3>&lt;p>Algoritma Uji Fermat adalah sebagai berikut:&lt;/p>
&lt;div class="mermaid">flowchart TD
Start["Mulai"] --> Input["Masukkan angka yang akan diuji p dan jumlah uji coba k"]
Input --> LoopStart["Looping dari i = 0 hingga k-1"]
LoopStart --> Condition{"i &lt; k ?"}
Condition -- "Ya" --> RandomA["Pilih bilangan acak a dalam rentang 1 &lt; a &lt; p-1"]
RandomA --> Calc["Hitung eksponensiasi modular a^(p-1) mod p"]
Calc --> CheckPrime{"Apakah hasilnya 1?"}
CheckPrime -- "Tidak" --> ReturnComposite["p adalah bilangan komposit (pasti)"]
CheckPrime -- "Ya" --> Increment["Tingkatkan nilai i"]
Increment --> Condition
Condition -- "Tidak" --> ReturnPrime["p kemungkinan besar bilangan prima (probabilistik)"]
ReturnComposite --> End["Selesai"]
ReturnPrime --> End&lt;/div>
&lt;h3 id="53-perangkap-bilangan-carmichael-bilangan-prima-semu">5.3 Perangkap Bilangan Carmichael (Bilangan Prima Semu)
&lt;/h3>&lt;p>Meskipun Uji Fermat sangat cepat, ada kelemahan fatal. Terdapat bilangan komposit bagaikan iblis yang tetap memenuhi $a^{N-1} \equiv 1 \pmod N$ untuk semua nilai $a$. Angka ini disebut &lt;strong>Bilangan Carmichael (Carmichael numbers)&lt;/strong>. Bilangan Carmichael terkecil adalah $561$ ($3 \times 11 \times 17$).&lt;/p>
&lt;p>Karena adanya bilangan Carmichael, kita tidak bisa melakukan uji primalitas yang mutlak hanya dengan Uji Fermat murni. Oleh karena itu, dalam sistem kriptografi nyata (seperti OpenSSL), standar yang digunakan adalah modifikasi dari Uji Fermat, yaitu &lt;strong>Uji Primalitas Miller-Rabin&lt;/strong>. Uji Miller-Rabin mampu mendeteksi bilangan Carmichael sehingga dapat menekan probabilitas kesalahan identifikasi hingga mendekati nol secara praktis.&lt;/p>
&lt;h3 id="54-eksponensiasi-modular-cepat-metode-penguadratan-berulang">5.4 Eksponensiasi Modular Cepat (Metode Penguadratan Berulang)
&lt;/h3>&lt;p>Dalam algoritma uji primalitas, kita perlu menghitung $a^{N-1} \pmod N$. Jika $N$ sangat besar, jumlah digit $a^{N-1}$ akan menjadi angka astronomis yang tidak muat dalam memori komputer.
Solusi untuk masalah ini adalah &lt;strong>Metode Penguadratan Berulang (Exponentiation by Squaring)&lt;/strong> atau operasi eksponensiasi modular. Dengan mengambil sisa (mod N) pada setiap langkah perhitungan, nilainya selalu dijaga lebih kecil dari $N$, sehingga perhitungan dapat diselesaikan dengan sangat cepat (kompleksitas waktu $O(\log N)$).&lt;/p>
&lt;hr>
&lt;h2 id="6-implementasi-uji-primalitas-dan-eksponensiasi-modular">6. Implementasi Uji Primalitas dan Eksponensiasi Modular
&lt;/h2>&lt;p>Sekarang mari kita coba mengimplementasikan Uji Primalitas Fermat dan metode penguadratan berulang dalam C++ dan Python.&lt;/p>
&lt;h3 id="61-implementasi-dengan-c">6.1 Implementasi dengan C++
&lt;/h3>&lt;p>Di C++, tipe integer standar mudah mengalami overflow, sehingga pustaka integer presisi ganda (seperti GMP) diperlukan untuk menangani angka besar. Namun di sini, untuk memahami algoritmanya, kita akan menunjukkannya dalam batas integer 64-bit (&lt;code>unsigned long long&lt;/code>).&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;iostream&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;random&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">using&lt;/span> &lt;span class="k">namespace&lt;/span> &lt;span class="n">std&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Eksponensiasi modular cepat (a^b mod m) - Metode penguadratan berulang
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="nf">power_mod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Jika bit terendah dari b adalah 1, kalikan hasilnya dengan a
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">__int128&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">result&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// Ekspansi ke 128-bit untuk mencegah overflow
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Kuadratkan a
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">__int128&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="n">a&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">m&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Geser b ke kanan (bagi dua)
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">/=&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">result&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">// Uji Primalitas Fermat
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="kt">bool&lt;/span> &lt;span class="nf">fermat_is_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="kt">int&lt;/span> &lt;span class="n">iterations&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">random_device&lt;/span> &lt;span class="n">rd&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">mt19937_64&lt;/span> &lt;span class="n">gen&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">rd&lt;/span>&lt;span class="p">());&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">uniform_int_distribution&lt;/span>&lt;span class="o">&amp;lt;&lt;/span>&lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span>&lt;span class="o">&amp;gt;&lt;/span> &lt;span class="n">dis&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="n">iterations&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="o">++&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">dis&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">gen&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1">// Jika a^(p-1) mod p bukan 1, maka itu bilangan komposit
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">power_mod&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">true&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// Kemungkinan besar prima
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">unsigned&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="kt">long&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">1000000007&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="c1">// Bilangan prima yang diketahui
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1">&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">fermat_is_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; is probably prime.&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cout&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="s">&amp;#34; is composite.&amp;#34;&lt;/span> &lt;span class="o">&amp;lt;&amp;lt;&lt;/span> &lt;span class="n">endl&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="62-implementasi-dengan-python">6.2 Implementasi dengan Python
&lt;/h3>&lt;p>Tipe integer standar pada Python mendukung presisi ganda, jadi kita tidak perlu khawatir akan terjadinya overflow. Selain itu, fungsi bawaan Python &lt;code>pow(a, b, m)&lt;/code> secara internal menggunakan metode penguadratan berulang sehingga sangat cepat.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">random&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">fermat_is_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">iterations&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">5&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> Uji primalitas probabilistik menggunakan Uji Primalitas Fermat
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">False&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">True&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">False&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">_&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">iterations&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Pilih angka acak a antara 2 hingga p-2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">a&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Hitung a^(p-1) mod p. Fungsi bawaan pow sangat cepat.&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">False&lt;/span> &lt;span class="c1"># Pasti komposit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="kc">True&lt;/span> &lt;span class="c1"># Kemungkinan besar prima&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Uji Coba&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">number_to_test&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">104729&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="n">fermat_is_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">number_to_test&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">10&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">number_to_test&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> kemungkinan besar adalah bilangan prima.&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">number_to_test&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> adalah bilangan komposit.&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="7-penerapan-pada-kriptografi-rsa-tempat-fermat-dan-euler-membuahkan-hasil">7. Penerapan pada Kriptografi RSA: Tempat Fermat dan Euler Membuahkan Hasil
&lt;/h2>&lt;p>Penerapan paling hebat dari Teorema Kecil Fermat (dan Teorema Euler) adalah &lt;strong>Kriptografi RSA&lt;/strong>, yang dikembangkan pada tahun 1977 oleh Rivest, Shamir, dan Adleman.
Kriptografi RSA adalah sistem &amp;ldquo;kriptografi kunci publik&amp;rdquo; yang revolusioner, di mana kunci untuk mengenkripsi (kunci publik) dipublikasikan ke seluruh dunia, sementara kunci untuk mendekripsi (kunci privat) hanya diketahui oleh penerima.&lt;/p>
&lt;p>Asimetri ini didasarkan pada keamanan komputasional bahwa &amp;ldquo;memfaktorkan bilangan komposit raksasa menjadi faktor primanya adalah hal yang sangat sulit&amp;rdquo;.&lt;/p>
&lt;h3 id="71-mekanisme-kriptografi-rsa-pembuatan-kunci-enkripsi-dekripsi">7.1 Mekanisme Kriptografi RSA (Pembuatan Kunci, Enkripsi, Dekripsi)
&lt;/h3>&lt;p>Mari kita periksa keseluruhan alur komunikasi pada kriptografi RSA menggunakan diagram sekuens Mermaid.&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant Alice["Alice (Penerima)"]
participant Bob["Bob (Pengirim)"]
Alice->>Alice: "Hasilkan bilangan prima raksasa p, q"
Alice->>Alice: "Hitung N = p * q, φ(N) = (p-1)(q-1)"
Alice->>Alice: "Hitung kunci publik e dan kunci privat d (e*d ≡ 1 mod φ(N))"
Alice->>Bob: "Kirim kunci publik (N, e)"
Note over Bob: "Siapkan teks terang M (M &lt; N)"
Bob->>Bob: "Hitung teks sandi C = M^e mod N"
Bob->>Alice: "Kirim teks sandi C"
Alice->>Alice: "Dekripsi dengan menghitung teks terang M = C^d mod N"&lt;/div>
&lt;p>Berikut adalah penjelasan langkah-langkah detail secara matematis.&lt;/p>
&lt;h4 id="langkah-1-pembuatan-kunci-tugas-alice-sebagai-penerima">Langkah 1: Pembuatan Kunci (Tugas Alice sebagai Penerima)
&lt;/h4>&lt;ol>
&lt;li>Hasilkan secara acak dua bilangan prima raksasa $p$ dan $q$ (di sini metode uji primalitas sebelumnya digunakan).&lt;/li>
&lt;li>Hitung hasil kalinya, $N = p \times q$. Nilai $N$ ini akan dipublikasikan.&lt;/li>
&lt;li>Gunakan Fungsi Totient Euler untuk menghitung $\phi(N) = (p-1)(q-1)$.&lt;/li>
&lt;li>Pilih bilangan bulat $e$ (eksponen publik) yang saling prima dengan $\phi(N)$ (sering kali $e = 65537$ digunakan).&lt;/li>
&lt;li>Hitung invers modular $d$ (eksponen privat) dari $e$. Dengan kata lain, temukan $d$ yang memenuhi:
$$ e \cdot d \equiv 1 \pmod{\phi(N)} $$
Perhitungan ini menggunakan &lt;strong>Algoritma Euclidean Diperluas&lt;/strong> (Extended Euclidean algorithm).&lt;/li>
&lt;/ol>
&lt;p>Sekarang, &lt;strong>Kunci Publiknya adalah $(N, e)$&lt;/strong>, dan &lt;strong>Kunci Privatnya adalah $(N, d)$&lt;/strong>. ($p, q, \phi(N)$ harus segera dimusnahkan atau disembunyikan dengan ketat).&lt;/p>
&lt;h4 id="langkah-2-enkripsi-tugas-bob-sebagai-pengirim">Langkah 2: Enkripsi (Tugas Bob sebagai Pengirim)
&lt;/h4>&lt;p>Misalkan Bob ingin mengirim pesan $M$ ke Alice ($M$ adalah angka hasil konversi karakter, dan $0 \le M &lt; N$).
Bob menggunakan kunci publik Alice $(N, e)$ untuk membuat teks sandi $C$ dengan perhitungan berikut.&lt;/p>
$$
C \equiv M^e \pmod N
$$
&lt;p>Bob kemudian mengirimkan $C$ ini kepada Alice melalui jaringan.&lt;/p>
&lt;h4 id="langkah-3-dekripsi-tugas-alice-sebagai-penerima">Langkah 3: Dekripsi (Tugas Alice sebagai Penerima)
&lt;/h4>&lt;p>Setelah menerima teks sandi $C$, Alice yang merupakan satu-satunya orang yang mengetahui kunci privat $d$, melakukan perhitungan berikut.&lt;/p>
$$
M' \equiv C^d \pmod N
$$
&lt;p>Menariknya, hasil perhitungan $M'$ ini persis sama dengan pesan asli $M$.&lt;/p>
&lt;h3 id="72-mengapa-dapat-didekripsi-pembuktian-matematika">7.2 Mengapa Dapat Didekripsi? (Pembuktian Matematika)
&lt;/h3>&lt;p>Di sinilah nilai sebenarnya dari Teorema Kecil Fermat (Teorema Euler) terlihat. Mengapa $C^d \pmod N$ bisa kembali menjadi $M$?&lt;/p>
&lt;p>Mari kita jabarkan rumus dekripsinya.
Karena $C \equiv M^e \pmod N$, maka:
&lt;/p>
$$ C^d \equiv (M^e)^d \equiv M^{ed} \pmod N $$
&lt;p>Pada langkah pembuatan kunci, kita memilih $d$ sedemikian rupa sehingga $e \cdot d \equiv 1 \pmod{\phi(N)}$. Ini berarti bahwa ada suatu bilangan bulat $k$ sehingga dapat ditulis sebagai berikut:
&lt;/p>
$$ e \cdot d = 1 + k \cdot \phi(N) $$
&lt;p>Substitusikan ini ke dalam persamaan sebelumnya.
&lt;/p>
$$ M^{ed} = M^{1 + k \cdot \phi(N)} = M \cdot M^{k \cdot \phi(N)} = M \cdot (M^{\phi(N)})^k \pmod N $$
&lt;p>Di sini &lt;strong>Teorema Euler&lt;/strong> ($M^{\phi(N)} \equiv 1 \pmod N$) berperan. (&lt;em>Secara ketat, $M$ dan $N$ harus saling prima, tetapi dalam RSA, probabilitas $M$ dan $N$ tidak saling prima sangatlah kecil secara astronomis, dan menggunakan Teorema Sisa Tiongkok (Chinese Remainder Theorem) dapat dibuktikan bahwa ini tetap berlaku meskipun tidak saling prima&lt;/em>).&lt;/p>
&lt;p>Dengan menerapkan Teorema Euler, karena $M^{\phi(N)} \equiv 1$, maka:
&lt;/p>
$$ M \cdot (1)^k \equiv M \pmod N $$
&lt;p>Luar biasa, $M$ berhasil dipulihkan! Sifat angka yang ditemukan oleh Fermat dan Euler berabad-abad lalu mampu memberikan jaminan kerahasiaan komunikasi digital modern secara sempurna.&lt;/p>
&lt;hr>
&lt;h2 id="8-implementasi-mainan-kriptografi-rsa-python">8. Implementasi Mainan Kriptografi RSA (Python)
&lt;/h2>&lt;p>Karena hanya belajar teori rasanya belum lengkap, mari kita coba mengimplementasikan proses pembuatan kunci, enkripsi, dan dekripsi RSA secara langsung menggunakan Python. Ini hanyalah &amp;ldquo;implementasi mainan (toy)&amp;rdquo; untuk tujuan edukasi, tetapi matematika yang digunakan sama persis dengan aslinya.&lt;/p>
&lt;p>Kita juga akan menyertakan implementasi &amp;ldquo;Algoritma Euclidean Diperluas&amp;rdquo; untuk mencari invers modular $d$.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;span class="lnt">40
&lt;/span>&lt;span class="lnt">41
&lt;/span>&lt;span class="lnt">42
&lt;/span>&lt;span class="lnt">43
&lt;/span>&lt;span class="lnt">44
&lt;/span>&lt;span class="lnt">45
&lt;/span>&lt;span class="lnt">46
&lt;/span>&lt;span class="lnt">47
&lt;/span>&lt;span class="lnt">48
&lt;/span>&lt;span class="lnt">49
&lt;/span>&lt;span class="lnt">50
&lt;/span>&lt;span class="lnt">51
&lt;/span>&lt;span class="lnt">52
&lt;/span>&lt;span class="lnt">53
&lt;/span>&lt;span class="lnt">54
&lt;/span>&lt;span class="lnt">55
&lt;/span>&lt;span class="lnt">56
&lt;/span>&lt;span class="lnt">57
&lt;/span>&lt;span class="lnt">58
&lt;/span>&lt;span class="lnt">59
&lt;/span>&lt;span class="lnt">60
&lt;/span>&lt;span class="lnt">61
&lt;/span>&lt;span class="lnt">62
&lt;/span>&lt;span class="lnt">63
&lt;/span>&lt;span class="lnt">64
&lt;/span>&lt;span class="lnt">65
&lt;/span>&lt;span class="lnt">66
&lt;/span>&lt;span class="lnt">67
&lt;/span>&lt;span class="lnt">68
&lt;/span>&lt;span class="lnt">69
&lt;/span>&lt;span class="lnt">70
&lt;/span>&lt;span class="lnt">71
&lt;/span>&lt;span class="lnt">72
&lt;/span>&lt;span class="lnt">73
&lt;/span>&lt;span class="lnt">74
&lt;/span>&lt;span class="lnt">75
&lt;/span>&lt;span class="lnt">76
&lt;/span>&lt;span class="lnt">77
&lt;/span>&lt;span class="lnt">78
&lt;/span>&lt;span class="lnt">79
&lt;/span>&lt;span class="lnt">80
&lt;/span>&lt;span class="lnt">81
&lt;/span>&lt;span class="lnt">82
&lt;/span>&lt;span class="lnt">83
&lt;/span>&lt;span class="lnt">84
&lt;/span>&lt;span class="lnt">85
&lt;/span>&lt;span class="lnt">86
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">random&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Mencari Faktor Persekutuan Terbesar (FPB)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">b&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">a&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Algoritma Euclidean Diperluas (Mencari x, y untuk ax + by = gcd(a,b))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Digunakan untuk mencari d pada e*d ≡ 1 (mod φ(N))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">extended_gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">g&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">extended_gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">g&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span> &lt;span class="o">//&lt;/span> &lt;span class="n">a&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">mod_inverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">g&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">extended_gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">g&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">raise&lt;/span> &lt;span class="ne">Exception&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;Invers modular tidak ada&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">phi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Fungsi pembuat bilangan prima (Versi sederhana: membuat bilangan prima kecil)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">generate_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="kc">True&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">getrandbits&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Pemeriksaan sederhana sebagai pengganti Uji Fermat sebelumnya&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">&amp;gt;&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span> &lt;span class="ow">and&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">p&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">p&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Pembuatan Kunci RSA&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">generate_keypair&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">16&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">p&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">generate_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">generate_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Pastikan p dan q tidak sama&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">generate_prime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">phi&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># e umumnya menggunakan bilangan prima seperti 65537, tetapi di sini dipilih secara acak&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randrange&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="n">g&lt;/span> &lt;span class="o">!=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randrange&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">gcd&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Perhitungan kunci privat d&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">mod_inverse&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Kunci Publik (e, n), Kunci Privat (d, n)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="p">((&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">pk&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">plaintext&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">pk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Hitung plaintext^e mod n&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">cipher&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">char&lt;/span>&lt;span class="p">),&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">char&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">plaintext&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">cipher&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">decrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">sk&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">ciphertext&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">sk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Hitung cipher^d mod n, lalu ubah kembali menjadi karakter&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">plain&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="nb">chr&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">char&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="k">for&lt;/span> &lt;span class="n">char&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">ciphertext&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">join&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">plain&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Contoh Eksekusi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;__main__&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;--- Implementasi Mainan Kriptografi RSA ---&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">public_key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">private_key&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">generate_keypair&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">bits&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">12&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># Menggunakan bilangan prima 12-bit&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Kunci Publik (e, n): &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">public_key&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Kunci Privat (d, n): &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">private_key&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;Hello Math!&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s2">Pesan asli: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Enkripsi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">encrypted_msg&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">encrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">public_key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">message&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Teks Sandi: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">encrypted_msg&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Dekripsi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">decrypted_msg&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">decrypt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">private_key&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">encrypted_msg&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Pesan yang Didekripsi: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">decrypted_msg&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Jika Anda menjalankan kode ini, Anda dapat melihat array karakter diubah menjadi array angka asing (teks sandi), yang kemudian berhasil dikembalikan menjadi string aslinya menggunakan kunci privat.&lt;/p>
&lt;hr>
&lt;h2 id="9-penutup-titik-temu-keindahan-dan-kepraktisan-matematika">9. Penutup: Titik Temu Keindahan dan Kepraktisan Matematika
&lt;/h2>&lt;p>Pada abad ke-17 ketika Pierre de Fermat menemukan &amp;ldquo;Teorema Kecil&amp;rdquo; ini, tidak ada yang berpikir bahwa ini akan berguna untuk sesuatu. Fermat sendiri melakukan penelitian pada teori bilangan murni karena rasa ingin tahunya terhadap matematika.&lt;/p>
&lt;p>Namun, sekitar 300 tahun kemudian, pada era awal jaringan komputer di tahun 1970-an, Teorema Fermat dibangkitkan kembali secara dramatis sebagai teknologi kriptografi yang mutlak diperlukan untuk membangun protokol komunikasi yang aman. Teknologi uji primalitas yang didasarkan pada Teorema Kecil Fermat dan kriptografi RSA yang didasarkan pada Teorema Euler, benar-benar menjadi pilar yang menopang infrastruktur internet modern.&lt;/p>
&lt;p>Pesan LINE yang kita kirimkan tanpa berpikir setiap harinya, atau belanja yang kita lakukan di Amazon, semuanya menari di atas persamaan matematika yang indah dan sederhana: $a^{p-1} \equiv 1 \pmod p$. Teorema Kecil Fermat mengajarkan kita bahwa betapa pun abstraknya sebuah konsep matematika, suatu saat nanti ia pasti akan berguna bagi umat manusia.&lt;/p>
&lt;p>Dalam mempelajari pemrograman dan teori kriptografi, memahami struktur matematika yang menjadi dasarnya akan menjadi senjata yang ampuh untuk memahami secara mendalam cara kerja perpustakaan (library) perangkat lunak yang disajikan sebagai kotak hitam, dan untuk merancang sistem yang lebih aman.&lt;/p></description></item><item><title>Intuisi Matematis Kriptografi Berbasis Kisi (Lattice-based cryptography)</title><link>http://kenji.blog/id/p/lattice-based-cryptography-math-intuition/</link><pubDate>Fri, 11 Sep 2026 21:00:00 +0900</pubDate><guid>http://kenji.blog/id/p/lattice-based-cryptography-math-intuition/</guid><description>&lt;img src="http://kenji.blog/p/lattice-based-cryptography-math-intuition/img/eyecatch.jpg" alt="Featured image of post Intuisi Matematis Kriptografi Berbasis Kisi (Lattice-based cryptography)" />&lt;h1 id="1-pendahuluan-fajar-kriptografi-pasca-kuantum-pqc-dan-bangkitnya-kriptografi-berbasis-kisi">1. Pendahuluan: Fajar Kriptografi Pasca-Kuantum (PQC) dan Bangkitnya Kriptografi Berbasis Kisi
&lt;/h1>&lt;p>Infrastruktur digital masyarakat modern saat ini ditopang oleh teknologi kriptografi kunci publik seperti kriptografi RSA dan kriptografi kurva eliptik (ECC). Metode kriptografi ini mendasarkan keamanannya pada kesulitan matematis seperti &amp;ldquo;masalah faktorisasi bilangan bulat&amp;rdquo; dan &amp;ldquo;masalah logaritma diskrit&amp;rdquo;, yang diyakini tidak dapat dipecahkan secara efisien (membutuhkan waktu eksponensial) oleh komputer klasik konvensional.&lt;/p>
&lt;p>Namun, &amp;ldquo;Algoritma Shor&amp;rdquo; yang diterbitkan oleh Peter Shor pada tahun 1994, mengirimkan gelombang kejut ke dunia kriptografi. Algoritma ini secara matematis membuktikan bahwa ketika komputer kuantum skala besar terwujud, komputer tersebut akan dapat menyelesaikan masalah faktorisasi bilangan bulat dan masalah logaritma diskrit dalam waktu polinomial. Ini berarti bahwa kriptografi kunci publik yang digunakan secara luas saat ini akan dapat dipecahkan sepenuhnya di masa depan.&lt;/p>
&lt;p>Untuk melawan &amp;ldquo;Ancaman Kuantum (Quantum Threat)&amp;rdquo; ini, penelitian tentang metode kriptografi baru yang sulit dipecahkan bahkan menggunakan komputer kuantum telah menjadi kebutuhan mendesak. Bidang ini disebut &amp;ldquo;Kriptografi Pasca-Kuantum (Post-Quantum Cryptography: PQC)&amp;rdquo;.&lt;/p>
&lt;p>Ada beberapa kandidat kuat untuk PQC. Kriptografi berbasis hash, kriptografi berbasis kode, kriptografi polinomial multivariat, kriptografi isogeni, dan lain-lain dapat disebutkan, tetapi di antara semuanya, yang paling menarik perhatian saat ini dan menjadi pusat proses standardisasi PQC oleh NIST (Institut Standar dan Teknologi Nasional AS) adalah &amp;ldquo;Kriptografi berbasis kisi (Lattice-based cryptography)&amp;rdquo;. Dibandingkan dengan metode lain, kriptografi berbasis kisi memiliki fitur luar biasa bahwa kecepatan pemrosesan enkripsi dan dekripsi sangat cepat, dan juga memiliki bukti keamanan yang sangat kuat dalam teori kriptografi, yaitu reduksi dari &amp;ldquo;kompleksitas kasus terburuk (Worst-case complexity)&amp;rdquo; ke &amp;ldquo;kompleksitas kasus rata-rata (Average-case complexity)&amp;rdquo;.&lt;/p>
&lt;p>Dalam artikel ini, kita akan memulai dari definisi matematis &amp;ldquo;Kisi (Lattice)&amp;rdquo; yang menjadi dasar kriptografi berbasis kisi ini, dan membahas secara mendalam tentang masalah-masalah sulit di atas kisi seperti SVP (Masalah Vektor Terpendek) dan CVP (Masalah Vektor Terdekat), serta &amp;ldquo;Masalah LWE (Learning With Errors)&amp;rdquo; yang dapat dikatakan sebagai jantung dari kriptografi berbasis kisi modern, disertai dengan rumus, intuisi geometris, dan contoh numerik konkret.&lt;/p>
&lt;h1 id="2-definisi-matematis-dan-intuisi-geometris-dari-kisi-lattice">2. Definisi Matematis dan Intuisi Geometris dari Kisi (Lattice)
&lt;/h1>&lt;h2 id="21-ruang-vektor-dan-kisi">2.1 Ruang Vektor dan Kisi
&lt;/h2>&lt;p>Dalam matematika, &amp;ldquo;Kisi (Lattice)&amp;rdquo; adalah himpunan titik-titik diskrit yang tersusun secara teratur dalam ruang vektor real berdimensi-$n$ $\mathbb{R}^n$. Ini mirip dengan Ruang Vektor (Vector Space) yang dipelajari dalam aljabar linear, tetapi ada perbedaan krusial. Sementara ruang vektor adalah ruang kontinu yang direpresentasikan oleh kombinasi linear dari vektor-vektor basis dengan &amp;ldquo;koefisien bilangan real&amp;rdquo;, kisi adalah ruang diskrit yang direpresentasikan oleh kombinasi linear dari vektor-vektor basis dengan &amp;ldquo;koefisien bilangan bulat&amp;rdquo;.&lt;/p>
&lt;p>Mari kita berikan definisi matematis yang ketat. Pertimbangkan $n$ buah ($n \le m$) vektor linear independen $\mathbf{b}_1, \mathbf{b}_2, \dots, \mathbf{b}_n$ dalam ruang vektor real berdimensi-$m$ $\mathbb{R}^m$. Misalkan matriks yang memiliki vektor-vektor ini sebagai vektor kolom adalah $B = [\mathbf{b}_1, \mathbf{b}_2, \dots, \mathbf{b}_n] \in \mathbb{R}^{m \times n}$. Kita menyebut $B$ ini sebagai &amp;ldquo;Basis&amp;rdquo; dari kisi.&lt;/p>
&lt;p>Kisi $\mathcal{L}(B)$ yang dihasilkan oleh basis $B$ ini didefinisikan sebagai berikut:&lt;/p>
$$
\mathcal{L}(B) = \left\{ \sum_{i=1}^{n} x_i \mathbf{b}_i \mathrel{\bigg|} x_i \in \mathbb{Z} \right\} = \{ B \mathbf{x} \mid \mathbf{x} \in \mathbb{Z}^n \}
$$
&lt;p>Yang penting di sini adalah bahwa koefisien $x_i$ tidak dibatasi pada bilangan real $\mathbb{R}$, melainkan pada bilangan bulat $\mathbb{Z}$. Dengan ini, alih-alih titik kontinu tak terhingga yang ada di dalam ruang, terbentuklah &amp;ldquo;himpunan titik-titik diskrit&amp;rdquo; yang menyerupai persimpangan jaring yang disusun pada interval yang sama.&lt;/p>
&lt;h2 id="22-citra-geometris">2.2 Citra Geometris
&lt;/h2>&lt;p>Mari kita pertimbangkan contoh bidang 2 dimensi $\mathbb{R}^2$. Jika kita memilih $\mathbf{b}_1 = \begin{pmatrix} 1 \\ 0 \end{pmatrix}$ dan $\mathbf{b}_2 = \begin{pmatrix} 0 \\ 1 \end{pmatrix}$ sebagai vektor basis, kisi yang dihasilkan oleh keduanya akan menjadi himpunan semua koordinat bilangan bulat $(x, y) \in \mathbb{Z}^2$ pada bidang koordinat. Ini adalah &amp;ldquo;kisi persegi&amp;rdquo; yang paling sederhana.&lt;/p>
&lt;p>Namun, kisi tidak selalu ortogonal. Misalnya, jika kita mempertimbangkan basis $\mathbf{b}_1 = \begin{pmatrix} 2 \\ 1 \end{pmatrix}$ dan $\mathbf{b}_2 = \begin{pmatrix} 1 \\ 3 \end{pmatrix}$, titik-titik yang dihasilkan akan terlihat seperti persimpangan jaring yang miring.&lt;/p>
&lt;h2 id="23-ketidakunikan-basis-dan-transformasi-unimodular">2.3 Ketidakunikan Basis dan Transformasi Unimodular
&lt;/h2>&lt;p>Terdapat sifat penting yang berkaitan dengan akar keamanan kriptografi berbasis kisi. Yaitu, &amp;ldquo;ada jumlah tak terhingga basis yang menghasilkan kisi yang sama&amp;rdquo;.&lt;/p>
&lt;p>Sebagai contoh, kisi $\mathbb{Z}^2$ yang dihasilkan oleh basis $\mathbf{b}_1 = (1, 0)^T, \mathbf{b}_2 = (0, 1)^T$ sebelumnya akan menghasilkan kisi $\mathbb{Z}^2$ yang sama persis bahkan jika kita menggunakan basis $\mathbf{b}'_1 = (1, 1)^T, \mathbf{b}'_2 = (2, 3)^T$.&lt;/p>
&lt;p>Syarat perlu dan cukup agar suatu basis $B$ dan basis lain $B'$ menghasilkan kisi yang sama adalah adanya suatu matriks elemen bilangan bulat $U \in \mathbb{Z}^{n \times n}$, dengan determinan $\det(U) = \pm 1$, sehingga dapat direpresentasikan sebagai
&lt;/p>
$$ B' = B U $$
&lt;p>
Matriks $U$ semacam itu disebut &amp;ldquo;Matriks unimodular (Unimodular matrix)&amp;rdquo;.&lt;/p>
&lt;p>Ide dasar dalam penerapannya pada kriptografi adalah menggunakan &amp;ldquo;basis yang baik (basis yang mendekati ortogonal dan terdiri dari vektor-vektor pendek)&amp;rdquo; sebagai kunci privat, dan menggunakan &amp;ldquo;basis yang buruk (basis yang sangat miring satu sama lain dan terdiri dari vektor-vektor yang sangat panjang)&amp;rdquo; sebagai kunci publik. Mencari basis yang baik dari basis yang buruk melalui perhitungan menjadi sangat sulit ketika dimensinya tinggi. Inilah intuisi dasar dari kriptografi berbasis kisi.&lt;/p>
&lt;h1 id="3-masalah-komputasi-yang-sulit-pada-kisi">3. Masalah Komputasi yang Sulit pada Kisi
&lt;/h1>&lt;p>Keamanan kriptografi berbasis kisi bergantung pada kesulitan memecahkan masalah matematis tertentu pada kisi. Di sini, kita akan memperkenalkan dua masalah yang paling mendasar dan terkenal.&lt;/p>
&lt;h2 id="31-masalah-vektor-terpendek-shortest-vector-problem-svp">3.1 Masalah Vektor Terpendek (Shortest Vector Problem: SVP)
&lt;/h2>&lt;p>SVP adalah masalah yang paling klasik dan terkenal dalam teori kisi.&lt;/p>
&lt;p>&lt;strong>Definisi (SVP):&lt;/strong>
Diberikan sembarang basis kisi $B$, temukan vektor $\mathbf{v}$ dengan norma Euclidean (panjang) terkecil di antara vektor-vektor bukan nol yang termasuk dalam kisi $\mathcal{L}(B)$ tersebut.&lt;/p>
&lt;p>Dinyatakan dalam rumus, ini adalah masalah mencari $\mathbf{v}$ sehingga $\min_{\mathbf{v} \in \mathcal{L}(B) \setminus \{\mathbf{0}\}} \| \mathbf{v} \|$. Panjang minimum ini ditulis sebagai $\lambda_1(\mathcal{L})$ dan disebut &amp;ldquo;Minimum berurutan pertama (First successive minimum) dari kisi&amp;rdquo;.&lt;/p>
&lt;p>Dalam dimensi rendah seperti 2 atau 3 dimensi, jika Anda menggambar sebuah gambar, Anda dapat melihat dan menemukan vektor terpendek dengan mata. Atau, Anda dapat menyelesaikannya secara efisien menggunakan algoritma reduksi kisi Gauss. Namun, ketika dimensi $n$ menjadi dimensi tinggi seperti ratusan hingga ribuan, diketahui bahwa memecahkan SVP secara eksak adalah NP-hard.&lt;/p>
&lt;p>Dalam kriptografi dunia nyata, alih-alih vektor terpendek eksak, SVP perkiraan ($\gamma$-SVP) yang menemukan &amp;ldquo;vektor yang secara perkiraan pendek&amp;rdquo; digunakan. Jika faktor perkiraan $\gamma$ berukuran polinomial, masalah ini masih dianggap sangat sulit.&lt;/p>
&lt;h2 id="32-masalah-vektor-terdekat-closest-vector-problem-cvp">3.2 Masalah Vektor Terdekat (Closest Vector Problem: CVP)
&lt;/h2>&lt;p>CVP juga merupakan masalah yang sangat penting dalam kriptografi berbasis kisi.&lt;/p>
&lt;p>&lt;strong>Definisi (CVP):&lt;/strong>
Diberikan sembarang basis kisi $B$, dan sembarang vektor target $\mathbf{t} \in \mathbb{R}^m$ di dalam ruang (tidak harus titik kisi), temukan titik kisi $\mathbf{v} \in \mathcal{L}(B)$ di antara titik-titik kisi yang paling dekat dengan $\mathbf{t}$.&lt;/p>
&lt;p>Dinyatakan dalam rumus, ini adalah masalah mencari titik kisi $\mathbf{v}$ sehingga $\min_{\mathbf{v} \in \mathcal{L}(B)} \| \mathbf{v} - \mathbf{t} \|$.&lt;/p>
&lt;p>CVP juga bersifat NP-hard dalam dimensi tinggi, sama seperti SVP. Dari perspektif aplikasi untuk kriptografi, masalah LWE yang dijelaskan di bawah ini berkaitan erat dengan varian khusus dari CVP (Bounded Distance Decoding: BDD).&lt;/p>
&lt;h2 id="33-mengapa-menjadi-tidak-dapat-dipecahkan-saat-dimensi-tinggi-keterbatasan-lll-dan-bkz">3.3 Mengapa Menjadi Tidak Dapat Dipecahkan Saat Dimensi Tinggi? (Keterbatasan LLL dan BKZ)
&lt;/h2>&lt;p>Sebagai algoritma terkenal untuk memecahkan masalah kisi berdimensi tinggi, terdapat algoritma LLL (Lenstra-Lenstra-Lovász algorithm). Algoritma LLL beroperasi dalam waktu polinomial dan dapat mereduksi (Reduction) basis kisi menjadi &amp;ldquo;basis yang baik&amp;rdquo; sampai tingkat tertentu. Namun, vektor terpendek yang dapat ditemukan oleh algoritma LLL memiliki faktor perkiraan yang eksponensial ($2^{\mathcal{O}(n)}$) terhadap panjang vektor terpendek yang sebenarnya, sehingga tidak mencapai tingkat di mana ia dapat merusak keamanan kriptografi.&lt;/p>
&lt;p>Jika kita menggunakan algoritma reduksi basis yang lebih kuat seperti algoritma BKZ (Block Korkine-Zolotarev) yang merupakan peningkatan dari LLL, kita dapat menemukan vektor yang lebih pendek, tetapi kompleksitas komputasinya meningkat secara eksponensial sehubungan dengan ukuran blok. Dalam kriptografi berbasis kisi, parameter yang aman (seperti ukuran dimensi $n$) ditentukan dengan memperkirakan waktu eksekusi dari algoritma BKZ ini. Dalam parameter standar PQC saat ini, nilai 500 hingga 1000 atau lebih dipilih untuk dimensi $n$, dan dikatakan bahwa akan memakan waktu lebih lama daripada umur alam semesta untuk mendekripsinya, bahkan dengan superkomputer atau komputer kuantum di masa depan.&lt;/p>
&lt;h1 id="4-formulasi-matematis-dari-masalah-lwe-learning-with-errors">4. Formulasi Matematis dari Masalah LWE (Learning With Errors)
&lt;/h1>&lt;p>Sebagian besar kriptografi berbasis kisi modern didasarkan pada &amp;ldquo;Masalah LWE (Learning With Errors)&amp;rdquo; yang diusulkan oleh Oded Regev pada tahun 2005. Keindahan dari masalah LWE terletak pada kesederhanaan formulasinya, dan fakta bahwa ia memiliki bukti matematis yang kuat, yaitu &amp;ldquo;reduksi dari kompleksitas kasus terburuk ke kompleksitas kasus rata-rata&amp;rdquo;.&lt;/p>
&lt;h2 id="41-sistem-persamaan-linear-tanpa-noise">4.1 Sistem Persamaan Linear Tanpa Noise
&lt;/h2>&lt;p>Untuk memahami masalah LWE, pertama-tama mari kita pertimbangkan sistem persamaan linear sederhana tanpa noise.
Misalkan ada vektor rahasia yang tidak diketahui $\mathbf{s} \in \mathbb{Z}_q^n$ (setiap komponen adalah bilangan bulat dari $0$ hingga $q-1$). Di sini $q$ adalah bilangan prima.&lt;/p>
&lt;p>Kita memilih vektor koefisien acak $\mathbf{a}_1, \mathbf{a}_2, \dots \in \mathbb{Z}_q^n$, dan menghitung hasil kali titik dengan vektor rahasia $\mathbf{s}$ dalam modulo $q$.
$b_1 = \langle \mathbf{a}_1, \mathbf{s} \rangle \pmod q$
$b_2 = \langle \mathbf{a}_2, \mathbf{s} \rangle \pmod q$
$\vdots$&lt;/p>
&lt;p>Mengingat jumlah pasangan $(\mathbf{a}_i, b_i)$ yang cukup ($n$ atau lebih), kita dapat dengan mudah memulihkan vektor rahasia $\mathbf{s}$ dengan menggunakan &amp;ldquo;Eliminasi Gauss (Gaussian elimination)&amp;rdquo; dalam aljabar linear. Ini adalah masalah yang dapat dengan mudah diselesaikan dalam waktu polinomial.&lt;/p>
&lt;h2 id="42-definisi-masalah-lwe-menambahkan-noise">4.2 Definisi Masalah LWE: Menambahkan Noise
&lt;/h2>&lt;p>Lalu, apa yang terjadi jika kita menambahkan sedikit &amp;ldquo;noise (kesalahan)&amp;rdquo; pada masalah ini?
Inilah esensi dari masalah LWE.&lt;/p>
&lt;p>Untuk vektor rahasia yang tidak diketahui $\mathbf{s} \in \mathbb{Z}_q^n$, kita menambahkan kesalahan kecil $e_i \in \mathbb{Z}_q$ ke hasil setiap persamaan.
$b_i = \langle \mathbf{a}_i, \mathbf{s} \rangle + e_i \pmod q$&lt;/p>
&lt;p>Di sini, $e_i$ adalah nilai bilangan bulat kecil dengan rata-rata 0 dan standar deviasi yang relatif kecil (misalnya, dipilih dari distribusi Gaussian diskrit, seperti distribusi normal).
Informasi yang diberikan adalah daftar pasangan vektor acak $\mathbf{a}_i$ dan $b_i$ yang dihitung dengan menambahkan kesalahan padanya.
$( \mathbf{a}_1, b_1 ), ( \mathbf{a}_2, b_2 ), \dots, ( \mathbf{a}_m, b_m )$&lt;/p>
&lt;p>Jika kita merepresentasikan ini dengan matriks, ini menjadi sangat rapi.
Menggunakan matriks acak $A \in \mathbb{Z}_q^{m \times n}$, vektor rahasia $\mathbf{s} \in \mathbb{Z}_q^n$, dan vektor kesalahan $\mathbf{e} \in \mathbb{Z}_q^m$,
&lt;/p>
$$ \mathbf{b} = A \mathbf{s} + \mathbf{e} \pmod q $$
&lt;p>
dapat ditulis seperti di atas. Yang diberikan hanyalah $A$ dan $\mathbf{b}$. Mencari $\mathbf{s}$ dari sini adalah &amp;ldquo;Masalah pencarian LWE (Search LWE problem)&amp;rdquo;.&lt;/p>
&lt;p>Karena terdapat kesalahan $e_i$, jika kita mencoba menggunakan eliminasi Gauss, kesalahan akan diperkuat secara eksponensial dalam proses penambahan dan pengurangan persamaan, sehingga mustahil untuk mencapai jawaban yang benar. Pada pandangan pertama, ini terlihat seperti sistem persamaan linear yang sederhana, tetapi hanya dengan menambahkan noise kecil ini, tingkat kesulitan masalah melompat ke tingkat NP-hard.&lt;/p>
&lt;h2 id="43-masalah-keputusan-lwe-decision-lwe">4.3 Masalah Keputusan LWE (Decision LWE)
&lt;/h2>&lt;p>Yang sering digunakan dalam pembuktian teori kriptografi adalah variasi dari masalah pencarian LWE, yaitu &amp;ldquo;Masalah keputusan LWE (Decision LWE problem)&amp;rdquo;.&lt;/p>
&lt;p>Masalah keputusan LWE adalah masalah di mana, diberikan daftar sampel yang diperoleh dari salah satu dari dua distribusi berikut, kita harus menentukan dari distribusi mana sampel tersebut berasal.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Distribusi LWE&lt;/strong>: Secara sengaja dihitung $(A, \mathbf{b} = A\mathbf{s} + \mathbf{e} \pmod q)$&lt;/li>
&lt;li>&lt;strong>Distribusi acak seragam&lt;/strong>: Sepasang $(A, \mathbf{u})$ yang terdiri dari matriks $A$ dan vektor $\mathbf{u}$ yang dipilih secara acak sepenuhnya.&lt;/li>
&lt;/ol>
&lt;p>Hebatnya, jika parameter masalah LWE dipilih dengan tepat, pasangan data yang diperoleh dari distribusi LWE menjadi &amp;ldquo;secara komputasi tidak dapat dibedakan (Computationally Indistinguishable)&amp;rdquo; dari pasangan data yang sepenuhnya acak. Sifat inilah yang menjadi dasar bagi kriptografi berbasis LWE untuk dapat menghasilkan &amp;ldquo;teks sandi (ciphertext) yang tidak dapat dibedakan dari angka acak&amp;rdquo;.&lt;/p>
&lt;h2 id="44-reduksi-dari-kompleksitas-kasus-terburuk-ke-kasus-rata-rata-teorema-regev">4.4 Reduksi dari Kompleksitas Kasus Terburuk ke Kasus Rata-rata (Teorema Regev)
&lt;/h2>&lt;p>Pencapaian terbesar Oded Regev adalah menghubungkan kesulitan masalah LWE ini secara matematis dengan kesulitan masalah kisi yang disebutkan sebelumnya (SVP dan CVP).&lt;/p>
&lt;p>Menggunakan reduksi kuantum (Quantum reduction), ia membuktikan bahwa &amp;ldquo;Jika ada algoritma waktu polinomial yang dapat menyelesaikan masalah LWE secara rata-rata (untuk $A$ dan $\mathbf{e}$ yang dipilih secara acak), maka ada algoritma kuantum waktu polinomial yang dapat menyelesaikan Gap-SVP kasus terburuk (kasus paling sulit) untuk sembarang kisi&amp;rdquo;. (Belakangan, reduksi klasik juga ditunjukkan oleh Peikert dkk.).&lt;/p>
&lt;p>Ini adalah sifat yang diimpikan dalam teori kriptografi. Karena ini menghilangkan kekhawatiran bahwa &amp;ldquo;kriptografi mungkin dapat dipecahkan karena kita kebetulan memilih kunci yang lemah (bagian dari kasus rata-rata)&amp;rdquo;, dan memberikan jaminan kuat bahwa &amp;ldquo;jika LWE rata-rata dapat dipecahkan, semua masalah sulit dari kisi dapat dipecahkan (sehingga LWE mutlak sulit)&amp;rdquo;.&lt;/p>
&lt;div class="mermaid">graph TD
A["Masalah Kisi Kasus Terburuk (Gap-SVP, SIVP)"] -->|Reduksi Kuantum/Klasik| B["Masalah LWE Kasus Rata-rata"]
B -->|Konstruksi Kriptografi| C["Kriptosistem berbasis LWE (PKE, KEM, FHE)"]
style A fill:#ffcccc,stroke:#ff0000,stroke-width:2px,color:#000
style B fill:#ccffcc,stroke:#00aa00,stroke-width:2px,color:#000
style C fill:#ccccff,stroke:#0000ff,stroke-width:2px,color:#000&lt;/div>
&lt;h1 id="5-konstruksi-kriptografi-kunci-publik-menggunakan-lwe-kriptografi-regev">5. Konstruksi Kriptografi Kunci Publik menggunakan LWE (Kriptografi Regev)
&lt;/h1>&lt;p>Setelah memahami kesulitan masalah LWE, mari kita lihat skema kriptografi kunci publik dasar yang diusulkan oleh Oded Regev tentang bagaimana menggunakannya untuk enkripsi dan dekripsi. Di sini, kita akan menjelaskan mekanisme paling dasar untuk mengenkripsi pesan 1-bit $M \in \{0, 1\}$.&lt;/p>
&lt;h2 id="51-pembuatan-kunci-key-generation">5.1 Pembuatan Kunci (Key Generation)
&lt;/h2>&lt;ol>
&lt;li>Sebagai parameter sistem, kita tentukan bilangan prima $q$ yang menjadi modulo, dimensi $n$, dan jumlah persamaan $m$ ($m > n \log q$).&lt;/li>
&lt;li>Sebagai kunci privat, pilih secara acak vektor $\mathbf{s} \in \mathbb{Z}_q^n$.&lt;/li>
&lt;li>Hasilkan matriks acak $A \in \mathbb{Z}_q^{m \times n}$.&lt;/li>
&lt;li>Pilih vektor kesalahan kecil $\mathbf{e} \in \mathbb{Z}_q^m$ dari distribusi kesalahan seperti distribusi Gaussian diskrit.&lt;/li>
&lt;li>Hitung vektor $\mathbf{b} = A \mathbf{s} + \mathbf{e} \pmod q$.&lt;/li>
&lt;li>Kunci publik (Public Key) adalah $(A, \mathbf{b})$.&lt;/li>
&lt;li>Kunci privat (Secret Key) adalah $\mathbf{s}$.&lt;/li>
&lt;/ol>
&lt;p>Kunci publik persis merupakan &amp;ldquo;instansiasi dari masalah LWE&amp;rdquo; itu sendiri. Menemukan kunci privat $\mathbf{s}$ dari kunci publik $(A, \mathbf{b})$ sama dengan memecahkan masalah pencarian LWE, sehingga keamanannya terjamin.&lt;/p>
&lt;h2 id="52-enkripsi-encryption">5.2 Enkripsi (Encryption)
&lt;/h2>&lt;p>Alice menggunakan kunci publik Bob $(A, \mathbf{b})$ untuk mengenkripsi pesan 1-bit $M \in \{0, 1\}$.&lt;/p>
&lt;ol>
&lt;li>Pilih vektor biner acak (komponennya adalah 0 atau 1) $\mathbf{r} \in \{0, 1\}^m$.&lt;/li>
&lt;li>Sebagai paruh pertama dari teks sandi, hitung vektor $\mathbf{u} = A^T \mathbf{r} \pmod q$. ($A^T$ adalah matriks transpose dari $A$. Dengan kata lain, ia menjumlahkan baris-baris dari $A$ di mana komponen dari $\mathbf{r}$ adalah 1).&lt;/li>
&lt;li>Sebagai paruh kedua dari teks sandi, hitung skalar $v = \mathbf{b}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor \pmod q$.
(Jika pesan $M$ adalah 0, tidak ditambahkan apa-apa, dan jika $1$, ditambahkan persis setengah dari nilai $q$, yaitu $\lfloor \frac{q}{2} \rfloor$).&lt;/li>
&lt;li>Teks sandi (Ciphertext) adalah $(\mathbf{u}, v)$.&lt;/li>
&lt;/ol>
&lt;p>Makna intuitif dari enkripsi adalah mengambil &amp;ldquo;jumlah subset acak&amp;rdquo; sehubungan dengan matriks kunci publik $A$ dan vektor $\mathbf{b}$. Karena kesulitan masalah keputusan LWE, teks sandi $(\mathbf{u}, v)$ ini tampak tidak dapat dibedakan dari vektor acak sepenuhnya dan bilangan acak seragam (Keamanan semantik: Semantic Security).&lt;/p>
&lt;div class="mermaid">flowchart LR
M["Pesan M dalam {0,1}"] --> Enc
PK["Kunci Publik (A, b)"] --> Enc
r["Vektor biner acak r"] --> Enc
subgraph Enc ["Proses Enkripsi"]
direction TB
u_calc["u = A^T * r mod q"]
v_calc["v = b^T * r + M * floor(q/2) mod q"]
end
Enc --> CT["Teks Sandi (u, v)"]&lt;/div>
&lt;h2 id="53-dekripsi-decryption">5.3 Dekripsi (Decryption)
&lt;/h2>&lt;p>Bob mendekripsi teks sandi $(\mathbf{u}, v)$ menggunakan kunci privat $\mathbf{s}$.&lt;/p>
&lt;ol>
&lt;li>Hitung nilai berikut: $D = v - \mathbf{s}^T \mathbf{u} \pmod q$&lt;/li>
&lt;li>Jika hasil perhitungan mendekati $0$, keluarkan $M=0$, jika mendekati $\lfloor \frac{q}{2} \rfloor$, keluarkan $M=1$.&lt;/li>
&lt;/ol>
&lt;p>Mari kita jabarkan secara matematis mengapa ini dapat didekripsi.
Ingatlah bahwa $\mathbf{b} = A \mathbf{s} + \mathbf{e}$.&lt;/p>
$$
\begin{aligned}
v - \mathbf{s}^T \mathbf{u} &amp;= (\mathbf{b}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T (A^T \mathbf{r}) \\
&amp;= ((A \mathbf{s} + \mathbf{e})^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T A^T \mathbf{r} \\
&amp;= (\mathbf{s}^T A^T \mathbf{r} + \mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T A^T \mathbf{r} \\
&amp;= \mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor \pmod q
\end{aligned}
$$
&lt;p>Di sini, dari rumus tersebut, $\mathbf{s}^T A^T \mathbf{r}$ saling meniadakan dengan rapi dan menghilang!
Yang tersisa adalah $\mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor$.&lt;/p>
&lt;p>$\mathbf{e}$ adalah vektor noise dengan komponen yang sangat kecil, dan $\mathbf{r}$ adalah vektor biner dengan komponen 0 atau 1. Oleh karena itu, hasil kali titik dari keduanya, $\mathbf{e}^T \mathbf{r}$, juga (jika parameter dipilih dengan benar) tetap merupakan nilai yang relatif kecil.&lt;/p>
&lt;ul>
&lt;li>Jika $M=0$, hasilnya menjadi $\mathbf{e}^T \mathbf{r}$, yang merupakan nilai kecil mendekati $0$.&lt;/li>
&lt;li>Jika $M=1$, hasilnya menjadi $\mathbf{e}^T \mathbf{r} + \lfloor \frac{q}{2} \rfloor$, yang terletak di sekitar nilai setengah dari $q$, yaitu $\lfloor \frac{q}{2} \rfloor$.&lt;/li>
&lt;/ul>
&lt;p>Jika parameter dirancang sedemikian rupa sehingga nilai absolut dari kesalahan $\mathbf{e}^T \mathbf{r}$ berada di bawah $\frac{q}{4}$, Bob dapat menentukan (mendekripsi) pesan $M$ secara akurat hanya dengan melihat apakah hasil perhitungan lebih dekat ke $0$ atau ke $\lfloor \frac{q}{2} \rfloor$. Ini adalah mekanisme indah di mana kriptografi berbasis LWE bekerja.&lt;/p>
&lt;div class="mermaid">flowchart LR
CT["Teks Sandi (u, v)"] --> Dec
SK["Kunci Privat s"] --> Dec
subgraph Dec ["Proses Dekripsi"]
direction TB
calc["Hitung D = v - s^T * u mod q"]
check["Periksa apakah D lebih dekat ke 0 atau q/2"]
end
calc --> check
Dec --> M_out["Pesan M yang Dipulihkan"]&lt;/div>
&lt;h1 id="6-contoh-mainan-toy-example-dari-kriptografi-lwe-dengan-nilai-numerik-spesifik">6. Contoh Mainan (Toy Example) dari Kriptografi LWE dengan Nilai Numerik Spesifik
&lt;/h1>&lt;p>Saya pikir sulit untuk merasakan hanya dengan deretan rumus, jadi mari kita benar-benar mengatur parameter numerik yang sangat kecil dan mengikuti perhitungan dari enkripsi hingga dekripsi.
(※ Dalam sistem kriptografi dunia nyata, untuk memastikan keamanan, nilai 500 atau lebih digunakan untuk $n$, dan ribuan atau lebih digunakan untuk $q$)&lt;/p>
&lt;p>&lt;strong>[Pengaturan Parameter]&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Modulo $q = 17$ (Bilangan prima. Oleh karena itu, nilainya berkisar dari $0$ hingga $16$)&lt;/li>
&lt;li>Dimensi $n = 2$&lt;/li>
&lt;li>Jumlah persamaan $m = 4$&lt;/li>
&lt;li>Misalkan kita mengenkripsi pesan $M = 1$.&lt;/li>
&lt;li>Jumlah pergeseran pesan: $\lfloor \frac{q}{2} \rfloor = \lfloor \frac{17}{2} \rfloor = 8$&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>[1. Fase Pembuatan Kunci]&lt;/strong>
Bob memilih kunci privat $\mathbf{s}$, matriks $A$, dan vektor kesalahan $\mathbf{e}$ secara acak.
&lt;/p>
$$ \mathbf{s} = \begin{pmatrix} 3 \\ 4 \end{pmatrix} \in \mathbb{Z}_{17}^2 $$
$$ A = \begin{pmatrix} 2 &amp; 15 \\ 1 &amp; 8 \\ 14 &amp; 5 \\ 9 &amp; 10 \end{pmatrix} \in \mathbb{Z}_{17}^{4 \times 2} $$
$$ \mathbf{e} = \begin{pmatrix} 1 \\ -1 \\ 0 \\ 2 \end{pmatrix} \equiv \begin{pmatrix} 1 \\ 16 \\ 0 \\ 2 \end{pmatrix} \pmod{17} $$
&lt;p>Selanjutnya kita hitung kunci publik $\mathbf{b}$.
&lt;/p>
$$ A \mathbf{s} = \begin{pmatrix} 2 &amp; 15 \\ 1 &amp; 8 \\ 14 &amp; 5 \\ 9 &amp; 10 \end{pmatrix} \begin{pmatrix} 3 \\ 4 \end{pmatrix} = \begin{pmatrix} 2\times 3 + 15\times 4 \\ 1\times 3 + 8\times 4 \\ 14\times 3 + 5\times 4 \\ 9\times 3 + 10\times 4 \end{pmatrix} = \begin{pmatrix} 6 + 60 \\ 3 + 32 \\ 42 + 20 \\ 27 + 40 \end{pmatrix} = \begin{pmatrix} 66 \\ 35 \\ 62 \\ 67 \end{pmatrix} $$
&lt;p>
Kita hitung ini dalam modulo 17. ($66 = 17 \times 3 + 15$, dst.)
&lt;/p>
$$ A \mathbf{s} \pmod{17} = \begin{pmatrix} 15 \\ 1 \\ 11 \\ 16 \end{pmatrix} $$
&lt;p>
Tambahkan vektor kesalahan $\mathbf{e}$.
&lt;/p>
$$ \mathbf{b} = A \mathbf{s} + \mathbf{e} = \begin{pmatrix} 15 \\ 1 \\ 11 \\ 16 \end{pmatrix} + \begin{pmatrix} 1 \\ 16 \\ 0 \\ 2 \end{pmatrix} = \begin{pmatrix} 16 \\ 17 \\ 11 \\ 18 \end{pmatrix} \equiv \begin{pmatrix} 16 \\ 0 \\ 11 \\ 1 \end{pmatrix} \pmod{17} $$
&lt;p>Kunci publiknya adalah $A$ dan $\mathbf{b} = (16, 0, 11, 1)^T$.&lt;/p>
&lt;p>&lt;strong>[2. Fase Enkripsi]&lt;/strong>
Alice mengenkripsi pesan $M = 1$.
Pilih vektor acak $\mathbf{r}$. Di sini kita tetapkan $\mathbf{r} = (1, 0, 1, 0)^T$.&lt;/p>
&lt;p>Hitung $\mathbf{u}$.
&lt;/p>
$$ \mathbf{u} = A^T \mathbf{r} = \begin{pmatrix} 2 &amp; 1 &amp; 14 &amp; 9 \\ 15 &amp; 8 &amp; 5 &amp; 10 \end{pmatrix} \begin{pmatrix} 1 \\ 0 \\ 1 \\ 0 \end{pmatrix} = \begin{pmatrix} 2 \times 1 + 14 \times 1 \\ 15 \times 1 + 5 \times 1 \end{pmatrix} = \begin{pmatrix} 16 \\ 20 \end{pmatrix} \equiv \begin{pmatrix} 16 \\ 3 \end{pmatrix} \pmod{17} $$
&lt;p>Hitung $v$.
&lt;/p>
$$ \mathbf{b}^T \mathbf{r} = (16, 0, 11, 1) \begin{pmatrix} 1 \\ 0 \\ 1 \\ 0 \end{pmatrix} = 16 \times 1 + 11 \times 1 = 27 \equiv 10 \pmod{17} $$
&lt;p>
Tambahkan nilai $\lfloor 17/2 \rfloor = 8$ yang sesuai dengan pesan $M=1$.
&lt;/p>
$$ v = \mathbf{b}^T \mathbf{r} + M \cdot 8 = 10 + 1 \times 8 = 18 \equiv 1 \pmod{17} $$
&lt;p>Alice mengirimkan teks sandi $(\mathbf{u}, v) = \left( \begin{pmatrix} 16 \\ 3 \end{pmatrix}, 1 \right)$ kepada Bob.&lt;/p>
&lt;p>&lt;strong>[3. Fase Dekripsi]&lt;/strong>
Menerima teks sandi, Bob mendekripsinya menggunakan kunci privat $\mathbf{s} = (3, 4)^T$.
Rumus proses dekripsi: Hitung $D = v - \mathbf{s}^T \mathbf{u} \pmod{17}$.&lt;/p>
$$ \mathbf{s}^T \mathbf{u} = (3, 4) \begin{pmatrix} 16 \\ 3 \end{pmatrix} = 3 \times 16 + 4 \times 3 = 48 + 12 = 60 \equiv 9 \pmod{17} $$
$$ D = v - \mathbf{s}^T \mathbf{u} = 1 - 9 = -8 \pmod{17} $$
&lt;p>Di sini, di dunia modulo 17, $-8$ sama dengan $9$ ($-8 + 17 = 9$).
Tentukan apakah nilai $D = 9$ yang diperoleh lebih dekat ke $0$ atau $8$ ($\lfloor 17/2 \rfloor$).
Karena $9$ jelas lebih dekat ke $8$ daripada ke $0$, Bob berhasil memulihkan $M = 1$ dengan benar!&lt;/p>
&lt;p>Mengapa menjadi $9$? Mari kita ingat kembali pembuktian sebelumnya.
Bagian kesalahan adalah $\mathbf{e}^T \mathbf{r} = (1, -1, 0, 2) (1, 0, 1, 0)^T = 1 \times 1 + 0 \times 1 = 1$.
Oleh karena itu, hasil perhitungannya adalah $\mathbf{e}^T \mathbf{r} + M \cdot 8 = 1 + 8 = 9$, dan dapat dipastikan bahwa nilai sesuai dengan teori telah dihitung.&lt;/p>
&lt;h1 id="7-evolusi-menuju-penerapan-praktis-ring-lwe-dan-module-lwe">7. Evolusi Menuju Penerapan Praktis: Ring-LWE dan Module-LWE
&lt;/h1>&lt;p>Masalah LWE standar (Standard LWE) yang dijelaskan sejauh ini memiliki bukti keamanan yang sangat kuat, tetapi memiliki kelemahan fatal dalam penggunaan praktis. Yaitu &amp;ldquo;ukuran kunci menjadi raksasa&amp;rdquo; dan &amp;ldquo;biaya komputasi tinggi&amp;rdquo;.&lt;/p>
&lt;p>Dalam Standard LWE, kunci publik berisi matriks raksasa $A \in \mathbb{Z}_q^{m \times n}$. Ketika parameter $n$ menjadi ratusan hingga ribuan, ukuran matriks ini mencapai beberapa megabyte, sehingga terlalu berat untuk dikirim dan diterima setiap saat dalam protokol komunikasi di internet (seperti TLS). Selain itu, perkalian matriks dan vektor membutuhkan kompleksitas komputasi sebesar $\mathcal{O}(n^2)$.&lt;/p>
&lt;p>Untuk mengatasi masalah ini, diperkenalkanlah &amp;ldquo;Ring-LWE (RLWE)&amp;rdquo; dan &amp;ldquo;Module-LWE (MLWE)&amp;rdquo;, yang memasukkan struktur aljabar yang disebut cincin polinomial (Polynomial rings) ke dalam kisi.&lt;/p>
&lt;h2 id="71-intuisi-dari-ring-lwe">7.1 Intuisi dari Ring-LWE
&lt;/h2>&lt;p>Dalam Ring-LWE, vektor dan matriks digantikan dengan elemen (polinomial) pada cincin polinomial $\mathcal{R}_q = \mathbb{Z}_q[X]/(X^n + 1)$. (Di sini $n$ dipilih sebagai pangkat 2).&lt;/p>
&lt;p>Sementara kunci publik dari Standard LWE adalah matriks $A$, Ring-LWE menggunakan polinomial tunggal $a(x)$. Kunci privat $s(x)$ dan kesalahan $e(x)$ juga menjadi polinomial.
Persamaannya menjadi sebagai berikut:
&lt;/p>
$$ b(x) = a(x) \cdot s(x) + e(x) \pmod q $$
&lt;p>Karena ini adalah perkalian polinomial, dengan menggunakan &amp;ldquo;Number Theoretic Transform (NTT)&amp;rdquo;, yang mirip dengan Fast Fourier Transform (FFT), kompleksitas komputasi dapat dikurangi secara dramatis menjadi $\mathcal{O}(n \log n)$. Lebih jauh lagi, karena ukuran kunci publik juga berkurang dari matriks menjadi polinomial tunggal, ukuran data berkurang menjadi $\mathcal{O}(n)$. Ini memberikan keuntungan yang luar biasa dalam bandwidth komunikasi.&lt;/p>
&lt;p>Secara matematis, Ring-LWE bukan direduksi menjadi masalah pada kisi umum, melainkan pada kisi dengan simetri khusus yang disebut &amp;ldquo;Kisi Ideal (Ideal Lattice)&amp;rdquo;.&lt;/p>
&lt;h2 id="72-module-lwe-dan-standardisasi-nist-kyber--ml-kem">7.2 Module-LWE dan Standardisasi NIST (Kyber / ML-KEM)
&lt;/h2>&lt;p>Meskipun Ring-LWE efisien, ada sedikit kekhawatiran bahwa struktur aljabar khusus dari kisi ideal dapat menjadi petunjuk untuk serangan di masa depan. Oleh karena itu, &amp;ldquo;Module-LWE (MLWE)&amp;rdquo; mengambil &amp;ldquo;yang terbaik dari kedua dunia&amp;rdquo; dari keamanan konservatif Standard LWE dan efisiensi Ring-LWE.&lt;/p>
&lt;p>Dalam Module-LWE, kita mempertimbangkan matriks kecil dan vektor yang elemennya adalah polinomial. Dengan kata lain, kita menangani modul di atas cincin.
Saat ini, &amp;ldquo;CRYSTALS-Kyber&amp;rdquo; (nama standar: ML-KEM), yang dipilih oleh NIST sebagai standar untuk algoritma enkapsulasi kunci (KEM) PQC, dibangun tepat di atas kesulitan masalah Module-LWE ini.&lt;/p>
&lt;h1 id="8-mengapa-ini-aman-terhadap-komputer-kuantum">8. Mengapa Ini Aman Terhadap Komputer Kuantum?
&lt;/h1>&lt;p>Terakhir, mari kita sentuh bagian inti dari &amp;ldquo;Mengapa kriptografi berbasis kisi diyakini tidak dapat dipecahkan bahkan menggunakan komputer kuantum?&amp;rdquo;.&lt;/p>
&lt;p>Algoritma Shor, yang digunakan komputer kuantum untuk memecahkan kriptografi RSA dan kriptografi kurva eliptik, pada dasarnya adalah algoritma untuk memecahkan &amp;ldquo;Masalah Subgrup Tersembunyi (Hidden Subgroup Problem: HSP)&amp;rdquo;. Struktur matematika di balik RSA dan ECC (grup Abelian hingga) memiliki periodisitas, dan dengan menggunakan operasi yang unik untuk algoritma kuantum yang disebut Transformasi Fourier Kuantum (Quantum Fourier Transform: QFT), periode ini (subgrup tersembunyi) dapat diekstraksi sekaligus.&lt;/p>
&lt;p>Namun, masalah kisi pada dasarnya berbeda. Meskipun kisi juga memiliki periodisitas, apa yang dicari dalam SVP dan CVP adalah sifat geometris non-linear seperti &amp;ldquo;jarak terpendek&amp;rdquo; dan &amp;ldquo;penghilangan noise&amp;rdquo;. Bahkan jika &amp;ldquo;transformasi Fourier kuantum pada grup Abelian&amp;rdquo; seperti algoritma Shor diterapkan secara langsung, informasi berguna yang merupakan jawaban dari masalah kisi tidak dapat diekstraksi secara efisien. Hingga saat ini, tidak ada algoritma kuantum yang dapat memecahkan SVP dan LWE dalam waktu polinomial yang telah ditemukan, dan diyakini secara luas bahwa bahkan dengan kekuatan komputasi paralel dari komputer kuantum, satu-satunya metode yang efektif hanyalah pencarian yang mendekati brute force (percepatan akar kuadrat oleh algoritma Grover).&lt;/p>
&lt;h1 id="9-kesimpulan">9. Kesimpulan
&lt;/h1>&lt;p>Dalam artikel ini, kami telah menjelaskan secara rinci tentang intuisi matematis kriptografi berbasis kisi, mulai dari definisi geometris kisi, formulasi masalah LWE, dan menuju konstruksi kriptografi kunci publik.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Kisi (Lattice)&lt;/strong> adalah ruang diskrit yang direpresentasikan oleh kombinasi linear koefisien bilangan bulat dari vektor basis, dan dalam dimensi tinggi menjadi sulit untuk menemukan &amp;ldquo;basis yang baik&amp;rdquo; yang mendekati ortogonal (SVP).&lt;/li>
&lt;li>&lt;strong>Masalah LWE (Learning With Errors)&lt;/strong> adalah masalah memecahkan sistem persamaan linear dengan noise, dan karena ini terkait dengan kesulitan masalah kasus terburuk pada kisi, ini memberikan bukti keamanan yang kuat.&lt;/li>
&lt;li>Dengan menggunakan masalah LWE, enkripsi dan dekripsi (&lt;strong>Kriptografi Regev&lt;/strong>) direalisasikan oleh mekanisme cerdik yang secara sengaja menambahkan atau menghapus noise.&lt;/li>
&lt;li>Dalam protokol dunia nyata, untuk meningkatkan efisiensi komunikasi dan kecepatan komputasi, &lt;strong>Ring-LWE&lt;/strong> dan &lt;strong>Module-LWE&lt;/strong> yang menggunakan cincin polinomial diadopsi, dan ini menjadi fondasi &lt;strong>ML-KEM&lt;/strong> yang merupakan standar NIST.&lt;/li>
&lt;/ol>
&lt;p>Di tengah pergeseran paradigma komputasi yang belum pernah terjadi sebelumnya yang disebut komputer kuantum, sangatlah romantis bahwa &amp;ldquo;Kriptografi berbasis kisi&amp;rdquo;, yang lahir dari kedalaman aljabar linear klasik dan teori bilangan, akan memikul fondasi keamanan internet masa depan. Matematika yang menjadi dasar kriptografi berbasis kisi sama sekali tidak terlalu sulit untuk dipahami, dan dengan pengetahuan dasar tentang aljabar linear dan probabilitas, struktur indahnya dapat dipahami dengan baik. Kami berharap artikel ini dapat membantu Anda dalam memahami kriptografi berbasis kisi, yang merupakan inti dari PQC.&lt;/p></description></item><item><title>Mekanisme Zero-Knowledge Proof (ZKP) dan Aplikasinya pada Web3 serta Keamanan Terkini</title><link>http://kenji.blog/id/p/zero-knowledge-proofs-zkp-web3-security/</link><pubDate>Fri, 11 Sep 2026 19:00:00 +0900</pubDate><guid>http://kenji.blog/id/p/zero-knowledge-proofs-zkp-web3-security/</guid><description>&lt;img src="http://kenji.blog/p/zero-knowledge-proofs-zkp-web3-security/img/eyecatch.jpg" alt="Featured image of post Mekanisme Zero-Knowledge Proof (ZKP) dan Aplikasinya pada Web3 serta Keamanan Terkini" />&lt;h2 id="pendahuluan">Pendahuluan
&lt;/h2>&lt;p>Dalam masyarakat digital modern, privasi data dan skalabilitas menjadi dua tantangan yang paling penting. Di tengah meningkatnya risiko kebocoran dan penyalahgunaan informasi pribadi, ada kebutuhan yang kuat akan teknologi yang memungkinkan seseorang untuk &amp;ldquo;membuktikan bahwa mereka memiliki suatu informasi tanpa mengungkapkan informasi itu sendiri kepada pihak lain&amp;rdquo;. Hal ini diwujudkan oleh &lt;strong>Zero-Knowledge Proof (ZKP) atau Bukti Tanpa Pengetahuan&lt;/strong>.&lt;/p>
&lt;p>Zero-Knowledge Proof adalah konsep teori kriptografi yang pertama kali diusulkan pada tahun 1980-an oleh Shafi Goldwasser, Silvio Micali, dan Charles Rackoff, namun untuk waktu yang lama hanya sebatas penelitian teoretis. Akan tetapi, dengan munculnya teknologi blockchain dan Web3, situasinya berubah drastis. ZKP kini mendapat sorotan sebagai &amp;ldquo;tongkat ajaib&amp;rdquo; yang mampu menyelesaikan sekaligus masalah skalabilitas (batas kapasitas pemrosesan) dan masalah privasi (semua transaksi bersifat publik) yang dihadapi oleh blockchain publik seperti Ethereum.&lt;/p>
&lt;p>Dalam artikel ini, kami akan menjelaskan secara sangat terperinci dan mendalam dari sudut pandang teknis, mulai dari konsep dasar Zero-Knowledge Proof, mekanisme matematis dan kriptografis yang mendalam dari &lt;strong>zk-SNARKs&lt;/strong> dan &lt;strong>zk-STARKs&lt;/strong> yang saat ini menjadi arus utama, hingga contoh aplikasi terkininya pada Web3 dan keamanan seperti ZK-Rollups dan Identitas Terdesentralisasi (DID).&lt;/p>
&lt;hr>
&lt;h2 id="apa-itu-zero-knowledge-proof-zkp">Apa itu Zero-Knowledge Proof (ZKP)?
&lt;/h2>&lt;p>Zero-Knowledge Proof (ZKP) mengacu pada protokol di mana saat seorang Pembuktian (Prover) membuktikan kepada seorang Pemverifikasi (Verifier) bahwa suatu proposisi adalah benar, &amp;ldquo;tidak ada informasi lain yang disampaikan selain fakta bahwa proposisi tersebut benar&amp;rdquo;.&lt;/p>
&lt;h3 id="3-syarat-yang-harus-dipenuhi-zkp">3 Syarat yang Harus Dipenuhi ZKP
&lt;/h3>&lt;p>Agar suatu protokol dapat disebut sebagai ZKP, ia harus memenuhi tiga karakteristik berikut secara ketat:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Kelengkapan (Completeness)&lt;/strong>
Jika proposisi itu benar, dan baik pembukti maupun pemverifikasi mengikuti protokol dengan benar, maka pemverifikasi harus menerima (Accept) bukti tersebut dengan probabilitas yang sangat tinggi.&lt;/li>
&lt;li>&lt;strong>Kekukuhan (Soundness)&lt;/strong>
Jika proposisi itu salah, seberapa tinggi pun kemampuan komputasi pembukti yang berniat jahat, tidak mungkin (kecuali dengan probabilitas yang sangat kecil sehingga dapat diabaikan) bagi mereka untuk menipu pemverifikasi agar menerima bukti tersebut.&lt;/li>
&lt;li>&lt;strong>Sifat Tanpa Pengetahuan (Zero-Knowledge)&lt;/strong>
Jika proposisi itu benar, pemverifikasi tidak dapat memperoleh informasi apa pun dari proses pembuktian selain fakta bahwa &amp;ldquo;proposisi itu benar&amp;rdquo;. Dari sudut pandang pemverifikasi, ini dibuktikan oleh definisi matematis yang menyatakan bahwa proses pembuktian dapat disimulasikan (terdapat sebuah simulator).&lt;/li>
&lt;/ol>
&lt;h3 id="bukti-interaktif-dan-bukti-non-interaktif">Bukti Interaktif dan Bukti Non-Interaktif
&lt;/h3>&lt;p>Dalam ZKP, terdapat dua jenis: &lt;strong>Bukti Interaktif&lt;/strong> di mana pembukti dan pemverifikasi berkomunikasi beberapa kali, dan &lt;strong>Bukti Non-Interaktif&lt;/strong> di mana pembukti hanya mengirimkan data bukti sekali dan selesai.&lt;/p>
&lt;h4 id="bukti-interaktif-interactive-zkp">Bukti Interaktif (Interactive ZKP)
&lt;/h4>&lt;p>ZKP awal dirancang sebagai protokol interaktif. Analogi terkenal &amp;ldquo;Gua Ali Baba&amp;rdquo; termasuk dalam kategori ini. Alur umum protokolnya adalah sebagai berikut:&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant Prover as "Prover (Pembukti)"
participant Verifier as "Verifier (Pemverifikasi)"
Note over Prover, Verifier: "Alur dasar protokol bukti interaktif"
Prover->>Verifier: "1. Mengirimkan komitmen (Commitment)"
Verifier->>Prover: "2. Mengirimkan tantangan acak (Challenge)"
Prover->>Verifier: "3. Menghitung dan mengirimkan respons (Response)"
Note over Verifier: "Memverifikasi respons (Verification)"
Verifier-->>Prover: "4. Menerima atau menolak (Accept / Reject)"
Note over Prover, Verifier: "※Diulang puluhan kali untuk meningkatkan tingkat kepastian"&lt;/div>
&lt;p>Metode ini sangat kuat, tetapi mengharuskan pemverifikasi untuk selalu online, sehingga kurang praktis diterapkan pada sistem terdistribusi asinkron seperti blockchain. Di blockchain, siapa pun harus dapat memverifikasi bukti-bukti masa lalu kapan saja.&lt;/p>
&lt;h4 id="transformasi-fiat-shamir-fiat-shamir-heuristic-dan-non-interaktivitas">Transformasi Fiat-Shamir (Fiat-Shamir Heuristic) dan Non-Interaktivitas
&lt;/h4>&lt;p>Metode terobosan untuk mengubah bukti interaktif menjadi bukti non-interaktif (Non-Interactive Zero-Knowledge Proof: NIZK) adalah &lt;strong>Transformasi Fiat-Shamir&lt;/strong>.&lt;/p>
&lt;p>Sebagai pengganti &amp;ldquo;tantangan acak&amp;rdquo; yang dikirim oleh pemverifikasi, pembukti menghasilkan sendiri &amp;ldquo;tantangan pseudo-acak&amp;rdquo; menggunakan komitmennya sendiri dan nilai hash dari informasi publik. Dengan asumsi bahwa fungsi hash kriptografi (misalnya SHA-256 atau Keccak) berfungsi sebagai oracle acak, pembukti tidak dapat memprediksi atau memanipulasi tantangan sebelumnya. Hal ini memungkinkan penyelesaian pembuktian hanya dengan satu kali pengiriman pesan, namun tetap menjaga tingkat keamanan yang setara dengan bukti interaktif.&lt;/p>
&lt;hr>
&lt;h2 id="detail-teknis-zk-snarks">Detail Teknis zk-SNARKs
&lt;/h2>&lt;p>Saat ini, jenis ZKP yang paling banyak digunakan adalah &lt;strong>zk-SNARKs&lt;/strong> (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge). Sesuai dengan namanya, ini merupakan argumen pengetahuan (Argument of Knowledge) yang memiliki sifat tanpa pengetahuan (zk), dengan ukuran bukti yang sangat kecil dan cepat diverifikasi (Succinct), serta bersifat non-interaktif (Non-Interactive).&lt;/p>
&lt;p>Fondasi dari zk-SNARKs adalah geometri aljabar tingkat lanjut dan teori kriptografi. Ia mengubah eksekusi program atau komputasi menjadi verifikasi persamaan polinomial tertentu.&lt;/p>
&lt;h3 id="1-sirkuit-aritmatika-dan-transformasi-ke-r1cs-rank-1-constraint-system">1. Sirkuit Aritmatika dan Transformasi ke R1CS (Rank-1 Constraint System)
&lt;/h3>&lt;p>Pertama-tama, komputasi apa pun yang ingin dibuktikan (algoritma atau logika smart contract) diubah menjadi &lt;strong>Sirkuit Aritmatika (Arithmetic Circuit)&lt;/strong> yang terdiri dari gerbang penjumlahan (addition gates) dan gerbang perkalian (multiplication gates).&lt;/p>
&lt;p>Selanjutnya, sirkuit aritmatika ini diubah menjadi sekumpulan persamaan matriks yang disebut &lt;strong>R1CS (Rank-1 Constraint System)&lt;/strong>. R1CS adalah masalah mencari matriks $A, B, C$ yang memenuhi kendala berikut untuk sebuah vektor variabel $x$.&lt;/p>
$$ (A \cdot x) \circ (B \cdot x) = C \cdot x $$
&lt;p>Di sini, $\circ$ melambangkan perkalian Hadamard (perkalian elemen per elemen). Kendala ini memastikan bahwa semua gerbang logika dalam sirkuit (terutama gerbang perkalian) telah dihitung dengan benar.&lt;/p>
&lt;h3 id="2-transformasi-ke-qap-quadratic-arithmetic-program">2. Transformasi ke QAP (Quadratic Arithmetic Program)
&lt;/h3>&lt;p>Karena kendala matriks R1CS bisa sangat banyak, memverifikasinya satu per satu akan sangat tidak efisien. Oleh karena itu, interpolasi Lagrange digunakan untuk mengompresi kendala-kendala ini menjadi sebuah persamaan polinomial tunggal. Inilah yang disebut &lt;strong>QAP (Quadratic Arithmetic Program)&lt;/strong>.&lt;/p>
&lt;p>Dengan transformasi ke QAP, masalah yang perlu dibuktikan direduksi menjadi: &amp;ldquo;Apakah sebuah polinomial tertentu $P(x)$ dapat dibagi habis oleh polinomial lain yang diketahui, $Z(x)$?&amp;rdquo;&lt;/p>
$$ P(x) = L(x) \cdot R(x) - O(x) $$
&lt;p>Di sini, $L(x), R(x), O(x)$ masingmasing adalah kombinasi polinomial yang sesuai dengan setiap baris matriks $A, B, C$. Jika pembukti mengetahui solusi yang benar (Witness), maka pada setiap akar (titik evaluasi) dari $P(x)$ nilainya akan menjadi 0, sehingga $P(x)$ akan memiliki polinomial target $Z(x)$ sebagai faktor. Dengan kata lain, terdapat suatu polinomial $H(x)$ sehingga berlaku persamaan berikut:&lt;/p>
$$ P(x) = H(x) \cdot Z(x) $$
&lt;p>Pemverifikasi hanya perlu memeriksa apakah persamaan $P(s) = H(s) \cdot Z(s)$ berlaku pada sebuah titik rahasia acak $s$, dan ia dapat langsung memverifikasi bahwa keseluruhan perhitungan telah dilakukan dengan benar. Inilah rahasia dari &amp;ldquo;Succinct&amp;rdquo; (keringkasan).&lt;/p>
&lt;h3 id="3-kriptografi-kurva-eliptik-dan-pasangan-bilinear-pairings">3. Kriptografi Kurva Eliptik dan Pasangan (Bilinear Pairings)
&lt;/h3>&lt;p>Namun, jika pemverifikasi mengetahui titik rahasia $s$, pembukti dapat merekayasa polinomial palsu yang memenuhi persamaan tersebut (keruntuhan kekukuhan). Oleh karena itu, komputasi harus dilakukan dengan mengenkripsi $s$ (menggunakan enkripsi homomorfik) sehingga tidak diketahui oleh siapa pun.&lt;/p>
&lt;p>Hal ini diwujudkan dengan &lt;strong>Pasangan Kurva Eliptik (Bilinear Pairings)&lt;/strong>.
Pasangan (Pairing) $e$ adalah sebuah fungsi khusus yang mampu menghitung nilai enkripsi dari perkalian dua buah nilai yang terenkripsi.&lt;/p>
$$ e(g_1^a, g_2^b) = e(g_1, g_2)^{ab} $$
&lt;p>Pembukti menghitung nilai terenkripsi dari polinomial $P(s)$ dan $H(s)$ menggunakan nilai terenkripsi dari pangkat $s$ (disebut CRS: Common Reference String), tanpa perlu mengetahui $s$ itu sendiri. Pemverifikasi menggunakan fungsi pasangan untuk memverifikasi apakah hubungan $P(s) = H(s) \cdot Z(s)$ berlaku, langsung dalam bentuk nilai yang terenkripsi.&lt;/p>
&lt;h3 id="4-pengaturan-terpercaya-trusted-setup">4. Pengaturan Terpercaya (Trusted Setup)
&lt;/h3>&lt;p>Kelemahan terbesar zk-SNARKs (terutama Groth16 versi awal) adalah perlunya proses untuk menghasilkan titik rahasia $s$, yang disebut &lt;strong>Pengaturan Terpercaya (Trusted Setup)&lt;/strong>. Jika pembuat $s$ tidak membuangnya dan menyimpannya, mereka dapat menghasilkan bukti palsu apa pun (masalah Limbah Beracun / Toxic Waste).&lt;/p>
&lt;p>Untuk mencegahnya, sebuah upacara yang disebut &amp;ldquo;Ceremony&amp;rdquo; diadakan menggunakan Komputasi Multi-Pihak (Multi-Party Computation / MPC). Banyak peserta bekerja sama untuk menyediakan nilai acak, dan jika setidaknya satu peserta membuang nilai acaknya dengan jujur, keamanan seluruh sistem akan tetap terjaga. Namun, penelitian untuk menghilangkan ketergantungan ini telah berlangsung selama bertahun-tahun.&lt;/p>
&lt;hr>
&lt;h2 id="detail-teknis-zk-starks">Detail Teknis zk-STARKs
&lt;/h2>&lt;p>Sebagai jawaban atas ketergantungan pada pengaturan terpercaya dan risiko dekripsi kriptografi kurva eliptik oleh komputer kuantum, muncullah &lt;strong>zk-STARKs&lt;/strong> (Zero-Knowledge Scalable Transparent Argument of Knowledge).&lt;/p>
&lt;p>STARKs yang dikembangkan oleh Eli Ben-Sasson dan kawan-kawan memiliki karakteristik sesuai namanya, yaitu &amp;ldquo;Transparent&amp;rdquo; (Transparan) karena sama sekali tidak memerlukan pengaturan terpercaya, dan &amp;ldquo;Scalable&amp;rdquo; (Terukur) di mana ukuran bukti dan waktu verifikasi tetap efisien meskipun jumlah komputasi meningkat.&lt;/p>
&lt;h3 id="1-komitmen-polinomial-dan-protokol-fri">1. Komitmen Polinomial dan Protokol FRI
&lt;/h3>&lt;p>zk-STARKs tidak menggunakan kriptografi kurva eliptik, melainkan mendasarkan keamanannya &lt;strong>hanya pada fungsi hash&lt;/strong>. Oleh karena itu, ia memiliki sifat sebagai kriptografi pasca-kuantum (Post-Quantum Cryptography).&lt;/p>
&lt;p>Verifikasi perhitungan dilakukan menggunakan sifat polinomial satu dimensi atau multi-dimensi setelah diubah menjadi format yang disebut AIR (Algebraic Intermediate Representation). Inti dari STARKs terletak pada protokol &lt;strong>FRI (Fast Reed-Solomon Interactive Oracle Proof of Proximity)&lt;/strong>.&lt;/p>
&lt;p>Protokol FRI adalah teknologi untuk memverifikasi &amp;ldquo;apakah suatu fungsi cukup dekat dengan polinomial dengan derajat tertentu (Proximity)&amp;rdquo;. Pembukti melakukan komitmen (komitmen polinomial) dengan menjadikan nilai-nilai polinomial sebagai daun (leaf) dari Pohon Merkle (Merkle Tree).&lt;/p>
&lt;div class="mermaid">graph TD
Root["Akar Merkle (Komitmen)"] --> Node0["Node 0"]
Root --> Node1["Node 1"]
Node0 --> Leaf0["P(x_0)"]
Node0 --> Leaf1["P(x_1)"]
Node1 --> Leaf2["P(x_2)"]
Node1 --> Leaf3["P(x_3)"]&lt;/div>
&lt;p>Pemverifikasi akan meminta pembukaan beberapa titik secara acak, lalu menggunakan bukti Merkle (Merkle Proof) untuk mengonfirmasi bahwa titik-titik tersebut termasuk dalam komitmen. Dengan mengulang proses ini secara rekursif, dapat dijamin dengan probabilitas yang sangat besar bahwa derajat polinomial aslinya memang rendah.&lt;/p>
&lt;h3 id="perbandingan-antara-zk-snarks-dan-zk-starks">Perbandingan antara zk-SNARKs dan zk-STARKs
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Karakteristik&lt;/th>
&lt;th style="text-align:left">zk-SNARKs&lt;/th>
&lt;th style="text-align:left">zk-STARKs&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Asumsi Kriptografis&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Kurva eliptik, pasangan (pairing)&lt;/td>
&lt;td style="text-align:left">Fungsi hash tahan bentrokan (collision-resistant)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Pengaturan Terpercaya&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Diperlukan (seperti Plonk bersifat universal)&lt;/td>
&lt;td style="text-align:left">Tidak diperlukan (Transparent)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Tahan Kuantum&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Tidak&lt;/td>
&lt;td style="text-align:left">Ya&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Ukuran Bukti&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Sangat kecil (~200 Byte)&lt;/td>
&lt;td style="text-align:left">Agak besar (puluhan KB)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Biaya Komputasi Pembuatan Bukti&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Tinggi&lt;/td>
&lt;td style="text-align:left">Relatif lebih rendah dari SNARKs&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Biaya Verifikasi (Biaya Gas)&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Sangat rendah (konstan)&lt;/td>
&lt;td style="text-align:left">Rendah (meningkat secara logaritmik)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Dalam beberapa tahun terakhir, dengan munculnya &amp;ldquo;SNARKs yang tidak memerlukan pengaturan terpercaya atau hanya sekali saja&amp;rdquo; seperti Plonk atau Halo2, batas antara SNARKs dan STARKs perlahan menjadi kabur, tetapi perbedaan pendekatan matematis dasar antara keduanya tetap penting.&lt;/p>
&lt;hr>
&lt;h2 id="aplikasi-terkini-zero-knowledge-proof-pada-web3-dan-keamanan">Aplikasi Terkini Zero-Knowledge Proof pada Web3 dan Keamanan
&lt;/h2>&lt;p>Setelah beralih dari teori ke praktik, ZKP saat ini sedang memicu revolusi di garis depan Web3 dan keamanan siber.&lt;/p>
&lt;h3 id="1-skala-puncak-ethereum-melalui-zk-rollups">1. Skala Puncak Ethereum Melalui ZK-Rollups
&lt;/h3>&lt;p>Blockchain L1 (Layer 1) seperti Ethereum terlalu memprioritaskan desentralisasi dan keamanan sehingga menghadapi keterbatasan besar dalam skalabilitas (trilema). Solusi L2 (Layer 2) definitif untuk memecahkan masalah ini adalah &lt;strong>ZK-Rollups&lt;/strong>.&lt;/p>
&lt;p>Pada ZK-Rollup, ribuan transaksi dieksekusi dan diproses secara off-chain (L2), lalu menghasilkan &amp;ldquo;sebuah ZKP (Bukti Validitas / Validity Proof)&amp;rdquo; yang menunjukkan bahwa semua transaksi tersebut telah dieksekusi dengan benar. Smart contract pada rantai L1 hanya perlu memverifikasi bukti ini.&lt;/p>
&lt;div class="mermaid">flowchart LR
Users["Users (Kirim Tx)"] --> Sequencer["Sequencer (Kumpul &amp; Eksekusi Tx)"]
Sequencer --> Prover["Prover (Pembuat ZKP)"]
Sequencer --> L1Contract["L1 Smart Contract (Publikasi Data Tx)"]
Prover --> L1Contract["Penyerahan ZKP (Bukti)"]
L1Contract --> Verify["Verifikasi &amp; Pembaruan Status"]&lt;/div>
&lt;p>Keuntungan terbesar dari ZK-Rollups adalah, berbeda dengan Optimistic Rollups (seperti Arbitrum atau Optimism), ia tidak memerlukan masa tantangan (biasanya 7 hari) untuk bukti kecurangan (Fraud Proof). Karena kebenarannya dijamin secara kriptografis, penarikan dana ke L1 (Finalitas) akan selesai seketika begitu bukti berhasil diverifikasi. Saat ini, proyek-proyek seperti zkSync, Starknet, Scroll, dan Polygon zkEVM sedang bersaing ketat dalam pengembangan, dan perwujudan &lt;strong>zkEVM&lt;/strong> yang kompatibel dengan EVM (Ethereum Virtual Machine) mendorong pertumbuhan ekosistem dengan sangat pesat.&lt;/p>
&lt;h3 id="2-identitas-pelindung-privasi-zkp-untuk-identitas">2. Identitas Pelindung Privasi (ZKP untuk Identitas)
&lt;/h3>&lt;p>Cara autentikasi pribadi di dunia digital juga akan berubah secara fundamental oleh ZKP.
Sebagai contoh, ketika ditanya &amp;ldquo;Apakah Anda berusia 18 tahun ke atas?&amp;rdquo;, pada sistem konvensional, Anda harus menunjukkan SIM atau paspor, yang secara tidak langsung memberikan informasi pribadi yang tidak diperlukan seperti nama dan alamat kepada pihak lain.&lt;/p>
&lt;p>Dengan menggunakan ZKP, berdasarkan sertifikat digital (Verifiable Credential) yang diterbitkan oleh instansi publik, seseorang &lt;strong>hanya perlu membuktikan secara matematis fakta&lt;/strong> bahwa &amp;ldquo;Berdasarkan tanggal lahir saya, saat ini saya berusia 18 tahun ke atas&amp;rdquo;. Pemverifikasi hanya perlu memverifikasi tanda tangan sertifikat dan ZKP, tanpa bisa mengetahui tanggal lahir atau identitas asli pengguna.&lt;/p>
&lt;p>Pada proyek Proof of Personhood (bukti kemanusiaan) seperti Worldcoin, data selaput pelangi (iris) mata tidak disimpan atau dibagikan secara langsung. Sebaliknya, mereka menggunakan ZKP untuk membuktikan &amp;ldquo;hanya bahwa seseorang adalah manusia yang unik&amp;rdquo;.&lt;/p>
&lt;h3 id="3-smart-contract-rahasia-dan-penggunaan-di-tingkat-perusahaan-enterprise">3. Smart Contract Rahasia dan Penggunaan di Tingkat Perusahaan (Enterprise)
&lt;/h3>&lt;p>Sifat blockchain publik di mana &amp;ldquo;semua data dipublikasikan&amp;rdquo; sebelumnya menjadi hambatan besar bagi perusahaan ketika mereka ingin mengelola transaksi rahasia atau informasi rantai pasokan di atas blockchain.&lt;/p>
&lt;p>Dengan menggunakan teknologi ZKP (misalnya pada jaringan yang berfokus pada privasi seperti Aleo atau Aztec), kita dapat mengenkripsi nilai masukan transaksi, nilai keluaran, bahkan logika smart contract yang dieksekusi, dan hanya mencatatkan kebenaran dari pembaruan status ke dalam rantai publik. Hal ini memungkinkan pencegahan front-running (MEV) dalam DeFi (Keuangan Terdesentralisasi) serta pembentukan jaringan konsorsium rahasia antarperusahaan, sembari tetap menikmati tingkat keamanan yang tinggi dari rantai publik.&lt;/p>
&lt;hr>
&lt;h2 id="tantangan-dan-prospek-zkp-ke-depan">Tantangan dan Prospek ZKP ke Depan
&lt;/h2>&lt;p>ZKP tidak diragukan lagi merupakan teknologi dasar generasi berikutnya, tetapi masih menyisakan beberapa tantangan:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Biaya Komputasi Pembuatan Bukti dan Akselerasi Perangkat Keras&lt;/strong>
Pembuatan ZKP memerlukan operasi polinomial yang sangat besar, FFT (Fast Fourier Transform), dan MSM (Multi-Scalar Multiplication). Saat ini, penelitian tentang pengembangan perangkat keras khusus (FPGA atau ASIC) untuk mempercepat pembuatan bukti ini, atau yang disebut &lt;strong>Penambangan ZKP (Prover Network)&lt;/strong>, sedang berkembang pesat.&lt;/li>
&lt;li>&lt;strong>Standardisasi dan Peningkatan Pengalaman Pengembang (DX)&lt;/strong>
Banyak bahasa khusus yang bermunculan untuk menulis sirkuit ZKP, seperti Circom, Cairo, Noir, Leo, dan lain-lain. Kemampuan untuk menyatukan standar ini dan kematangan kompiler yang secara otomatis dapat menghasilkan sirkuit ZKP dari bahasa pemrograman yang ada seperti Rust atau C++ akan menjadi kunci bagi para rekayasawan perangkat lunak umum untuk mengadopsi ZKP.&lt;/li>
&lt;/ol>
&lt;h2 id="penutup">Penutup
&lt;/h2>&lt;p>Zero-Knowledge Proof (ZKP) telah berevolusi dari sekadar &amp;ldquo;teknologi untuk meningkatkan anonimitas mata uang kripto&amp;rdquo; menjadi &amp;ldquo;teknologi serbaguna yang mendefinisikan ulang kepercayaan (trust) di seluruh internet&amp;rdquo;. Bukti kecil yang dihitung dari kedalaman formula matematika dan teori kriptografi ini akan menjadi perisai kuat yang melindungi privasi kita, sekaligus memperluas skalabilitas blockchain tanpa batas.&lt;/p>
&lt;p>Dalam mewujudkan adopsi massal Web3 yang sesungguhnya dan membangun internet generasi mendatang yang aman dan privat, Zero-Knowledge Proof akan terus berfungsi sebagai bagian yang paling penting. Evolusi teknologi ZKP ke depannya sangat patut untuk terus diperhatikan.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Referensi dan Tautan Terkait&lt;/em>&lt;/p>
&lt;ul>
&lt;li>Groth, J. (2016). &amp;ldquo;On the Size of Pairing-based Non-interactive Arguments&amp;rdquo;&lt;/li>
&lt;li>Ben-Sasson, E., et al. (2018). &amp;ldquo;Scalable, transparent, and post-quantum secure computational integrity&amp;rdquo;&lt;/li>
&lt;li>Vitalik Buterin&amp;rsquo;s blog on zk-SNARKs and zk-STARKs&lt;/li>
&lt;/ul></description></item><item><title>Hipotesis Riemann dan Distribusi Bilangan Prima: Hubungan Mendalam dengan Kriptografi Modern</title><link>http://kenji.blog/id/p/riemann-hypothesis-prime-distribution-cryptography/</link><pubDate>Fri, 11 Sep 2026 16:00:00 +0900</pubDate><guid>http://kenji.blog/id/p/riemann-hypothesis-prime-distribution-cryptography/</guid><description>&lt;img src="http://kenji.blog/p/riemann-hypothesis-prime-distribution-cryptography/img/eyecatch.jpg" alt="Featured image of post Hipotesis Riemann dan Distribusi Bilangan Prima: Hubungan Mendalam dengan Kriptografi Modern" />&lt;h1 id="1-pendahuluan-misteri-alam-semesta-bilangan-prima-dan-hipotesis-riemann">1. Pendahuluan: Misteri Alam Semesta Bilangan Prima dan Hipotesis Riemann
&lt;/h1>&lt;p>&amp;ldquo;Bilangan prima (Prime Numbers)&amp;rdquo; adalah bilangan asli yang hanya bisa dibagi oleh 1 dan bilangan itu sendiri, yang juga sering disebut sebagai &amp;ldquo;atom&amp;rdquo; dalam dunia matematika. Deret bilangan 2, 3, 5, 7, 11, 13&amp;hellip; ini pada pandangan pertama terlihat tidak beraturan dan muncul secara acak. Sejak matematikawan Yunani kuno, Euclid, membuktikan bahwa &amp;ldquo;bilangan prima jumlahnya tak terhingga&amp;rdquo;, tak terhitung banyaknya matematikawan yang menantang diri mereka untuk mengungkap keteraturan yang tersembunyi di balik susunan bilangan prima ini.&lt;/p>
&lt;p>Yang paling mendekati misteri bilangan prima ini adalah &lt;strong>&amp;ldquo;Hipotesis Riemann (Riemann Hypothesis)&amp;rdquo;&lt;/strong>, yang diusulkan oleh matematikawan Jerman, Bernhard Riemann, pada tahun 1859. Hipotesis Riemann adalah salah satu dari masalah terpenting dan belum terpecahkan dalam matematika modern, serta merupakan salah satu dari Masalah Hadiah Milenium (Millennium Prize Problems) yang ditetapkan oleh Clay Mathematics Institute dengan hadiah sebesar 1 juta dolar.&lt;/p>
&lt;p>Sekilas, masalah sulit matematika murni terkait distribusi bilangan prima mungkin terasa tidak ada hubungannya dengan kehidupan kita sehari-hari. Namun, keamanan internet yang menopang infrastruktur masyarakat modern, terutama &lt;strong>teknologi kriptografi modern seperti kriptografi RSA dan kriptografi kurva eliptik (ECC)&lt;/strong>, sangat bergantung pada sifat-sifat bilangan prima yang sangat besar.&lt;/p>
&lt;p>Dalam artikel ini, kita akan melakukan perjalanan matematis dari distribusi bilangan prima menuju Teorema Bilangan Prima, fungsi Zeta Riemann, hingga ke inti dari Hipotesis Riemann, lalu menggali lebih dalam dan detail tentang bagaimana hal tersebut terhubung dengan teknologi kriptografi modern, serta apa yang akan terjadi pada dunia jika Hipotesis Riemann berhasil dibuktikan.&lt;/p>
&lt;hr>
&lt;h1 id="2-teorema-bilangan-prima-dan-distribusi-bilangan-prima-penemuan-gauss">2. Teorema Bilangan Prima dan Distribusi Bilangan Prima: Penemuan Gauss
&lt;/h1>&lt;p>Untuk memahami bagaimana bilangan prima terdistribusi, para matematikawan memikirkan &lt;strong>fungsi penghitungan bilangan prima (Prime-counting function)&lt;/strong> $\pi(x)$, yang menyatakan &amp;ldquo;berapa banyak bilangan prima yang ada di bawah suatu bilangan $x$&amp;rdquo;.&lt;/p>
&lt;p>Sebagai contoh:&lt;/p>
&lt;ul>
&lt;li>$\pi(10) = 4$ (2, 3, 5, 7)&lt;/li>
&lt;li>$\pi(100) = 25$&lt;/li>
&lt;li>$\pi(1000) = 168$&lt;/li>
&lt;/ul>
&lt;p>Carl Friedrich Gauss, seorang matematikawan jenius berusia 15 tahun, menghitung tabel bilangan prima yang sangat besar dan menemukan bahwa frekuensi kemunculan bilangan prima berkurang secara berbanding terbalik dengan logaritma natural $\ln x$. Dengan kata lain, ia memperkirakan bahwa peluang menemukan bilangan prima di sekitar suatu bilangan $x$ adalah sekitar $\frac{1}{\ln x}$.&lt;/p>
&lt;p>Representasi dari penemuan ini menggunakan integral disebut &lt;strong>integral logaritmik (Logarithmic integral)&lt;/strong> $\text{Li}(x)$.&lt;/p>
$$ \text{Li}(x) = \int_{2}^{x} \frac{dt}{\ln t} $$
&lt;p>Perkiraan Gauss kemudian dibuktikan secara independen oleh Jacques Hadamard dan Charles-Jean de La Vallée Poussin pada tahun 1896, yang memantapkannya sebagai &lt;strong>Teorema Bilangan Prima (Prime Number Theorem, PNT)&lt;/strong>.&lt;/p>
$$ \lim_{x \to \infty} \frac{\pi(x)}{\text{Li}(x)} = 1 $$
&lt;p>Atau secara pendekatan dinyatakan sebagai berikut.&lt;/p>
$$ \pi(x) \sim \frac{x}{\ln x} $$
&lt;p>Melalui teorema ini, kita mengetahui bahwa jika dilihat secara makroskopis, bilangan prima memiliki distribusi yang sangat mulus dan dapat diprediksi. Namun, jika dilihat secara mikroskopis, selalu terdapat &amp;ldquo;galat (error)&amp;rdquo; atau &amp;ldquo;fluktuasi&amp;rdquo; antara $\pi(x)$ dan $\text{Li}(x)$. Sifat asli dari fluktuasi inilah misteri terbesar yang coba dipecahkan oleh Hipotesis Riemann.&lt;/p>
&lt;hr>
&lt;h1 id="3-fungsi-zeta-riemann-dan-produk-euler">3. Fungsi Zeta Riemann dan Produk Euler
&lt;/h1>&lt;p>Senjata paling kuat dalam menganalisis distribusi bilangan prima adalah &lt;strong>Fungsi Zeta Riemann (Riemann Zeta Function)&lt;/strong>. Awalnya, fungsi ini adalah deret tak terhingga yang didefinisikan untuk bilangan real $s > 1$ oleh Leonhard Euler.&lt;/p>
$$ \zeta(s) = \sum_{n=1}^\infty \frac{1}{n^s} = 1 + \frac{1}{2^s} + \frac{1}{3^s} + \frac{1}{4^s} + \dots $$
&lt;p>Salah satu pencapaian terbesar Euler adalah membuktikan bahwa deret tak terhingga ini dapat dinyatakan sebagai produk tak terhingga (perkalian tak terhingga) atas semua bilangan prima $p$. Inilah yang disebut dengan &lt;strong>Produk Euler (Euler Product Formula)&lt;/strong>.&lt;/p>
$$ \zeta(s) = \prod_{p \text{ prime}} \frac{1}{1 - p^{-s}} = \left( \frac{1}{1 - 2^{-s}} \right) \left( \frac{1}{1 - 3^{-s}} \right) \left( \frac{1}{1 - 5^{-s}} \right) \dots $$
&lt;p>Pemahaman intuitif dari pembuktian ini adalah dengan mengekspansi setiap suku di ruas kanan sebagai deret geometri, lalu mengalikannya. Berdasarkan Teorema Dasar Aritmetika (setiap bilangan asli dapat direpresentasikan secara unik sebagai hasil kali bilangan prima), jumlah kebalikan dari bilangan asli pada ruas kiri akan direkonstruksi sepenuhnya.&lt;/p>
&lt;p>&lt;strong>Satu rumus matematika ini menjadi jembatan yang menghubungkan analisis (deret tak terhingga, fungsi kontinu) dengan teori bilangan (bilangan prima, angka diskrit).&lt;/strong> Menyelidiki fungsi zeta sama artinya dengan menyelidiki distribusi bilangan prima.&lt;/p>
&lt;hr>
&lt;h1 id="4-perluasan-analitik-dan-perluasan-ke-bidang-kompleks">4. Perluasan Analitik dan Perluasan ke Bidang Kompleks
&lt;/h1>&lt;p>Kejeniusan Riemann terletak pada kenyataan bahwa ia memperluas variabel $s$ dalam $\zeta(s)$, yang awalnya hanya dipertimbangkan Euler pada bilangan real, menjadi &lt;strong>bilangan kompleks $s = \sigma + it$ ($\sigma$ adalah bagian real, $t$ adalah bagian imajiner)&lt;/strong>.&lt;/p>
&lt;p>Deret tak terhingga aslinya hanya konvergen pada $\sigma > 1$, namun Riemann menggunakan metode yang disebut &amp;ldquo;Perluasan Analitik (Analytic Continuation)&amp;rdquo; untuk memperluas definisi sehingga $\zeta(s)$ memiliki arti di seluruh bidang kompleks, kecuali pada titik kutub $s = 1$.&lt;/p>
&lt;p>Lebih lanjut, ia menurunkan persamaan fungsional (Functional equation) indah yang dipenuhi oleh fungsi zeta.&lt;/p>
$$ \zeta(s) = 2^s \pi^{s-1} \sin\left(\frac{\pi s}{2}\right) \Gamma(1-s) \zeta(1-s) $$
&lt;p>Di sini, $\Gamma(x)$ adalah fungsi Gamma. Berdasarkan persamaan ini, kita dapat mengetahui sifat di bidang sebelah kiri dari sifat di bidang sebelah kanan.&lt;/p>
&lt;h3 id="pembuat-nol-zeros-of-the-zeta-function">Pembuat Nol (Zeros of the Zeta Function)
&lt;/h3>&lt;p>Bilangan kompleks $s$ yang membuat nilai fungsi zeta menjadi 0 disebut sebagai &amp;ldquo;pembuat nol&amp;rdquo; (titik nol).
Dari persamaan fungsional, ketika $s$ adalah bilangan genap negatif ($-2, -4, -6, \dots$), nilai $\sin(\pi s / 2)$ menjadi 0, sehingga $\zeta(s) = 0$. Ini disebut sebagai &lt;strong>pembuat nol trivial (Trivial zeros)&lt;/strong>.&lt;/p>
&lt;p>Namun, yang penting dalam distribusi bilangan prima adalah pembuat nol lainnya, yaitu &lt;strong>pembuat nol non-trivial (Non-trivial zeros)&lt;/strong> yang berada di dalam &amp;ldquo;jalur kritis (Critical strip)&amp;rdquo; $0 \le \sigma \le 1$.&lt;/p>
&lt;hr>
&lt;h1 id="5-inti-dari-hipotesis-riemann-dan-rumus-eksplisit">5. Inti dari Hipotesis Riemann dan Rumus Eksplisit
&lt;/h1>&lt;p>Riemann menghitung sejumlah kecil pembuat nol dan merumuskan sebuah dugaan yang mengejutkan. Inilah &lt;strong>Hipotesis Riemann&lt;/strong>.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Hipotesis Riemann (Riemann Hypothesis)&lt;/strong>
Semua pembuat nol non-trivial dari fungsi zeta Riemann $\zeta(s)$ berada pada garis dengan bagian real $1/2$ ($\text{Re}(s) = 1/2$).&lt;/p>
&lt;/blockquote>
&lt;p>Garis dengan bagian real 1/2 ini disebut sebagai &amp;ldquo;Garis kritis (Critical line)&amp;rdquo;.&lt;/p>
&lt;div class="mermaid">graph TD
A["Fungsi Zeta Riemann ζ(s)"] --> B["Perluasan ke bidang kompleks dengan perluasan analitik"]
B --> C["Pembuat nol trivial (s = -2, -4, -6 ...)"]
B --> D["Pembuat nol non-trivial (0 &lt;= Re(s) &lt;= 1)"]
D --> E["Hipotesis Riemann"]
E --> F["Semua pembuat nol non-trivial berada pada Re(s) = 1/2"]
F --> G["Menuju pembuktian limit suku galat dari distribusi bilangan prima"]&lt;/div>
&lt;p>Mengapa Hipotesis Riemann begitu penting? Hal itu karena pembuat nol dari fungsi zeta &lt;strong>sepenuhnya&lt;/strong> menentukan distribusi bilangan prima.&lt;/p>
&lt;p>Riemann dan kemudian matematikawan von Mangoldt, menurunkan &amp;ldquo;Rumus eksplisit (Explicit formula)&amp;rdquo; yang mendeskripsikan distribusi bilangan prima dengan akurat. Dengan menggunakan fungsi Chebyshev $\psi(x)$, hal tersebut diekspresikan sebagai berikut.&lt;/p>
$$ \psi(x) = x - \sum_{\rho} \frac{x^\rho}{\rho} - \ln(2\pi) - \frac{1}{2}\ln(1 - x^{-2}) $$
&lt;p>Di sini, $\rho$ adalah penjumlahan atas semua pembuat nol non-trivial dari fungsi zeta.
Suku utamanya adalah $x$ (yang berkorespondensi dengan Teorema Bilangan Prima), dan dengan menambahkan/mengurangkan suku berbentuk gelombang yang bergantung pada pembuat nol $\rho$, bentuk tangga distribusi bilangan prima yang akurat dapat dipulihkan. Dapat dikatakan bahwa pembuat nol non-trivial merepresentasikan &amp;ldquo;frekuensi (gelombang)&amp;rdquo; dari distribusi bilangan prima.&lt;/p>
&lt;p>Jika Hipotesis Riemann benar, dan bagian real dari semua pembuat nol non-trivial $\rho$ tepat bernilai $1/2$, maka suku galat pada Teorema Bilangan Prima secara teoretis akan berada pada rentang batas minimum yang mungkin terbayangkan.&lt;/p>
$$ |\pi(x) - \text{Li}(x)| \le \frac{1}{8\pi} \sqrt{x} \ln x \quad \text{untuk} \quad x \ge 2657 $$
&lt;p>Dengan kata lain, &lt;strong>jika Hipotesis Riemann terbukti benar, hal itu akan membuktikan bahwa bilangan prima terdistribusi dengan cara yang paling &amp;ldquo;teratur dan indah&amp;rdquo; yang dapat kita bayangkan&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h1 id="6-hubungan-yang-tak-terpisahkan-antara-teknologi-kriptografi-modern-dan-bilangan-prima">6. Hubungan yang Tak Terpisahkan Antara Teknologi Kriptografi Modern dan Bilangan Prima
&lt;/h1>&lt;p>Sejauh ini kita berada di ranah matematika murni yang mendalam, namun sifat bilangan prima ini menjadi pondasi dasar bagi masyarakat digital modern. Contoh utamanya adalah kriptografi kunci publik seperti &lt;strong>Kriptografi RSA&lt;/strong>.&lt;/p>
&lt;p>Keamanan dari berbagai komunikasi, mulai dari pembayaran kartu kredit di internet, pengiriman kata sandi, hingga tanda tangan digital pada blockchain, semuanya bergantung pada &amp;ldquo;bilangan prima&amp;rdquo;.&lt;/p>
&lt;h3 id="cara-kerja-kriptografi-rsa">Cara Kerja Kriptografi RSA
&lt;/h3>&lt;p>Keamanan kriptografi RSA didasarkan pada fakta matematis (masalah faktorisasi prima) bahwa &amp;ldquo;memfaktorkan bilangan komposit (majemuk) dengan jumlah digit yang besar adalah hal yang sangat sulit&amp;rdquo;.&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Pembuatan Kunci&lt;/strong>:
Pilih secara acak bilangan prima $p$ dan $q$ yang berukuran besar (misalnya masing-masing 2048 bit).
Kalikan keduanya untuk menghitung $N = p \times q$. Nilai $N$ ini menjadi bagian dari kunci publik.
Gunakan fungsi totient Euler $\phi(N) = (p-1)(q-1)$ untuk menghasilkan kunci privat $d$.&lt;/p>
$$ e \times d \equiv 1 \pmod{\phi(N)} $$
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Enkripsi dan Dekripsi&lt;/strong>:
Teks terang (plaintext) $M$ diubah menjadi teks sandi (ciphertext) $C$ menggunakan kunci publik $e$ dan $N$.
&lt;/p>
$$ C \equiv M^e \pmod{N} $$
&lt;p>
Hanya orang yang memiliki kunci privat $d$ yang bisa melakukan dekripsi.
&lt;/p>
$$ M \equiv C^d \pmod{N} $$
&lt;/li>
&lt;/ol>
&lt;div class="mermaid">graph LR
A["Teks Terang (Plaintext)"] --> B["Enkripsi dengan Kunci Publik (e, N)"]
B --> C["Teks Sandi (Ciphertext)"]
C --> D["Dekripsi dengan Kunci Privat (d)"]
D --> E["Teks Terang Asli"]
F["Penyerang (Attacker)"] -- "Mencoba faktorisasi prima dari N" --> C
F -.-> G["Tanpa mengetahui p dan q, d tidak dapat dihitung"]&lt;/div>
&lt;p>Untuk memecahkan kriptografi RSA, seseorang harus menemukan (melakukan faktorisasi prima) bilangan prima asli $p$ dan $q$ dari nilai $N$ yang sangat besar. Meskipun menggunakan algoritma arus utama saat ini (seperti General Number Field Sieve: GNFS), memfaktorkan angka dengan ratusan digit akan membutuhkan waktu jauh melampaui usia alam semesta, bahkan jika menggunakan superkomputer sekalipun.&lt;/p>
&lt;hr>
&lt;h1 id="7-dampak-hipotesis-riemann-terhadap-teknologi-kriptografi">7. Dampak Hipotesis Riemann terhadap Teknologi Kriptografi
&lt;/h1>&lt;p>Lalu, bagaimana &amp;ldquo;Hipotesis Riemann&amp;rdquo; yang berada di puncak matematika murni, bersinggungan dengan &amp;ldquo;teknologi kriptografi&amp;rdquo;?&lt;/p>
&lt;h3 id="71-algoritma-pembangkitan-bilangan-prima-pengujian-keprimaan-dan-hipotesis-riemann-yang-diperluas-grh">7.1. Algoritma Pembangkitan Bilangan Prima (Pengujian Keprimaan) dan Hipotesis Riemann yang Diperluas (GRH)
&lt;/h3>&lt;p>Untuk mengoperasikan kriptografi RSA, pertama-tama kita perlu membangkitkan bilangan prima $p$ dan $q$ yang berukuran sangat besar. Akan tetapi, tidaklah mudah untuk memastikan dengan cepat dan pasti apakah &amp;ldquo;suatu bilangan merupakan bilangan prima atau bukan&amp;rdquo;.&lt;/p>
&lt;p>Saat ini, metode yang digunakan secara praktis adalah algoritma probabilistik yang disebut &lt;strong>Uji Keprimaan Miller-Rabin (Miller-Rabin primality test)&lt;/strong>. Algoritma ini sangat cepat, namun memiliki risiko bahwa bilangan komposit disalahartikan sebagai bilangan prima atau disebut &amp;ldquo;bilangan prima semu (pseudoprime)&amp;rdquo; dengan probabilitas yang sangat kecil.&lt;/p>
&lt;p>Namun, jika kita berasumsi bahwa &lt;strong>&amp;ldquo;Hipotesis Riemann yang Diperluas (Generalized Riemann Hypothesis, GRH)&amp;rdquo;&lt;/strong>, yang memperluas Hipotesis Riemann pada fungsi L-Dirichlet bernilai benar, maka ceritanya akan berubah secara dramatis.
Jika GRH benar, batas atas dari jumlah pengujian dalam uji Miller-Rabin akan dijamin secara matematis, sehingga meningkatkannya dari sekadar algoritma probabilistik menjadi &lt;strong>&amp;ldquo;Algoritma Waktu Polinomial Deterministik&amp;rdquo;&lt;/strong> (Ini adalah fakta penting yang telah diketahui bahkan sebelum Uji Keprimaan AKS ditemukan).&lt;/p>
&lt;p>Dengan kata lain, Hipotesis Riemann (dan perluasannya) memainkan peranan langsung dalam memberikan kepastian mutlak pada pondasi dasar kriptografi: &amp;ldquo;apakah kita dapat membangkitkan bilangan prima raksasa secara cepat dan dengan keyakinan yang pasti&amp;rdquo;.&lt;/p>
&lt;h3 id="72-hubungan-dengan-algoritma-faktorisasi-prima">7.2. Hubungan dengan Algoritma Faktorisasi Prima
&lt;/h3>&lt;p>Pengetahuan tentang distribusi bilangan prima juga mutlak diperlukan ketika mengevaluasi kompleksitas komputasi dari algoritma pihak pemecah sandi (seperti General Number Field Sieve). Banyak algoritma faktorisasi prima bergantung pada distribusi &amp;ldquo;bilangan mulus (Smooth numbers: bilangan yang hanya memiliki faktor prima kecil)&amp;rdquo;.&lt;/p>
&lt;p>Untuk mengevaluasi secara ketat seberapa sering bilangan mulus ini muncul, pemahaman yang mendalam mengenai distribusi bilangan prima sangatlah diperlukan, dan di sinilah teknik teori bilangan analitik yang berhubungan langsung dengan fungsi zeta dan Hipotesis Riemann banyak digunakan. Jika Hipotesis Riemann berhasil dibuktikan, dan batas galat dari distribusi bilangan prima ditetapkan sepenuhnya, maka kita akan mampu mengidentifikasi batas performa algoritma faktorisasi prima secara lebih akurat.&lt;/p>
&lt;hr>
&lt;h1 id="8-jika-hipotesis-riemann-terbukti-apakah-kriptografi-akan-terpecahkan">8. Jika Hipotesis Riemann Terbukti, Apakah Kriptografi Akan Terpecahkan?
&lt;/h1>&lt;p>Terkadang muncul legenda urban yang mengatakan, &amp;ldquo;Jika Hipotesis Riemann terpecahkan, kriptografi RSA akan runtuh seketika&amp;rdquo;, tetapi &lt;strong>secara matematis hal ini tidaklah tepat&lt;/strong>.&lt;/p>
&lt;p>Pembuktian Hipotesis Riemann itu sendiri tidak serta merta akan langsung menghasilkan algoritma ajaib yang mempercepat faktorisasi prima secara drastis. Hipotesis Riemann pada dasarnya adalah teorema tentang &amp;ldquo;keteraturan distribusi bilangan prima secara makroskopis&amp;rdquo;, dan hal ini tidak serta merta memberikan petunjuk langsung tentang bilangan prima manakah yang dapat membagi bilangan $N$ tertentu (sifat secara lokal).&lt;/p>
&lt;p>Namun, dampaknya tidaklah nol.
Sebab, dalam proses pembuktian Hipotesis Riemann, probabilitas ditemukannya &lt;strong>&amp;ldquo;peralatan matematis baru&amp;rdquo; atau &amp;ldquo;metode analisis yang belum pernah diketahui&amp;rdquo;&lt;/strong> sangatlah tinggi. Melihat sejarah ke belakang, ketika Teorema Terakhir Fermat atau Konjektur Poincaré dibuktikan, teori-teori baru yang dikembangkan selama proses tersebut telah mendorong lompatan besar bagi matematika secara keseluruhan.&lt;/p>
&lt;p>Jika suatu metode geometri aljabar atau geometri non-komutatif yang belum diketahui dapat dimantapkan, di mana metode ini bisa mengontrol secara penuh sifat dari pembuat nol fungsi zeta Riemann, bukan tidak mungkin hal itu pada akhirnya berujung pada penemuan algoritma faktorisasi prima yang revolusioner (contohnya, algoritma klasik yang dapat mereduksi kompleksitas komputasi menjadi waktu polinomial). Dalam artian tersebut, para ahli kriptografi tidak pernah bisa memalingkan pandangannya dari perkembangan Hipotesis Riemann.&lt;/p>
&lt;h3 id="komputer-kuantum-dan-algoritma-shor">Komputer Kuantum dan Algoritma Shor
&lt;/h3>&lt;p>Ancaman yang lebih langsung dan nyata bagi teknologi kriptografi bukanlah pembuktian Hipotesis Riemann, melainkan &lt;strong>komputer kuantum&lt;/strong>. &amp;ldquo;Algoritma Shor&amp;rdquo;, yang dipublikasikan oleh Peter Shor pada tahun 1994, membuktikan bahwa jika terdapat komputer kuantum dengan performa yang cukup, faktorisasi prima dapat dipecahkan dalam waktu polinomial. Hal ini secara mendasar akan mematahkan kriptografi RSA maupun kriptografi kurva eliptik.&lt;/p>
&lt;p>Saat ini, transisi menuju &amp;ldquo;Kriptografi Pasca-Kuantum (Post-Quantum Cryptography, PQC)&amp;rdquo; (seperti kriptografi kisi/lattice-based cryptography), yang bahkan tidak dapat dipecahkan oleh komputer kuantum, sedang digalakkan di seluruh dunia. Teknologi kriptografi yang bergantung pada bilangan prima dalam beberapa artian mungkin sedang mendekati akhir masa keemasannya, namun nilai matematis dari bilangan prima itu sendiri tidak akan pernah pudar selamanya.&lt;/p>
&lt;hr>
&lt;h1 id="9-penutup-persimpangan-antara-abstraksi-matematika-dan-dunia-nyata">9. Penutup: Persimpangan Antara Abstraksi Matematika dan Dunia Nyata
&lt;/h1>&lt;div class="mermaid">graph TD
A["Eksplorasi Matematika Murni"] --> B["Pengungkapan Hipotesis Riemann"]
B --> C["Pemahaman Sempurna atas Distribusi Bilangan Prima"]
C --> D["Perkembangan Pesat pada Teori Bilangan dan Geometri Aljabar"]
D -.-> E["Kemungkinan Algoritma Faktorisasi Prima yang Baru"]
E -.-> F["Pembaruan Evaluasi Keamanan Teknologi Kriptografi"]
A --> G["Matematika Terapan dan Ilmu Komputer"]
G --> H["Efisiensi Pengujian Keprimaan dan Pembangkitan Kriptografi"]
H --> F&lt;/div>
&lt;p>Pencarian tiada henti akan bilangan prima yang telah berlangsung sejak zaman Yunani Kuno, melalui tangan jenius bernama Riemann, disublimasikan menjadi sebuah simfoni yang indah di atas bidang kompleks (yaitu pembuat nol fungsi zeta). Dan yang sangat menakjubkan, kristalisasi dari matematika yang murni ini, melintasi waktu berabad-abad, kini diaplikasikan sebagai tameng terkuat yang menjamin keamanan masyarakat internet.&lt;/p>
&lt;p>Hipotesis Riemann adalah sebuah eksistensi yang secara bersamaan menyimbolkan &amp;ldquo;keindahan yang abstrak&amp;rdquo; yang dimiliki matematika dan &amp;ldquo;daya aplikatifnya yang menakjubkan terhadap dunia fisik serta masyarakat nyata&amp;rdquo;.&lt;/p>
&lt;p>Kelak suatu hari, ketika puncak gunung raksasa matematika yang belum pernah ditaklukkan oleh siapa pun ini berhasil didaki, kita tidak hanya akan memahami secara utuh kebenaran semesta dari bilangan prima, tetapi juga akan mendapatkan sudut pandang yang sama sekali baru mengenai landasan dari masyarakat informasi ini. Pada akhirnya, mempelajari teknologi kriptografi juga berarti menelusuri sejarah kebijaksanaan umat manusia itu sendiri.&lt;/p></description></item><item><title>Sejarah Kriptografi: Dari Sandi Caesar hingga Kriptografi Pasca-Kuantum (PQC)</title><link>http://kenji.blog/id/p/history-of-cryptography-caesar-to-pqc/</link><pubDate>Fri, 11 Sep 2026 15:00:00 +0900</pubDate><guid>http://kenji.blog/id/p/history-of-cryptography-caesar-to-pqc/</guid><description>&lt;img src="http://kenji.blog/p/history-of-cryptography-caesar-to-pqc/img/eyecatch.jpg" alt="Featured image of post Sejarah Kriptografi: Dari Sandi Caesar hingga Kriptografi Pasca-Kuantum (PQC)" />&lt;h1 id="1-pendahuluan-apa-itu-kriptografi">1. Pendahuluan: Apa itu Kriptografi?
&lt;/h1>&lt;p>Kriptografi (Cryptography) adalah teknologi untuk menjaga kerahasiaan informasi, dan telah berevolusi bersamaan dengan sejarah umat manusia. Dari transmisi perintah rahasia dalam perang kuno hingga perlindungan informasi kartu kredit di internet modern, tujuan kriptografi tetap konsisten. Tujuannya adalah &amp;ldquo;memastikan bahwa hanya penerima yang dituju yang dapat memahami informasi tersebut, dan tidak dapat diuraikan oleh pihak ketiga&amp;rdquo;.&lt;/p>
&lt;p>Dalam keamanan informasi modern, kriptografi tidak hanya terbatas pada &amp;ldquo;kerahasiaan informasi (Kerahasiaan: Confidentiality)&amp;rdquo;, tetapi juga memainkan peran penting dalam &amp;ldquo;Integritas (Integrity)&amp;rdquo;, &amp;ldquo;Otentikasi (Authentication)&amp;rdquo;, dan &amp;ldquo;Nirsangkal (Non-repudiation)&amp;rdquo; dari data.&lt;/p>
&lt;p>Dalam artikel ini, kita akan mengungkap sejarah evolusi kriptografi dari perspektif teknis dan matematis, dimulai dari sandi substitusi sederhana kuno, mesin sandi mekanis, kriptografi kunci simetris dan kunci publik modern, hingga era &amp;ldquo;Kriptografi Pasca-Kuantum (PQC)&amp;rdquo; yang tiba dengan komersialisasi komputer kuantum.&lt;/p>
&lt;hr>
&lt;h1 id="2-era-kriptografi-klasik-substitusi-dan-transposisi-karakter">2. Era Kriptografi Klasik: Substitusi dan Transposisi Karakter
&lt;/h1>&lt;p>Asal-usul kriptografi berawal sejak sebelum masehi. Kriptografi awal terutama terdiri dari dua pendekatan: &amp;ldquo;Transposisi (penyusunan ulang)&amp;rdquo; dan &amp;ldquo;Substitusi (penggantian)&amp;rdquo;.&lt;/p>
&lt;h2 id="sandi-scytale-sandi-transposisi">Sandi Scytale (Sandi Transposisi)
&lt;/h2>&lt;p>&amp;ldquo;Scytale&amp;rdquo;, yang digunakan di Sparta, Yunani Kuno pada abad ke-5 SM, adalah salah satu perangkat kriptografi tertua. Sepotong perkamen tipis dililitkan pada tongkat kayu dengan ketebalan tertentu, dan pesan ditulis secara horizontal di atasnya. Ketika perkamen dibuka, huruf-huruf tersusun dalam urutan yang tidak dapat dipahami, tetapi penerima yang memiliki tongkat dengan ketebalan yang sama dapat membaca pesan asli dengan melilitkan kembali perkamen tersebut.&lt;/p>
&lt;h2 id="sandi-caesar-sandi-substitusi-monoalfabetik">Sandi Caesar (Sandi Substitusi Monoalfabetik)
&lt;/h2>&lt;p>&amp;ldquo;Sandi Caesar&amp;rdquo;, yang konon digunakan oleh pahlawan Romawi Kuno Julius Caesar pada abad ke-1 SM, adalah sandi substitusi monoalfabetik (Monoalphabetic substitution) yang menggeser alfabet sejumlah tertentu (biasanya 3 huruf).&lt;/p>
&lt;p>Secara matematis, dengan menganggap huruf sebagai angka dari $0$ hingga $25$, dan jumlah pergeseran adalah $K$, transformasi dari plainteks $P$ menjadi cipherteks $C$ direpresentasikan oleh kongruensi berikut:&lt;/p>
$$C \equiv P + K \pmod{26}$$
&lt;p>Dekripsi dilakukan dengan operasi kebalikannya:&lt;/p>
$$P \equiv C - K \pmod{26}$$
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Contoh implementasi sederhana Sandi Caesar dengan Python&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">caesar_cipher&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">text&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">shift&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mode&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;encrypt&amp;#34;&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">mode&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s2">&amp;#34;decrypt&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">shift&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="n">shift&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="n">char&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">text&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">char&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">isalpha&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">base&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;A&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">if&lt;/span> &lt;span class="n">char&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">isupper&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">else&lt;/span> &lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;a&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Perhitungan pergeseran&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="nb">chr&lt;/span>&lt;span class="p">((&lt;/span>&lt;span class="nb">ord&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">char&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="n">base&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">shift&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">26&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">base&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">result&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">char&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">result&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Contoh eksekusi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">plaintext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;HELLO WORLD&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">ciphertext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">caesar_cipher&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">plaintext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s2">&amp;#34;encrypt&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Cipherteks: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># KHOOR ZRUOG&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="analisis-frekuensi-dan-sandi-vigenère">Analisis Frekuensi dan Sandi Vigenère
&lt;/h2>&lt;p>Sandi substitusi monoalfabetik dengan mudah dipecahkan oleh &amp;ldquo;Analisis Frekuensi (Frequency Analysis)&amp;rdquo; yang diciptakan oleh cendekiawan Arab abad ke-9, Al-Kindi. Ini memanfaatkan karakteristik statistik bahasa, seperti fakta bahwa &amp;ldquo;E&amp;rdquo; dan &amp;ldquo;T&amp;rdquo; sering muncul dalam bahasa Inggris.&lt;/p>
&lt;p>Untuk melawan hal ini, &amp;ldquo;Sandi Vigenère (Vigenère cipher)&amp;rdquo; diciptakan pada abad ke-16. Ini adalah sandi substitusi polialfabetik (Polyalphabetic substitution) yang secara periodik mengganti beberapa pergeseran (kunci), dan selama sekitar 300 tahun disebut &amp;ldquo;Sandi yang tidak dapat dipecahkan (Le Chiffre Indéchiffrable)&amp;rdquo;.&lt;/p>
&lt;p>Secara matematis, huruf ke-$i$ dari plainteks $P_i$ dan huruf ke-$i$ dari kunci yang berulang $K_i$ dienkripsi sebagai berikut:&lt;/p>
$$C_i \equiv P_i + K_i \pmod{26}$$
&lt;p>Sandi ini juga akhirnya dipecahkan pada abad ke-19 ketika Charles Babbage dan Friedrich Kasiski menemukan &amp;ldquo;Ujian Kasiski (Kasiski examination)&amp;rdquo;, yang menentukan panjang kunci dari pola yang berulang dalam cipherteks.&lt;/p>
&lt;div class="mermaid">graph TD
subgraph "Klasifikasi Kriptografi Klasik"
A["Kriptografi Klasik"] --> B["Sandi Transposisi"]
A --> C["Sandi Substitusi"]
B --> D["Sandi Scytale"]
C --> E["Substitusi Monoalfabetik"]
C --> F["Substitusi Polialfabetik"]
E --> G["Sandi Caesar"]
F --> H["Sandi Vigenère"]
end&lt;/div>
&lt;hr>
&lt;h1 id="3-kriptografi-mekanis-dan-perang-dunia-enigma-dan-pemecahannya">3. Kriptografi Mekanis dan Perang Dunia: Enigma dan Pemecahannya
&lt;/h1>&lt;p>Memasuki abad ke-20, alat komunikasi beralih dari surat ke telegraf dan radio, menuntut kecepatan dan kompleksitas dalam enkripsi. Di sinilah muncul &amp;ldquo;Sandi Mekanis&amp;rdquo; yang menggabungkan rotor (piringan berputar).&lt;/p>
&lt;h2 id="ancaman-enigma">Ancaman Enigma
&lt;/h2>&lt;p>Selama Perang Dunia II, &amp;ldquo;Enigma&amp;rdquo; yang digunakan oleh Nazi Jerman adalah mesin sandi paling terkenal dalam sejarah kriptografi. Enigma terdiri dari beberapa rotor (biasanya 3-4), sebuah plugboard (Steckerbrett) yang menukar koneksi huruf, dan sebuah reflektor (rotor pembalik).&lt;/p>
&lt;p>Setiap kali sebuah huruf diketik pada keyboard, rotor berputar, sehingga meskipun huruf yang sama diketik berturut-turut, huruf sandi yang berbeda akan dihasilkan (puncak dari sandi polialfabetik). Ruang kunci (kombinasi pengaturan) mencapai sekitar $1.58 \times 10^{19}$ (sekitar 15,8 kuintiliun), dan dengan teknologi saat itu dianggap tidak mungkin untuk dipecahkan dengan serangan brute force.&lt;/p>
&lt;h2 id="alan-turing-dan-bombe">Alan Turing dan &amp;ldquo;Bombe&amp;rdquo;
&lt;/h2>&lt;p>Tim pemecah kode Bletchley Park di Inggris, yang melanjutkan pencapaian awal ahli matematika Polandia seperti Marian Rejewski, menantang Enigma yang tampaknya tidak dapat ditembus ini.&lt;/p>
&lt;p>Secara khusus, Alan Turing mengembangkan mesin pemecah sandi elektromekanis yang disebut &amp;ldquo;Bombe&amp;rdquo;, yang memanfaatkan tebakan plainteks (Crib) yang sesuai dengan bagian dari cipherteks. Bombe mendeteksi kontradiksi logis pada kecepatan tinggi, berhasil memecahkan Enigma dengan terus menerus menghilangkan pengaturan rotor yang tidak mungkin. Pencapaian ini konon telah mempercepat kemenangan pihak Sekutu selama beberapa tahun.&lt;/p>
&lt;hr>
&lt;h1 id="4-awal-kriptografi-modern-kriptografi-kunci-simetris-des-dan-aes">4. Awal Kriptografi Modern: Kriptografi Kunci Simetris (DES dan AES)
&lt;/h1>&lt;p>Setelah perang, dengan munculnya komputer, kriptografi mengalami pergeseran paradigma yang dramatis dari manipulasi &amp;ldquo;karakter&amp;rdquo; menjadi manipulasi &amp;ldquo;bit (0 dan 1)&amp;rdquo;.&lt;/p>
&lt;h2 id="claude-shannon-dan-teori-informasi">Claude Shannon dan Teori Informasi
&lt;/h2>&lt;p>Pada tahun 1949, Claude Shannon menerbitkan makalah &amp;ldquo;Teori Komunikasi Sistem Kerahasiaan (Communication Theory of Secrecy Systems)&amp;rdquo;, yang meletakkan dasar matematika untuk kriptografi modern. Dia mengusulkan &amp;ldquo;Konfusi (Confusion)&amp;rdquo; dan &amp;ldquo;Difusi (Diffusion)&amp;rdquo; sebagai prinsip desain kriptografi yang aman.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Konfusi (Confusion)&lt;/strong>: Membuat hubungan antara kunci dan cipherteks serumit mungkin. (Dicapai melalui substitusi / S-box)&lt;/li>
&lt;li>&lt;strong>Difusi (Diffusion)&lt;/strong>: Memastikan bahwa perubahan 1 bit dari plainteks mempengaruhi banyak bit dari cipherteks. (Dicapai melalui transposisi / permutasi)&lt;/li>
&lt;/ul>
&lt;h2 id="des-data-encryption-standard">DES (Data Encryption Standard)
&lt;/h2>&lt;p>Pada tahun 1977, Institut Nasional Standar dan Teknologi AS (NIST, saat itu NBS) menetapkan &amp;ldquo;DES&amp;rdquo;, yang berdasarkan desain IBM, sebagai standar kriptografi.
DES mengadopsi arsitektur yang disebut &amp;ldquo;Jaringan Feistel (Feistel Network)&amp;rdquo;, dengan panjang blok 64 bit dan panjang kunci 56 bit. Ia memiliki keuntungan implementasi di mana algoritma enkripsi dan dekripsi memiliki struktur yang hampir sama.&lt;/p>
&lt;p>Namun, seiring dengan peningkatan daya komputasi komputer, menjadi jelas bahwa panjang kunci 56 bit (sekitar $7.2 \times 10^{16}$ kemungkinan) tidak mencukupi. Pada tahun 1998, Electronic Frontier Foundation (EFF) mengembangkan mesin khusus &amp;ldquo;Deep Crack&amp;rdquo; dan mendemonstrasikan pemecahan DES dalam hitungan hari.&lt;/p>
&lt;h2 id="aes-advanced-encryption-standard">AES (Advanced Encryption Standard)
&lt;/h2>&lt;p>Sebagai standar baru untuk menggantikan DES, &amp;ldquo;AES&amp;rdquo; ditetapkan pada tahun 2001. Algoritma &amp;ldquo;Rijndael&amp;rdquo; yang diciptakan oleh kriptografer Belgia, yang dipilih melalui kompetisi publik, diadopsi.&lt;/p>
&lt;p>AES tidak menggunakan struktur Feistel melainkan &amp;ldquo;Jaringan Substitusi-Permutasi (SPN: Substitution-Permutation Network)&amp;rdquo; dan memanfaatkan operasi matematika di atas medan Galois (medan berhingga) $GF(2^8)$. Panjang kunci dapat dipilih dari 128, 192, atau 256 bit, dan hingga saat ini digunakan secara luas sebagai kriptografi kunci simetris standar di seluruh dunia.&lt;/p>
&lt;div class="mermaid">graph TD
subgraph "Pemrosesan 1 Putaran AES (Struktur SPN)"
A["Status Input (128-bit)"] --> B("SubBytes (Substitusi Byte / S-Box)")
B --> C("ShiftRows (Pergeseran Baris)")
C --> D("MixColumns (Pencampuran Kolom / Perkalian di GF(2^8))")
D --> E("AddRoundKey (XOR dengan Kunci Putaran)")
E --> F["Ke putaran berikutnya"]
end&lt;/div>
&lt;hr>
&lt;h1 id="5-revolusi-kriptografi-kunci-publik-dari-diffie-hellman-ke-rsa">5. Revolusi Kriptografi Kunci Publik: Dari Diffie-Hellman ke RSA
&lt;/h1>&lt;p>Kriptografi kunci simetris memiliki kelemahan fatal: &amp;ldquo;Masalah Distribusi Kunci (Key Distribution Problem)&amp;rdquo;. Masalahnya adalah bagaimana berbagi &amp;ldquo;kunci bersama&amp;rdquo; dengan aman dengan pihak yang berada jauh sebelum memulai komunikasi terenkripsi. &amp;ldquo;Kriptografi Kunci Publik&amp;rdquo; yang lahir pada tahun 1970-an memecahkan masalah ini.&lt;/p>
&lt;h2 id="pertukaran-kunci-diffie-hellman">Pertukaran Kunci Diffie-Hellman
&lt;/h2>&lt;p>Pada tahun 1976, Whitfield Diffie dan Martin Hellman menerbitkan makalah terobosan &amp;ldquo;Arah Baru dalam Kriptografi (New Directions in Cryptography)&amp;rdquo;. Mereka mengusulkan metode untuk berbagi kunci dengan aman bahkan melalui saluran komunikasi yang disadap, menggunakan kesulitan matematis yang disebut &amp;ldquo;Masalah Logaritma Diskrit (Discrete Logarithm Problem)&amp;rdquo;.&lt;/p>
&lt;ol>
&lt;li>Publikasikan bilangan prima besar $p$ dan generator $g$.&lt;/li>
&lt;li>Alice memilih nilai rahasia $a$, menghitung $A = g^a \pmod{p}$, dan mengirimkannya ke Bob.&lt;/li>
&lt;li>Bob memilih nilai rahasia $b$, menghitung $B = g^b \pmod{p}$, dan mengirimkannya ke Alice.&lt;/li>
&lt;li>Alice menghitung $K = B^a \pmod{p}$, dan Bob menghitung $K = A^b \pmod{p}$.&lt;/li>
&lt;li>Melalui hukum eksponen, $K = (g^b)^a = (g^a)^b = g^{ab} \pmod{p}$, memungkinkan mereka untuk dengan sukses berbagi kunci yang sama $K$.&lt;/li>
&lt;/ol>
&lt;h2 id="kriptografi-rsa">Kriptografi RSA
&lt;/h2>&lt;p>Tahun berikutnya, pada tahun 1977, &amp;ldquo;Kriptografi RSA&amp;rdquo; diciptakan oleh tiga orang: Ron Rivest, Adi Shamir, dan Leonard Adleman. Ini didasarkan pada properti bahwa &amp;ldquo;memfaktorkan bilangan komposit besar menjadi bilangan prima adalah sulit&amp;rdquo;.&lt;/p>
&lt;p>&lt;strong>Mekanisme Matematis RSA:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>Pilih dua bilangan prima besar $p$ dan $q$, hitung $n = p \times q$.&lt;/li>
&lt;li>Hitung fungsi totient Euler $\phi(n) = (p-1)(q-1)$.&lt;/li>
&lt;li>Pilih bilangan bulat $e$ (kunci publik) yang relatif prima terhadap $\phi(n)$.&lt;/li>
&lt;li>Hitung bilangan bulat $d$ (kunci privat) sehingga $e \times d \equiv 1 \pmod{\phi(n)}$.&lt;/li>
&lt;/ol>
&lt;p>Enkripsi: Untuk plainteks $M$, $C \equiv M^e \pmod{n}$
Dekripsi: Untuk cipherteks $C$, $M \equiv C^d \pmod{n}$&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Kode Python menunjukkan konsep kriptografi RSA (bukan untuk penggunaan praktis)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">ext_euclid&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Perhitungan invers modular menggunakan algoritma Euclidean yang diperluas&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">b&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">x&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">g&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ext_euclid&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">b&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">a&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">x&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">a&lt;/span> &lt;span class="o">//&lt;/span> &lt;span class="n">b&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">y&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">g&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">def&lt;/span> &lt;span class="nf">rsa_example&lt;/span>&lt;span class="p">():&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Contoh menggunakan bilangan prima kecil&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">p&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">61&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">53&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">p&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">phi&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">p&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span> &lt;span class="o">-&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">17&lt;/span> &lt;span class="c1"># nilai yang relatif prima dengan phi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">_&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ext_euclid&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">phi&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">d&lt;/span> &lt;span class="o">&amp;lt;&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">d&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="n">phi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Kunci Publik: (e=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">e&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, n=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">)&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Kunci Privat: (d=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">d&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">, n=&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">)&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Enkripsi dan dekripsi pesan&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">message&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">65&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ciphertext&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">decrypted&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="nb">pow&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">d&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Plainteks: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">message&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> -&amp;gt; Cipherteks: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">ciphertext&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> -&amp;gt; Setelah dekripsi: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">decrypted&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">rsa_example&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h1 id="6-bangkitnya-kriptografi-kurva-eliptik-ecc">6. Bangkitnya Kriptografi Kurva Eliptik (ECC)
&lt;/h1>&lt;p>Meskipun kriptografi RSA kuat, dengan peningkatan kinerja komputer, menjadi perlu untuk memperpanjang kunci (saat ini 2048 atau 3072 bit) untuk menjaga keamanan, yang mengakibatkan masalah peningkatan biaya komputasi.&lt;/p>
&lt;p>Sebagai solusinya, &amp;ldquo;Kriptografi Kurva Eliptik (ECC: Elliptic Curve Cryptography)&amp;rdquo; diusulkan pada tahun 1985. Ini menggunakan penambahan titik pada kurva eliptik di atas medan berhingga (umumnya dalam bentuk $y^2 = x^3 + ax + b$).&lt;/p>
&lt;p>Masalah logaritma diskrit pada kurva eliptik (ECDLP) diketahui lebih sulit dipecahkan daripada masalah faktorisasi prima, sehingga &lt;strong>ECC dapat mencapai tingkat keamanan yang setara dengan RSA 3072-bit hanya dengan panjang kunci 256-bit&lt;/strong>. Hal ini memungkinkan komunikasi terenkripsi yang cepat dan aman (seperti ECDSA dan ECDH) bahkan di lingkungan dengan sumber daya komputasi terbatas seperti smartphone dan perangkat IoT.&lt;/p>
&lt;hr>
&lt;h1 id="7-ancaman-komputer-kuantum-dan-kriptografi-pasca-kuantum-pqc">7. Ancaman Komputer Kuantum dan Kriptografi Pasca-Kuantum (PQC)
&lt;/h1>&lt;p>Teknologi kriptografi tampaknya sangat solid, tetapi algoritma Shor yang diterbitkan oleh Peter Shor pada tahun 1994 memberikan kejutan besar.&lt;/p>
&lt;p>Komputer kuantum melakukan komputasi menggunakan sifat mekanika kuantum dari &amp;ldquo;superposisi&amp;rdquo; dan &amp;ldquo;keterikatan kuantum (quantum entanglement)&amp;rdquo;. Telah terbukti secara matematis bahwa ketika algoritma Shor dieksekusi pada komputer kuantum dengan kinerja yang memadai, masalah faktorisasi prima dan masalah logaritma diskrit dapat diselesaikan dalam &amp;ldquo;waktu polinomial&amp;rdquo;. Ini berarti bahwa pada hari ketika komputer kuantum yang praktis selesai (Q-Day), semua kriptografi kunci publik yang digunakan saat ini seperti RSA dan ECC akan hancur seketika.&lt;/p>
&lt;h2 id="kemunculan-pqc-post-quantum-cryptography">Kemunculan PQC (Post-Quantum Cryptography)
&lt;/h2>&lt;p>Untuk mempersiapkan diri terhadap ancaman yang belum pernah terjadi sebelumnya ini, penelitian mengenai &amp;ldquo;Kriptografi Pasca-Kuantum (PQC)&amp;rdquo; dengan cepat dimajukan. PQC didasarkan pada masalah matematika baru yang sulit dipecahkan bahkan oleh komputer kuantum. NIST (Institut Nasional Standar dan Teknologi AS) telah memajukan proses standardisasi PQC selama bertahun-tahun, dan pendekatan matematika berikut ini sebagian besar dianggap paling menjanjikan:&lt;/p>
&lt;h3 id="1-kriptografi-berbasis-kisi-lattice-based-cryptography">1. Kriptografi Berbasis Kisi (Lattice-based Cryptography)
&lt;/h3>&lt;p>Ini adalah pendekatan paling menjanjikan saat ini, dan telah diadopsi dalam algoritma standardisasi NIST (ML-KEM / Kyber, ML-DSA / Dilithium). Hal ini didasarkan pada kesulitan menemukan titik tertentu pada &amp;ldquo;kisi (Lattice)&amp;rdquo; dalam ruang multidimensi (seperti Shortest Vector Problem: SVP) dan kesulitan masalah LWE (Learning With Errors).&lt;/p>
&lt;p>Konsep masalah LWE memanfaatkan sifat bahwa jika &amp;ldquo;derau kecil (kesalahan)&amp;rdquo; secara sengaja ditambahkan ke sistem persamaan linear, maka secara tiba-tiba akan menjadi sangat sulit untuk menemukan solusinya.
Sistem Persamaan: $\mathbf{A}\mathbf{s} + \mathbf{e} \equiv \mathbf{b} \pmod{q}$
($\mathbf{A}$ dan $\mathbf{b}$ adalah publik, $\mathbf{s}$ adalah kunci rahasia, $\mathbf{e}$ adalah derau mikroskopis)&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Kode pseudo konseptual dari masalah LWE (untuk tujuan pembelajaran)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">numpy&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">np&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">256&lt;/span> &lt;span class="c1"># Dimensi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">q&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3329&lt;/span> &lt;span class="c1"># Modulus&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">m&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">512&lt;/span> &lt;span class="c1"># Jumlah persamaan&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Kunci rahasia s dan kesalahan kecil e&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">s&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">e&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="n">m&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Matriks publik A dan vektor publik b&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">A&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">random&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">randint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">size&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">m&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">b&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">np&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">dot&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">A&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">s&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">e&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">q&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Bahkan dengan menggunakan komputer kuantum, sangat sulit untuk memulihkan s dari A dan b&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="2-kriptografi-berbasis-hash-hash-based-cryptography">2. Kriptografi Berbasis Hash (Hash-based Cryptography)
&lt;/h3>&lt;p>Ini adalah skema tanda tangan digital yang mendasarkan keamanannya semata-mata pada ketahanan bentrokan (collision resistance) dari fungsi hash. Ia kuat terhadap serangan kuantum karena tidak memiliki struktur matematis, tetapi cenderung menghasilkan ukuran tanda tangan yang besar (seperti SPHINCS+).&lt;/p>
&lt;h3 id="3-kriptografi-berbasis-kode-code-based-cryptography">3. Kriptografi Berbasis Kode (Code-based Cryptography)
&lt;/h3>&lt;p>Ini adalah skema kriptografi berdasarkan teori kode koreksi kesalahan (error-correcting codes). Kriptografi McEliece yang diusulkan pada tahun 1978 terkenal dan memiliki sejarah panjang serta reputasi keamanan yang baik, tetapi memiliki kelemahan yaitu ukuran kunci publik yang sangat besar (terkadang mencapai beberapa megabyte).&lt;/p>
&lt;div class="mermaid">timeline
title "Sejarah Evolusi Teknologi Kriptografi dan Komputer"
"Kuno hingga Pertengahan" : "Sandi Caesar" : "Sandi Vigenère" : "Kelahiran Analisis Frekuensi"
"Tahun 1930 - 1940-an" : "Pengoperasian dan Pemecahan Enigma" : "Pengembangan Mesin Turing / Bombe"
"Tahun 1970-an" : "Standardisasi DES (1977)" : "Pertukaran Kunci Diffie-Hellman (1976)" : "Kelahiran Kriptografi RSA (1977)"
"Tahun 1980 - 1990-an" : "Usulan Kriptografi Kurva Eliptik (ECC)" : "Publikasi Algoritma Shor (1994)"
"Tahun 2000-an" : "Standardisasi AES (2001)"
"Tahun 2010-an hingga kini" : "Akselerasi Penelitian Komputer Kuantum" : "Dimulainya Proyek Standardisasi PQC oleh NIST"
"Masa Depan Dekat (Q-Day)" : "Realisasi Komputer Kuantum Skala Besar?" : "Transisi Penuh ke PQC (ML-KEM/ML-DSA)"&lt;/div>
&lt;hr>
&lt;h1 id="8-kesimpulan-pertarungan-tanpa-akhir-antara-perisai-dan-tombak">8. Kesimpulan: Pertarungan Tanpa Akhir antara Perisai dan Tombak
&lt;/h1>&lt;p>Sejarah teknologi kriptografi adalah sejarah pertarungan tanpa akhir antara penemuan metode kriptografi baru (perisai) dan metode dekripsi baru (tombak) yang memecahkannya.&lt;/p>
&lt;p>Sandi Caesar dikalahkan oleh analisis frekuensi, dan Enigma yang konon tak terkalahkan dihancurkan oleh otak jenius Turing dan kekuatan mesin. Dan kini, kriptografi kuat seperti RSA dan ECC yang mendukung fondasi masyarakat internet modern, dihadapkan pada ancaman dari &amp;ldquo;tombak&amp;rdquo; baru yang disebut komputer kuantum.&lt;/p>
&lt;p>Namun, umat manusia telah melihat masa depan dan sedang bersiap dengan &amp;ldquo;perisai&amp;rdquo; baru yang disebut Kriptografi Pasca-Kuantum (PQC). Saat ini, mempersiapkan transisi dari kriptografi kunci publik yang ada menuju PQC (memastikan Crypto Agility) adalah tugas mendesak di infrastruktur TI di seluruh dunia.&lt;/p>
&lt;p>Kriptografi bukan sekadar teka-teki matematika yang sulit, melainkan benteng pertahanan terkuat untuk melindungi privasi, properti, dan infrastruktur sosial kita.&lt;/p></description></item><item><title>Apa itu Fully Homomorphic Encryption (FHE)? Menjelaskan Kunci Keamanan Generasi Berikutnya</title><link>http://kenji.blog/id/p/fully-homomorphic-encryption-fhe-explained/</link><pubDate>Fri, 11 Sep 2026 11:00:00 +0900</pubDate><guid>http://kenji.blog/id/p/fully-homomorphic-encryption-fhe-explained/</guid><description>&lt;img src="http://kenji.blog/p/fully-homomorphic-encryption-fhe-explained/img/eyecatch.jpg" alt="Featured image of post Apa itu Fully Homomorphic Encryption (FHE)? Menjelaskan Kunci Keamanan Generasi Berikutnya" />&lt;p>Seiring dengan cloud computing dan teknologi AI yang menjadi infrastruktur masyarakat, pertukaran antara &amp;ldquo;privasi data&amp;rdquo; dan &amp;ldquo;pemanfaatan data&amp;rdquo; telah menjadi salah satu masalah terpenting. Meskipun terdapat permintaan yang meningkat untuk membiarkan AI di cloud menganalisis data yang sangat sensitif seperti data medis, informasi keuangan, dan informasi biometrik pribadi, banyak perusahaan ragu untuk mengirimkan data ke pihak eksternal karena masalah keamanan.&lt;/p>
&lt;p>Teknologi enkripsi konvensional (seperti AES dan RSA) sangat baik dalam melindungi data yang disimpan dalam penyimpanan (Data at Rest) dan data yang mengalir melalui jaringan (Data in Transit). Namun, &lt;strong>saat melakukan pemrosesan (komputasi) seperti pencarian dan machine learning pada data di sisi server (Data in Use), data tersebut harus didekripsi terlebih dahulu untuk kembali ke bentuk plaintext&lt;/strong>. Jika server diretas pada saat dekripsi ini, atau jika administrator internal yang berniat jahat mengintip data tersebut, hal ini akan langsung menyebabkan kebocoran informasi.&lt;/p>
&lt;p>Teknologi impian yang mengatasi kelemahan mendasar dari &amp;ldquo;dekripsi saat pemrosesan&amp;rdquo; ini adalah &lt;strong>Fully Homomorphic Encryption (FHE)&lt;/strong>. Dengan menggunakan FHE, dimungkinkan untuk melakukan proses komputasi sambil menjaga data tetap terenkripsi tanpa mendekripsinya sama sekali, dan hanya mengembalikan ciphertext dari hasil komputasi tersebut kepada klien.&lt;/p>
&lt;p>Artikel ini akan secara mendalam membahas tentang FHE yang merupakan kunci keamanan generasi berikutnya, mulai dari konsep FHE, sejarah, terobosan inovatif oleh Craig Gentry, dasar-dasar matematika (seperti Ring-LWE), tantangan terbesar yaitu &amp;ldquo;noise&amp;rdquo; dan solusinya (bootstrapping), hingga library implementasi terbaru.&lt;/p>
&lt;hr>
&lt;h2 id="1-apa-itu-homomorphic-encryption-konsep-dasar">1. Apa itu Homomorphic Encryption? Konsep Dasar
&lt;/h2>&lt;p>&amp;ldquo;Homomorphic&amp;rdquo; (Homomorfik) adalah istilah dalam aljabar, yang merujuk pada sifat di mana himpunan dengan struktur tertentu dapat dipetakan sambil mempertahankan struktur operasi tersebut. &amp;ldquo;Homomorfisme&amp;rdquo; dalam teori kriptografi adalah sifat di mana &lt;strong>operasi dalam ruang plaintext sesuai dengan operasi dalam ruang ciphertext&lt;/strong>.&lt;/p>
&lt;p>Dinyatakan dalam rumus matematika sederhana, misalkan fungsi enkripsi untuk plaintext $m_1$ dan $m_2$ adalah $E(\cdot)$, dan fungsi dekripsinya adalah $D(\cdot)$. Jika operasi (seperti penjumlahan dan perkalian) pada plaintext adalah $\circ$ dan operasi pada ciphertext adalah $\diamond$, maka hubungan berikut ini berlaku.&lt;/p>
$$ D(E(m_1) \diamond E(m_2)) = m_1 \circ m_2 $$
&lt;p>Artinya, jika kita mendekripsi hasil dari penerapan operasi $\diamond$ pada ciphertext $E(m_1)$ dan $E(m_2)$, hasilnya akan sama dengan hasil operasi $\circ$ pada plaintext aslinya.&lt;/p>
&lt;h3 id="alur-data-dalam-cloud-computing">Alur Data dalam Cloud Computing
&lt;/h3>&lt;p>Arsitektur pemrosesan cloud menggunakan FHE sama sekali berbeda dari arsitektur konvensional. Diagram berikut menunjukkan alur pemrosesan data yang aman menggunakan FHE.&lt;/p>
&lt;div class="mermaid">graph TD
A["Klien (Menyimpan kunci privat)"] -->|1. Enkripsi plaintext x: E(x)| B["Server Cloud (Hanya data terenkripsi)"]
B -->|2. Terapkan fungsi f pada ciphertext: E(f(x))| B
B -->|3. Ciphertext dari hasil perhitungan E(y)| A
A -->|4. Dekripsi dengan kunci privat: y = f(x)| A
style A fill:#d4edda,stroke:#28a745
style B fill:#f8d7da,stroke:#dc3545&lt;/div>
&lt;p>Server menerima data terenkripsi $E(x)$, tetapi tidak pernah dapat mengetahui isi data tersebut karena tidak memiliki kunci privat. Namun, dengan memanfaatkan properti FHE, server dapat menerapkan fungsi $f$ (misalnya, model inferensi machine learning) pada ciphertext untuk menghasilkan $E(f(x))$. Klien menerima hasil ini, dan dengan mendekripsinya menggunakan kunci privat mereka sendiri, klien mendapatkan hasil yang diinginkan $y = f(x)$.&lt;/p>
&lt;hr>
&lt;h2 id="2-sejarah-evolusi-homomorphic-encryption-phe-she-fhe">2. Sejarah Evolusi Homomorphic Encryption: PHE, SHE, FHE
&lt;/h2>&lt;p>Homomorphic Encryption tidak langsung mencapai bentuk &amp;ldquo;sempurna&amp;rdquo; yang ada saat ini sekaligus. Ini secara luas diklasifikasikan ke dalam 3 tahap berdasarkan jenis dan jumlah operasi yang dapat direalisasikan.&lt;/p>
&lt;h3 id="partially-homomorphic-encryption-phe">Partially Homomorphic Encryption (PHE)
&lt;/h3>&lt;p>PHE adalah skema enkripsi yang memungkinkan operasi penjumlahan atau perkalian, &lt;strong>salah satu dari keduanya saja&lt;/strong>, tanpa batas. Faktanya, enkripsi dengan sifat ini telah ada sejak lama.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Enkripsi RSA (Homomorfisme terhadap perkalian)&lt;/strong>
Enkripsi RSA secara tidak sengaja memiliki homomorfisme perkalian. Jika plaintext $m_1, m_2$ dan kunci publik $(e, N)$:
$$ E(m_1) = m_1^e \pmod N $$
$$ E(m_2) = m_2^e \pmod N $$
Jika kita mengalikannya:
$$ E(m_1) \times E(m_2) = (m_1 \cdot m_2)^e \pmod N = E(m_1 \times m_2) $$
Dengan cara ini, perkalian ciphertext berhubungan dengan perkalian plaintext.&lt;/li>
&lt;li>&lt;strong>Enkripsi Paillier (Homomorfisme terhadap penjumlahan)&lt;/strong>
Ditemukan pada tahun 1999, enkripsi Paillier memiliki homomorfisme terhadap penjumlahan. Ini telah digunakan secara praktis dalam e-voting (menghitung suara terenkripsi dan hanya mendekripsi hasil akhirnya).&lt;/li>
&lt;/ul>
&lt;h3 id="somewhat-homomorphic-encryption-she">Somewhat Homomorphic Encryption (SHE)
&lt;/h3>&lt;p>Ini adalah metode di mana &lt;strong>baik&lt;/strong> penjumlahan maupun perkalian dapat dilakukan, tetapi ada &lt;strong>batasan pada jumlah operasi (kedalaman sirkuit)&lt;/strong> yang dapat dihitung. Karena akumulasi &amp;ldquo;noise&amp;rdquo; yang akan dibahas nanti, dekripsi menjadi mustahil setelah sejumlah perkalian tertentu dilakukan. Enkripsi BGN (Boneh-Goh-Nissim) dari tahun 2005 termasuk dalam kategori ini, tetapi memiliki keterbatasan dalam melakukan komputasi kompleks yang praktis (seperti deep learning).&lt;/p>
&lt;h3 id="fully-homomorphic-encryption-fhe">Fully Homomorphic Encryption (FHE)
&lt;/h3>&lt;p>Ini adalah skema enkripsi yang dapat menjalankan baik penjumlahan maupun perkalian dengan &lt;strong>jumlah yang tidak terbatas&lt;/strong>. Mirip dengan Turing completeness dalam teori informasi, jika kita dapat menggabungkan penjumlahan (setara dengan XOR) dan perkalian (setara dengan AND) tanpa batas, itu berarti secara prinsip, setiap fungsi atau algoritma yang dapat dihitung dapat dieksekusi dalam keadaan terenkripsi.&lt;/p>
&lt;p>FHE telah lama disebut sebagai &amp;ldquo;Cawan Suci dunia kriptografi&amp;rdquo;, dan bahkan dikatakan mustahil untuk direalisasikan. Namun, pada tahun 2009, &lt;strong>Craig Gentry&lt;/strong>, yang saat itu adalah seorang mahasiswa program doktor di Universitas Stanford, mengusulkan skema FHE pertama menggunakan Ideal Lattices, yang mengejutkan dunia.&lt;/p>
&lt;hr>
&lt;h2 id="3-fondasi-matematika-fhe-masalah-lwe-dan-ring-lwe">3. Fondasi Matematika FHE: Masalah LWE dan Ring-LWE
&lt;/h2>&lt;p>Sebagian besar skema FHE utama saat ini didasarkan pada &lt;strong>Masalah LWE (Learning With Errors)&lt;/strong>, yang merupakan masalah matematika sulit dalam &amp;ldquo;Lattice-based Cryptography (Kriptografi berbasis kisi)&amp;rdquo;, yang juga dikenal sebagai kriptografi tahan kuantum (Post-Quantum Cryptography).&lt;/p>
&lt;h3 id="pemahaman-intuitif-tentang-masalah-lwe">Pemahaman Intuitif tentang Masalah LWE
&lt;/h3>&lt;p>Menyelesaikan persamaan linear simultan adalah mudah jika Anda menggunakan metode seperti eliminasi Gauss.&lt;/p>
$$ \begin{cases} 3s_1 + 4s_2 + 2s_3 \equiv 12 \pmod{17} \\ 1s_1 + 9s_2 + 5s_3 \equiv 8 \pmod{17} \\ \vdots \end{cases} $$
&lt;p>Namun, apa yang terjadi jika Anda menambahkan &amp;ldquo;kesalahan (noise) acak&amp;rdquo; $e$ yang sangat kecil ke hasil persamaan ini?&lt;/p>
$$ \begin{cases} 3s_1 + 4s_2 + 2s_3 + e_1 \equiv 13 \pmod{17} \\ 1s_1 + 9s_2 + 5s_3 + e_2 \equiv 7 \pmod{17} \\ \vdots \end{cases} $$
&lt;p>Dengan hanya menambahkan error $e$ ini, masalah untuk menemukan vektor variabel rahasia $\vec{s}$ berubah menjadi masalah NP-hard yang sulit dipecahkan bahkan jika menggunakan superkomputer saat ini atau komputer kuantum. Inilah masalah LWE.&lt;/p>
&lt;h3 id="masalah-ring-lwe-rlwe">Masalah Ring-LWE (RLWE)
&lt;/h3>&lt;p>Masalah LWE standar melibatkan operasi matriks, yang menyebabkan ukuran kunci yang sangat besar (terkadang dalam gigabyte) dan efisiensi komputasi yang buruk. Untuk mengatasi hal ini, diperkenalkanlah &lt;strong>masalah Ring-LWE (RLWE)&lt;/strong>, yang menggunakan operasi pada gelanggang polinomial (polynomial rings).&lt;/p>
&lt;p>Pada RLWE, elemen-elemen tersebut termasuk dalam gelanggang polinomial $R_q = \mathbb{Z}_q[x] / (x^N + 1)$ (di mana $N$ adalah pangkat dari 2, dan $q$ adalah bilangan prima sebagai modulus).
Jika kunci privat adalah polinomial $s(x)$, dengan polinomial acak $a(x)$, dan polinomial noise kecil $e(x)$, maka pasangan kunci publiknya adalah sebagai berikut.&lt;/p>
$$ (a(x), b(x)) \quad \text{dimana} \quad b(x) = -a(x) \cdot s(x) + e(x) \pmod q $$
&lt;p>Selama enkripsi, properti polinomial ini digunakan untuk mengenkode plaintext $m(x)$ dan menghasilkan ciphertext.&lt;/p>
&lt;hr>
&lt;h2 id="4-hambatan-terbesar-noise-dan-bootstrapping-gentry">4. Hambatan Terbesar &amp;ldquo;Noise&amp;rdquo; dan Bootstrapping Gentry
&lt;/h2>&lt;p>Konsep paling penting dalam memahami FHE adalah &lt;strong>&amp;ldquo;Manajemen Noise&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>Dalam kriptografi berbasis LWE/RLWE, &amp;ldquo;noise (error)&amp;rdquo; kecil sengaja disertakan untuk menjamin keamanan.
Proses mendekripsi ciphertext $c$ dari plaintext $m$ dapat diekspresikan secara kasar dengan rumus berikut.&lt;/p>
$$ D(c) = (c \cdot s) \pmod q = m + \text{noise} $$
&lt;p>Selama dekripsi, plaintext yang benar $m$ diperoleh dengan menghilangkan &lt;code>noise&lt;/code> ini melalui proses seperti pembulatan (rounding). Namun, ketika melakukan operasi homomorfik (terutama perkalian) di antara ciphertext, noise ini akan berlipat ganda secara dramatis.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Penjumlahan Homomorfik&lt;/strong>: Noise meningkat secara aditif ($e_1 + e_2$). Ini adalah peningkatan yang relatif lambat.&lt;/li>
&lt;li>&lt;strong>Representasi matematika dari homomorfisme melalui penjumlahan homomorfik&lt;/strong>:
$$ E(m_1) \oplus E(m_2) = E(m_1 + m_2) $$&lt;/li>
&lt;li>&lt;strong>Perkalian Homomorfik&lt;/strong>: Noise meledak secara multiplikatif (karena mencakup komponen seperti $e_1 \times e_2$). Hanya dengan melakukan perkalian beberapa kali, noise akan melampaui ambang batas $q/2$, membuat proses pembulatan yang benar menjadi tidak mungkin, dan dekripsi akan gagal.&lt;/li>
&lt;li>&lt;strong>Representasi matematika dari homomorfisme melalui perkalian homomorfik&lt;/strong>:
$$ E(m_1) \otimes E(m_2) = E(m_1 \times m_2) $$&lt;/li>
&lt;/ul>
&lt;p>Inilah sebabnya mengapa FHE tidak dapat direalisasikan untuk waktu yang lama, dan hanya terbatas pada SHE (dengan batas jumlah).&lt;/p>
&lt;h3 id="keajaiban-bootstrapping">Keajaiban Bootstrapping
&lt;/h3>&lt;p>Kontribusi jenius dari Craig Gentry adalah penemuan teknik pengurangan noise yang disebut &lt;strong>&amp;ldquo;Bootstrapping&amp;rdquo;&lt;/strong>. Ini adalah pergeseran paradigma (paradigm shift) dalam kriptografi.&lt;/p>
&lt;p>Secara intuitif, operasi ini berarti &amp;ldquo;sebelum ciphertext rusak karena dipenuhi noise, &amp;lsquo;dekripsi&amp;rsquo; ia untuk membersihkannya selagi masih dalam kondisi terenkripsi, lalu masukkan ke dalam ciphertext baru.&amp;rdquo;&lt;/p>
&lt;ol>
&lt;li>Misalkan ada ciphertext dengan noise tinggi $C_{noisy}$.&lt;/li>
&lt;li>Klien terlebih dahulu memberikan kepada server kunci privat $sk$ yang &amp;ldquo;dienkripsi dengan kunci publik&amp;rdquo; $E_{pk}(sk)$ (ini disebut kunci bootstrapping).&lt;/li>
&lt;li>Server mengeksekusi &lt;strong>sirkuit dekripsi (Decryption Circuit)&lt;/strong> secara homomorfik pada $C_{noisy}$.&lt;/li>
&lt;li>Secara khusus, ia melakukan &amp;ldquo;dekripsi dalam ruang terenkripsi&amp;rdquo; pada $E_{pk}(C_{noisy})$ menggunakan $E_{pk}(sk)$.&lt;/li>
&lt;li>Karena sirkuit dekripsi ini sendiri adalah operasi homomorfik yang menghasilkan noise baru, noise dari ciphertext baru yang dihasilkan $C_{fresh}$ akan di-reset ke &amp;ldquo;tingkat tetap&amp;rdquo; tertentu.&lt;/li>
&lt;/ol>
&lt;div class="mermaid">graph LR
A["Ciphertext Noise Tinggi C_noisy"] --> B["Sirkuit Dekripsi Homomorfik (Eval_Dec)"]
C["Kunci privat terenkripsi E(sk)"] --> B
B --> D["Ciphertext Noise Rendah C_fresh"]
style B fill:#ffeeba,stroke:#ffc107&lt;/div>
&lt;p>Dengan menjalankan bootstrapping ini secara berkala selama perhitungan, secara teoritis dimungkinkan untuk menghitung sirkuit dengan kedalaman tak terbatas (pencapaian FHE). Namun, skema awal Gentry sangat memakan biaya komputasi, dengan proses bootstrapping ini membutuhkan waktu puluhan menit hingga beberapa jam untuk sekali proses.&lt;/p>
&lt;hr>
&lt;h2 id="5-generasi-fhe-dan-evolusi-skema-utama">5. Generasi FHE dan Evolusi Skema Utama
&lt;/h2>&lt;p>Menuju implementasi praktis FHE, para kriptografer di seluruh dunia telah berlomba untuk meningkatkan algoritmanya. Saat ini, FHE diklasifikasikan ke dalam 4 generasi/keluarga utama.&lt;/p>
&lt;h3 id="generasi-kedua-komputasi-eksak-pada-bilangan-bulat-bgv-bfv">Generasi Kedua: Komputasi Eksak pada Bilangan Bulat (BGV, BFV)
&lt;/h3>&lt;p>Skema &lt;strong>BGV (Brakerski-Gentry-Vaikuntanathan)&lt;/strong> dan &lt;strong>BFV (Brakerski/Fan-Vercauteren)&lt;/strong> yang muncul sekitar tahun 2011-2012. Skema ini didasarkan pada RLWE dan cocok untuk aritmatika modular (perhitungan eksak) pada bilangan bulat.
Skema ini mendukung teknologi batching seperti SIMD (Single Instruction, Multiple Data), yang ditandai dengan kemampuannya untuk mengemas ribuan slot data ke dalam satu ciphertext polinomial besar dan menghitungnya secara paralel sekaligus.&lt;/p>
&lt;h3 id="generasi-ketiga-akselerasi-bootstrapping-gsw-fhew-tfhe">Generasi Ketiga: Akselerasi Bootstrapping (GSW, FHEW, TFHE)
&lt;/h3>&lt;p>Skema &lt;strong>GSW (Gentry-Sahai-Waters)&lt;/strong> pada tahun 2013 menyederhanakan struktur FHE. Dan dari perkembangan ini, salah satu pendekatan utama saat ini adalah &lt;strong>TFHE (Fast Fully Homomorphic Encryption over the Torus)&lt;/strong>.
Fitur dari TFHE adalah bahwa bootstrapping-nya sangat cepat (dalam urutan milidetik). Ini unggul dalam operasi tingkat gerbang logis (sirkuit logika seperti AND, XOR) dan karena ukuran ciphertext-nya relatif kecil, ia cocok untuk mengevaluasi sirkuit logika acak dengan kecepatan tinggi.&lt;/p>
&lt;h3 id="generasi-keempat-spesialisasi-dalam-komputasi-perkiraan-dan-machine-learning-ckks">Generasi Keempat: Spesialisasi dalam Komputasi Perkiraan dan Machine Learning (CKKS)
&lt;/h3>&lt;p>Skema &lt;strong>CKKS (Cheon-Kim-Kim-Song)&lt;/strong> yang diusulkan oleh Cheon dkk. pada tahun 2017 adalah teknologi definitif dalam pelestarian privasi untuk AI dan machine learning saat ini.
Sementara FHE sebelumnya berfokus pada &amp;ldquo;komputasi bilangan bulat eksak&amp;rdquo;, CKKS mendukung &lt;strong>&amp;ldquo;komputasi perkiraan floating-point&amp;rdquo;&lt;/strong> sambil tetap terenkripsi. Skema ini menunjukkan kinerja luar biasa dalam komputasi bilangan riil di mana sedikit kesalahan (error) diperbolehkan, seperti dalam pelatihan dan inferensi neural network.&lt;/p>
&lt;p>Tabel berikut merangkum cara memilih skema berdasarkan tujuan.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Nama Skema&lt;/th>
&lt;th style="text-align:left">Tipe Data yang Dikuasai&lt;/th>
&lt;th style="text-align:left">Use Case yang Disarankan&lt;/th>
&lt;th style="text-align:left">Fitur&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>BFV / BGV&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Bilangan Bulat (Integer)&lt;/td>
&lt;td style="text-align:left">Komputasi statistik eksak, agregasi data keuangan, pencarian DB&lt;/td>
&lt;td style="text-align:left">Throughput tinggi menggunakan batching SIMD&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>CKKS&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Bilangan Riil (Real/Complex)&lt;/td>
&lt;td style="text-align:left">Machine Learning (DNN, regresi logistik), pemrosesan sinyal&lt;/td>
&lt;td style="text-align:left">Akselerasi dengan komputasi perkiraan, penskalaan ulang (rescaling)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>TFHE&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Nilai Boolean (Boolean)&lt;/td>
&lt;td style="text-align:left">Sirkuit logika acak, pencarian string, evaluasi fungsi non-linear&lt;/td>
&lt;td style="text-align:left">Bootstrapping ultra-cepat (tingkat milidetik)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="6-praktik-library-fhe-dan-kode-konseptual">6. Praktik: Library FHE dan Kode Konseptual
&lt;/h2>&lt;p>Saat ini, terdapat banyak library open-source yang tersedia yang memungkinkan penggunaan FHE tanpa perlu memiliki pengetahuan mendalam tentang kriptografi.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Microsoft SEAL (Simple Encrypted Arithmetic Library)&lt;/strong>: Library C++ yang mendukung BFV, BGV, dan CKKS. Ini adalah salah satu standar industri. Binding Python-nya, &lt;strong>TenSEAL&lt;/strong>, populer di kalangan engineer AI.&lt;/li>
&lt;li>&lt;strong>Zama (Concrete)&lt;/strong>: Framework berbasis TFHE. Dapat ditulis dengan Rust/Python, dan menyediakan fungsionalitas (Concrete ML) untuk mengompilasi model PyTorch yang ada agar berjalan pada FHE.&lt;/li>
&lt;li>&lt;strong>OpenFHE&lt;/strong>: Penerus PALISADE, library C++ komprehensif yang mendukung semua skema utama.&lt;/li>
&lt;/ul>
&lt;h3 id="contoh-pemrograman-fhe-menggunakan-python-tenseal">Contoh Pemrograman FHE menggunakan Python (TenSEAL)
&lt;/h3>&lt;p>Berikut adalah contoh kode Python konseptual yang menggunakan skema CKKS untuk menambahkan dan mengalikan vektor bilangan riil yang masih dalam keadaan terenkripsi.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">tenseal&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">ts&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. Setup Konteks (Termasuk pembuatan kunci)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Menggunakan skema CKKS dan mengatur derajat polinomial modulus ke 8192&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">SCHEME_TYPE&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">CKKS&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">poly_modulus_degree&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">8192&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">coeff_mod_bit_sizes&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">60&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">60&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">generate_galois_keys&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">global_scale&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="mi">40&lt;/span> &lt;span class="c1"># Scaling factor untuk bilangan riil&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. Sisi Klien: Enkripsi data&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">vector1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mf">1.5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">vector2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mf">2.0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Mengonversi vektor plaintext menjadi ciphertext (Secara ideal dieksekusi di sisi klien)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_v1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ckks_vector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">vector1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_v2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ckks_vector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">vector2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. Sisi Server: Komputasi dalam keadaan terenkripsi (Perlindungan Data in Use)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Server tidak mengetahui plaintext, tetapi dapat melakukan penjumlahan dan perkalian&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_add&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_v1&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">enc_v2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_mul&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_v1&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">enc_v2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 4. Sisi Klien: Mendekripsi hasil&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Hanya klien yang memiliki kunci privat yang dapat melihat hasilnya&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">res_add&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_add&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">res_mul&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_mul&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Hasil penjumlahan setelah dekripsi: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res_add&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Contoh Output: [3.5000001, 5.5000001, 7.5000002] (Mengandung kesalahan sangat kecil karena komputasi perkiraan)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Hasil perkalian setelah dekripsi: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res_mul&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Contoh Output: [3.0000002, 7.5000005, 14.0000003]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Seperti yang bisa dilihat dari kode di atas, perhitungan antara ciphertext dapat ditulis secara intuitif dengan melakukan overload pada operator Python biasa, seperti &lt;code>enc_v1 + enc_v2&lt;/code>. Di sisi server, komputasi vektor diselesaikan tanpa perlu mengetahui isi dari vektor tersebut.&lt;/p>
&lt;hr>
&lt;h2 id="7-tantangan-fhe-performa-dan-akselerasi-hardware">7. Tantangan FHE: Performa dan Akselerasi Hardware
&lt;/h2>&lt;p>Meskipun FHE memberikan keamanan yang secara teoritis sempurna, tantangan terbesar dalam implementasi praktisnya adalah &lt;strong>&amp;ldquo;overhead kinerja (performance overhead)&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Overhead Komputasi&lt;/strong>: Dibandingkan dengan komputasi pada plaintext, komputasi pada ciphertext membutuhkan waktu ribuan hingga puluhan ribu kali lebih lambat di CPU. Perkalian polinomial dan bootstrapping memerlukan perhitungan FFT (Fast Fourier Transform) dan NTT (Number Theoretic Transform) dalam jumlah yang sangat besar.&lt;/li>
&lt;li>&lt;strong>Ekspansi Ukuran Data (Ciphertext Expansion)&lt;/strong>: Plaintext yang hanya berukuran beberapa byte bisa membengkak menjadi beberapa megabyte saat dienkripsi. Ini sangat membebani bandwidth memori dan bandwidth jaringan.&lt;/li>
&lt;/ol>
&lt;h3 id="pendekatan-solusi-melalui-hardware">Pendekatan Solusi melalui Hardware
&lt;/h3>&lt;p>Untuk mengatasi overhead ini, pengembangan akselerator hardware khusus FHE (mendukung ASIC, FPGA, GPU) sedang dilakukan di seluruh dunia.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Akselerasi GPU&lt;/strong>: Upaya sedang dilakukan untuk memparalelkan komputasi NTT dan bootstrapping menggunakan GPU bertenaga seperti NVIDIA, dan akselerasi puluhan kali lipat dibandingkan dengan implementasi perangkat lunak telah dilaporkan (contoh: 100x.ai, backend TFHE-rs CUDA dari Zama).&lt;/li>
&lt;li>&lt;strong>Proyek DARPA DPRIVE&lt;/strong>: Defense Advanced Research Projects Agency (DARPA) dari AS mendorong proyek pengembangan hardware khusus &amp;ldquo;DPRIVE (Data Protection in Virtual Environments)&amp;rdquo; untuk meningkatkan kecepatan komputasi FHE ke tingkat yang setara dengan kecepatan pemrosesan plaintext (dalam overhead 10x). Intel, Microsoft, dan Intellectual Ventures berpartisipasi dalam proyek ini.&lt;/li>
&lt;li>&lt;strong>Kemunculan FPU (FHE Processing Unit)&lt;/strong>: Startup seperti Cornami dan Optalysys sedang mengembangkan chip khusus FHE yang menggunakan komputasi optik (optical computing) atau arsitektur silikon khusus.&lt;/li>
&lt;/ul>
&lt;p>Dalam waktu dekat, seperti halnya NPU (Neural Processing Unit) pada AI, kita mungkin akan melihat era di mana &amp;ldquo;FPU&amp;rdquo; dipasang sebagai standar pada server dan infrastruktur cloud.&lt;/p>
&lt;hr>
&lt;h2 id="8-use-case-yang-diharapkan">8. Use Case yang Diharapkan
&lt;/h2>&lt;p>Sekarang setelah FHE mendekati kecepatan yang praktis, inovasi destruktif diharapkan terjadi di berbagai bidang berikut.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Perlindungan Privasi dalam Analisis Medis dan Genomik&lt;/strong>:
Dengan membiarkan AI di cloud melatih data rekam medis pasien atau data DNA yang dimiliki oleh banyak rumah sakit sambil tetap terenkripsi dengan FHE, pengembangan model diagnosis kanker akurasi tinggi atau penemuan obat baru dapat dilakukan tanpa melanggar undang-undang privasi (seperti HIPAA atau GDPR).&lt;/li>
&lt;li>&lt;strong>Deteksi Penipuan dan Anti-Pencucian Uang (AML) untuk Institusi Keuangan&lt;/strong>:
Bank-bank yang saling bersaing dapat mencocokkan data masing-masing dalam keadaan terenkripsi tanpa mengungkapkan informasi rekening pelanggan atau riwayat transaksi, sehingga memungkinkan analisis antar bank (cross-bank) untuk mendeteksi jaringan transfer penipuan yang besar.&lt;/li>
&lt;li>&lt;strong>API Inferensi AI yang Aman (MaaS: Model as a Service)&lt;/strong>:
Pengguna dapat mengenkripsi audio, gambar wajah, atau prompt mereka sendiri dan mengirimkannya ke layanan AI (seperti LLM seperti ChatGPT). Penyedia AI menghasilkan respons tanpa mengetahui input pengguna sama sekali, dan mengembalikannya sebagai ciphertext. Dengan ini, kekhawatiran tentang &amp;ldquo;AI yang mempelajari atau mengintip informasi pribadi&amp;rdquo; dapat sepenuhnya dihilangkan.&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="9-kesimpulan-masa-depan-kriptografi-menuju-komputasi-tak-terlihat">9. Kesimpulan: Masa Depan Kriptografi menuju &amp;ldquo;Komputasi Tak Terlihat&amp;rdquo;
&lt;/h2>&lt;p>Sama seperti penemuan kriptografi kunci publik (RSA) pada tahun 1970-an yang memungkinkan komunikasi aman di internet (seperti HTTPS), penemuan FHE oleh Craig Gentry adalah salah satu tonggak sejarah paling penting dalam sejarah kriptografi.&lt;/p>
&lt;p>Saat ini, Fully Homomorphic Encryption (FHE) telah melompat dari teori di laboratorium, dan memasuki tahap di mana Microsoft, IBM, Intel, Google, dan banyak startup bersaing keras menuju implementasi praktisnya. Walaupun tantangan dalam biaya komputasi dan ukuran data masih ada, perbaikan kinerja terus berlanjut melampaui Hukum Moore berkat penyempurnaan algoritma dan evolusi akselerator hardware.&lt;/p>
&lt;p>Beberapa tahun dari sekarang, &amp;ldquo;komputasi data sambil tetap terenkripsi&amp;rdquo; tidak akan menjadi sesuatu yang istimewa, melainkan akan menjadi praktik perlindungan data standar dalam layanan cloud. FHE adalah kunci keamanan generasi berikutnya yang merealisasikan &lt;strong>keseimbangan tertinggi antara privasi absolut dan pemanfaatan data&lt;/strong> dalam masyarakat yang digerakkan oleh data.&lt;/p></description></item><item><title>Apakah Terdapat Algoritma yang Melampaui GNFS (General Number Field Sieve)?</title><link>http://kenji.blog/id/p/beyond-gnfs-integer-factorization-algorithms/</link><pubDate>Fri, 11 Sep 2026 09:00:00 +0900</pubDate><guid>http://kenji.blog/id/p/beyond-gnfs-integer-factorization-algorithms/</guid><description>&lt;img src="http://kenji.blog/p/beyond-gnfs-integer-factorization-algorithms/img/eyecatch.jpg" alt="Featured image of post Apakah Terdapat Algoritma yang Melampaui GNFS (General Number Field Sieve)?" />&lt;h2 id="1-pendahuluan-faktorisasi-bilangan-prima-dan-fondasi-kriptografi-modern">1. Pendahuluan: Faktorisasi Bilangan Prima dan Fondasi Kriptografi Modern
&lt;/h2>&lt;p>Keamanan komunikasi internet dalam masyarakat modern sangat bergantung pada keamanan kriptografi RSA, yang merupakan kriptografi kunci publik. Keamanan kriptografi RSA sendiri didasarkan pada asumsi matematis tentang &amp;ldquo;kesulitan memfaktorkan bilangan komposit raksasa menjadi bilangan prima&amp;rdquo;. Jika algoritma faktorisasi bilangan prima yang sangat efisien ditemukan, infrastruktur komunikasi di seluruh dunia akan runtuh dari dasarnya.&lt;/p>
&lt;p>Saat ini, dalam hal faktorisasi bilangan bulat raksasa menggunakan komputer klasik, algoritma tercepat dan terkuat yang mendominasi adalah &lt;strong>General Number Field Sieve (GNFS)&lt;/strong>. GNFS lahir sebagai bentuk perluasan dari Special Number Field Sieve (SNFS) yang diusulkan pada akhir tahun 1980-an, dan hingga hari ini telah mencetak rekor faktorisasi bilangan komposit raksasa seperti RSA-768 dan RSA-250.&lt;/p>
&lt;p>Namun, para kriptografer dan matematikawan selalu memiliki pertanyaan berikut: &amp;ldquo;Apakah terdapat algoritma klasik yang melampaui GNFS?&amp;rdquo; &amp;ldquo;Di mana batas kemampuan komputer klasik?&amp;rdquo; dan, &amp;ldquo;Bagaimana komputer kuantum akan mendobrak situasi ini?&amp;rdquo;&lt;/p>
&lt;p>Dalam artikel ini, kita akan membedah secara mendalam struktur matematis yang mendasari GNFS, dan melakukan analisis teknis terperinci mengenai pemilihan polinomial, proses penyaringan (sieving), dan langkah aljabar linear menggunakan metode Block Wiedemann. Selanjutnya, kita akan mengkaji metode perluasan GNFS seperti peningkatan Coppersmith, dan membandingkan serta menjelaskan perbedaan krusial antara algoritma waktu sub-eksponensial (Sub-exponential time) klasik dan algoritma waktu polinomial kuantum dari sudut pandang matematis.&lt;/p>
&lt;hr>
&lt;h2 id="2-kompleksitas-waktu-asimtotik-dan-notasi-l-l-notation">2. Kompleksitas Waktu Asimtotik dan Notasi L (L-notation)
&lt;/h2>&lt;p>Dalam mengevaluasi kompleksitas waktu algoritma faktorisasi prima, alih-alih menggunakan notasi waktu polinomial standar (seperti $O(n^k)$), &lt;strong>Notasi L (L-notation)&lt;/strong> digunakan untuk menyatakan waktu sub-eksponensial terhadap jumlah digit input $n$. Notasi L didefinisikan sebagai berikut:&lt;/p>
$$
L_n[\alpha, c] = \exp \left( (c + o(1)) (\ln n)^\alpha (\ln \ln n)^{1-\alpha} \right)
$$
&lt;p>Di sini, $n$ adalah bilangan bulat yang akan difaktorkan, $\ln n$ adalah logaritma natural dan sebanding dengan panjang bit dari $n$.&lt;/p>
&lt;ul>
&lt;li>Kasus $\alpha = 0$: $L_n[0, c] = \exp(c \ln \ln n) = (\ln n)^c$, yang merepresentasikan &lt;strong>waktu polinomial (Polynomial time)&lt;/strong> terhadap panjang bit.&lt;/li>
&lt;li>Kasus $\alpha = 1$: $L_n[1, c] = \exp(c \ln n) = n^c$, yang merepresentasikan &lt;strong>waktu eksponensial (Exponential time)&lt;/strong> terhadap panjang bit.&lt;/li>
&lt;li>Kasus $0 &lt; \alpha &lt; 1$: Berada di antara waktu polinomial dan waktu eksponensial, yang merepresentasikan &lt;strong>waktu sub-eksponensial (Sub-exponential time)&lt;/strong>.&lt;/li>
&lt;/ul>
&lt;p>Evolusi algoritma faktorisasi prima di masa lalu juga merupakan sejarah dalam mengurangi nilai $\alpha$ ini secara bertahap.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Metode Pecahan Berlanjut (CFRAC) dan Multiple Polynomial Quadratic Sieve (MPQS)&lt;/strong>: Termasuk dalam kelas $\alpha = 1/2$, dengan kompleksitas waktu sekitar $L_n[1/2, 1]$.&lt;/li>
&lt;li>&lt;strong>General Number Field Sieve (GNFS)&lt;/strong>: Mencapai $\alpha = 1/3$, dan membanggakan kompleksitas waktu $L_n[1/3, (64/9)^{1/3}]$ yang tercepat di antara algoritma klasik yang dikenal saat ini.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="3-gambaran-keseluruhan-algoritma-dan-struktur-matematis-gnfs-general-number-field-sieve">3. Gambaran Keseluruhan Algoritma dan Struktur Matematis GNFS (General Number Field Sieve)
&lt;/h2>&lt;p>GNFS memiliki fondasi matematis yang sangat kompleks dan canggih. Ide dasarnya merupakan perpanjangan dari Teorema Kecil Fermat dan Quadratic Sieve (QS), yaitu menemukan pasangan non-trivial $(X, Y)$ yang memenuhi kongruensi $X^2 \equiv Y^2 \pmod n$ dan $X \not\equiv \pm Y \pmod n$, untuk kemudian menurunkan faktor dari $n$ melalui $\gcd(X-Y, n)$.&lt;/p>
&lt;p>Namun, esensi sejati dari GNFS adalah bahwa ini tidak hanya dilakukan pada lapangan bilangan rasional $\mathbb{Q}$, tetapi mencari &amp;ldquo;bilangan halus (Smooth numbers)&amp;rdquo; secara bersamaan baik pada lapangan perluasan yang disebut lapangan bilangan aljabar (Algebraic Number Field) $\mathbb{Q}(\alpha)$ dan lapangan bilangan rasional, serta membangun hubungan kongruensi melalui homomorfisma.&lt;/p>
&lt;p>Proses GNFS pada dasarnya dibagi menjadi 5 fase utama.&lt;/p>
&lt;div class="mermaid">graph TD
A["Masalah Faktorisasi Prima (Input n)"] --> B["1. Pemilihan Polinomial (Polynomial Selection)"]
B --> C["2. Proses Penyaringan (Sieving Phase)"]
C --> D["3. Penyaringan Lanjutan (Filtering Phase)"]
D --> E["4. Aljabar Linear (Linear Algebra Phase)"]
E --> F["5. Akar Kuadrat (Square Root Phase)"]
F --> G["Output Faktor Prima p, q"]&lt;/div>
&lt;h3 id="31-fase-1-pemilihan-polinomial-polynomial-selection">3.1 Fase 1: Pemilihan Polinomial (Polynomial Selection)
&lt;/h3>&lt;p>Keberhasilan GNFS sangat bergantung pada pemilihan polinomial yang tepat. Tujuannya adalah untuk menemukan dua polinomial tak tereduksi $f_1(x)$ (sisi rasional) dan $f_2(x)$ (sisi aljabar) yang memiliki akar persekutuan $m$. Dengan kata lain, memenuhi:
$f_1(m) \equiv f_2(m) \equiv 0 \pmod n$&lt;/p>
&lt;p>Biasanya, untuk sisi rasional dipilih polinomial derajat 1 $f_1(x) = x - m$, dan untuk sisi aljabar $f_2(x)$ dipilih polinomial monik berderajat $d$ (biasanya 5 atau 6). Pendekatan paling klasik adalah &lt;strong>Metode Base-$m$&lt;/strong>.
Kita memilih bilangan bulat $m = \lfloor n^{1/(d+1)} \rfloor$ yang mendekati akar ke-$(d+1)$ dari $n$, lalu mengekspansi $n$ ke dalam basis $m$.
$n = c_d m^d + c_{d-1} m^{d-1} + \dots + c_1 m + c_0$
Dari sini, kita memperoleh polinomial $f_2(x) = c_d x^d + c_{d-1} x^{d-1} + \dots + c_0$. Jelas bahwa $f_2(m) = n \equiv 0 \pmod n$.&lt;/p>
&lt;p>Namun, pada implementasi modern, &lt;strong>Algoritma Kleinjung&lt;/strong> digunakan. Algoritma ini mencari polinomial yang tidak memiliki koefisien yang terlalu ekstrem (optimasi Skewness), mengoptimalkan properti aljabar (seperti Murphy&amp;rsquo;s $E$ value atau $\alpha$-value), dan memudahkan probabilitas dihasilkannya bilangan yang halus (smooth numbers) pada saat proses penyaringan. Langkah ini saja memerlukan sumber daya komputasi yang sangat besar.&lt;/p>
&lt;h3 id="32-fase-2-proses-penyaringan-sieving-phase">3.2 Fase 2: Proses Penyaringan (Sieving Phase)
&lt;/h3>&lt;p>Setelah polinomial ditentukan, kita masuk ke fase &amp;ldquo;Penyaringan (Sieving)&amp;rdquo;, yang merupakan fase dengan beban komputasi paling tinggi dari algoritma ini. Di sini, kita mencari pasangan $(a, b)$. Pasangan ini saling prima (coprime), dan diwajibkan agar dua nilai berikut ini &amp;ldquo;halus (Smooth)&amp;rdquo; secara bersamaan:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Norm sisi rasional&lt;/strong>: $F_1(a, b) = b \cdot f_1(a/b) = a - bm$&lt;/li>
&lt;li>&lt;strong>Norm sisi aljabar&lt;/strong>: $F_2(a, b) = b^d \cdot f_2(a/b)$&lt;/li>
&lt;/ol>
&lt;p>&amp;ldquo;Halus&amp;rdquo; berarti dapat difaktorkan hanya dengan bilangan prima yang berada di bawah batas tertentu yang ditentukan (Sieve bound). Basis faktor (Factor base) sisi rasional dan basis faktor sisi aljabar disiapkan, dan pada ruang pencarian raksasa, bilangan halus ditemukan dengan efisien seperti cara penyaringan Eratosthenes (Sieve of Eratosthenes).
Saat ini, metode yang disebut &lt;strong>Lattice Sieving (Penyaringan Kisi)&lt;/strong> telah menjadi metode utama, di mana bilangan prima tertentu $q$ difiksasi, dan hanya menyaring pasangan $(a, b)$ pada sub-kisi sehingga baik sisi rasional maupun sisi aljabar merupakan kelipatan dari $q$, sehingga mewujudkan efisiensi yang sangat tinggi.&lt;/p>
&lt;h3 id="33-fase-3-penyaringan-lanjutan-filtering-phase">3.3 Fase 3: Penyaringan Lanjutan (Filtering Phase)
&lt;/h3>&lt;p>Jumlah relasi (relations) halus yang ditemukan dalam proses penyaringan bisa mencapai ratusan juta hingga miliaran. Namun, ini juga mengandung banyak informasi yang tidak perlu.
Tujuan penyaringan lanjutan (filtering) adalah untuk membangun matriks jarang (Sparse Matrix) berukuran raksasa sambil mengurangi dimensinya sekecil mungkin.&lt;/p>
&lt;p>Secara khusus, operasi berikut dilakukan:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Singleton removal&lt;/strong>: Menghapus relasi yang memuat faktor prima yang hanya muncul satu kali.&lt;/li>
&lt;li>&lt;strong>Clique removal / Merging&lt;/strong>: Mengalikan relasi satu sama lain yang memiliki faktor prima yang muncul dua kali atau lebih, mengeliminasi variabel, dan mereduksinya menjadi sistem persamaan yang lebih padat namun dengan dimensi yang lebih kecil.&lt;/li>
&lt;/ul>
&lt;p>Melalui hal ini, matriks dengan miliaran baris dikompresi menjadi matriks jarang raksasa $\mathbf{A}$ (elemen berupa 0 dan 1 pada lapangan $\mathbb{F}_2$) setingkat puluhan juta baris.&lt;/p>
&lt;h3 id="34-fase-4-aljabar-linear-linear-algebra-phase">3.4 Fase 4: Aljabar Linear (Linear Algebra Phase)
&lt;/h3>&lt;p>Di sini, kita menemukan vektor solusi non-trivial $\mathbf{x}$ untuk persamaan $\mathbf{A} \mathbf{x} \equiv \mathbf{0} \pmod 2$. Dengan kata lain, ini adalah masalah mencari ruang nol kiri (Left Nullspace) dari matriks jarang yang raksasa.&lt;/p>
&lt;p>Karena ukuran matriksnya sangat besar, mustahil untuk menghitungnya dengan metode eliminasi Gauss biasa ($O(N^3)$). Oleh karena itu, metode iteratif yang merupakan salah satu metode subruang Krylov digunakan. Secara historis, &lt;strong>Metode Block Lanczos&lt;/strong> digunakan, namun dalam lingkungan komputasi terdistribusi saat ini, &lt;strong>Metode Block Wiedemann (Block Wiedemann Algorithm)&lt;/strong>, yang secara drastis dapat mengurangi &lt;em>overhead&lt;/em> komunikasi, menjadi metode utama.&lt;/p>
&lt;p>Metode Block Wiedemann menghitung polinomial minimal dari deretan matriks $\mathbf{A}$ dan vektor, lalu membangun basis dari ruang nol menggunakan algoritma Berlekamp-Massey. Langkah ini sangat sulit untuk diparalelkan dan merupakan salah satu &lt;em>bottleneck&lt;/em> (hambatan) terbesar GNFS, yang membutuhkan jaringan komunikasi yang terikat erat dari superkomputer atau &lt;em>cluster&lt;/em> berskala besar.&lt;/p>
&lt;h3 id="35-fase-5-akar-kuadrat-square-root-phase">3.5 Fase 5: Akar Kuadrat (Square Root Phase)
&lt;/h3>&lt;p>Dari solusi aljabar linear, produk yang merupakan &amp;ldquo;kuadrat sempurna&amp;rdquo; dibangun baik untuk sisi rasional maupun sisi aljabar.
Pada sisi rasional, $\prod (a-bm)$ menjadi kuadrat $X^2$ dari suatu bilangan bulat $X$, sementara pada sisi aljabar, produk ideal yang berkorespondensi menjadi kuadrat sempurna $\gamma^2$ di atas lapangan aljabar.
Dengan menghitung $\gamma$ pada lapangan aljabar ini, dan menerapkan pemetaan homomorfisma $\phi: \alpha \mapsto m \pmod n$ ke dalam gelanggang bilangan bulat rasional, kita memperoleh kongruensi:
$X^2 \equiv \phi(\gamma)^2 \equiv Y^2 \pmod n$&lt;/p>
&lt;p>Untuk perhitungan akar kuadrat pada lapangan aljabar, algoritma yang kompleks seperti &lt;strong>Metode Montgomery (Montgomery&amp;rsquo;s Method)&lt;/strong> digunakan, dan diperlukan pengetahuan mendalam tentang teori bilangan aljabar. Terakhir, dengan menghitung $\gcd(X-Y, n)$, jika faktor non-trivial diperoleh, maka faktorisasi prima telah selesai.&lt;/p>
&lt;hr>
&lt;h2 id="4-apakah-terdapat-algoritma-klasik-yang-melampaui-gnfs">4. Apakah Terdapat Algoritma Klasik yang Melampaui GNFS?
&lt;/h2>&lt;p>Hingga saat ini, belum ada algoritma klasik yang ditemukan yang kompleksitas asimtotiknya lebih rendah dari $L_n[1/3, c]$ untuk faktorisasi prima dari bilangan bulat umum. Namun, ada beberapa percobaan dan algoritma turunan untuk menembus batas-batas teoritis maupun praktis.&lt;/p>
&lt;h3 id="41-multiple-number-field-sieve-mnfs">4.1 Multiple Number Field Sieve (MNFS)
&lt;/h3>&lt;p>Sebagai pendekatan yang memperluas GNFS, terdapat &lt;strong>Multiple Number Field Sieve (MNFS)&lt;/strong> yang diusulkan oleh D. Coppersmith. Sementara GNFS menggunakan 2 polinomial (sisi rasional dan sisi aljabar), MNFS menggunakan beberapa polinomial sisi aljabar yang berbeda secara bersamaan terhadap satu polinomial sisi rasional.&lt;/p>
$$ f_1(x), f_{2,1}(x), f_{2,2}(x), \dots, f_{2,V}(x) $$
&lt;p>Dengan menggunakan beberapa lapangan aljabar, probabilitas untuk &amp;ldquo;menjadi halus pada salah satu lapangan aljabar&amp;rdquo; pada setiap langkah penyaringan dapat ditingkatkan secara drastis. Melalui pendekatan ini, Coppersmith berhasil sedikit mengurangi konstanta $c$ dari kompleksitas $L_n[1/3, c]$.
Secara khusus, secara teoritis telah ditunjukkan bahwa sementara konstanta GNFS adalah $c = (64/9)^{1/3} \approx 1.923$, dengan mengoptimalkan MNFS, kompleksitas waktu dapat direduksi hingga sekitar $c \approx 1.902$.
Namun dalam praktiknya, &lt;em>overhead&lt;/em> pengelolaan berbagai lapangan aljabar sangatlah besar, dan hal ini belum mencapai terobosan yang menentukan untuk modulus RSA dalam skala praktis.&lt;/p>
&lt;h3 id="42-apakah-algoritma-kelas-l_n14-mungkin">4.2 Apakah Algoritma Kelas $L_n[1/4]$ Mungkin?
&lt;/h3>&lt;p>Mengenai batasan algoritma klasik dari faktorisasi prima, sebuah tema yang telah diperdebatkan di antara para matematikawan selama bertahun-tahun adalah pertanyaan &amp;ldquo;Apakah ada algoritma dengan pangkat $\alpha = 1/4$?&amp;rdquo;.
GNFS saat ini dan turunannya terikat kuat pada kerangka kerja &amp;ldquo;pencarian kehalusan&amp;rdquo; menggunakan saringan, dan diyakini secara luas bahwa $\alpha = 1/3$ adalah batas dalam paradigma ini. Dari analisis probabilitas distribusi bilangan bulat halus yang menggunakan fungsi Dickman (Dickman function), diyakini bahwa dengan kombinasi konstruksi lapangan aljabar dan saringan saat ini, seoptimal apa pun dioptimalkan, tembok $O(L_n[1/3])$ tidak dapat dilewati.&lt;/p>
&lt;p>Jika algoritma $L_n[1/4]$, atau algoritma waktu polinomial klasik ada, itu pasti akan bergantung pada struktur matematis baru yang benar-benar berbeda dari pendekatan &amp;ldquo;berbasis kehalusan&amp;rdquo; seperti GNFS, yang saat ini tidak dapat dibayangkan oleh manusia (sebagai contoh, pendekatan geometri aljabar yang lebih tingkat tinggi seperti algoritma Schoof untuk kriptografi kurva eliptik, dll.). Namun, saat ini belum ada tanda-tanda hal semacam itu akan muncul.&lt;/p>
&lt;hr>
&lt;h2 id="5-terobosan-melalui-komputer-kuantum-algoritma-shor">5. Terobosan Melalui Komputer Kuantum: Algoritma Shor
&lt;/h2>&lt;p>Sementara komputer klasik sedang berhadapan dengan tembok $L_n[1/3]$, tembok ini telah dihancurkan dengan secara radikal mengubah model komputasinya itu sendiri, melalui &lt;strong>Algoritma Shor (Shor&amp;rsquo;s Algorithm)&lt;/strong> yang diterbitkan oleh Peter Shor pada tahun 1994.&lt;/p>
&lt;h3 id="51-dampak-waktu-polinomial-kuantum">5.1 Dampak Waktu Polinomial Kuantum
&lt;/h3>&lt;p>Algoritma Shor mereduksi masalah faktorisasi prima menjadi &amp;ldquo;Masalah Pencarian Orde (Order Finding Problem)&amp;rdquo;. Ini adalah masalah untuk menemukan periode (orde) $r$ dari fungsi $f(x) = a^x \pmod n$ untuk bilangan bulat $a$ tertentu.
Komputer klasik membutuhkan waktu eksponensial untuk menemukan periode ini, tetapi dengan menggunakan &lt;strong>Estimasi Fase Kuantum (QPE: Quantum Phase Estimation)&lt;/strong> dan &lt;strong>Transformasi Fourier Kuantum (QFT: Quantum Fourier Transform)&lt;/strong> pada komputer kuantum, evaluasi paralel pada superposisi (Superposition) semua status/keadaan dilakukan, sehingga sangat memungkinkan untuk mengekstraksi periode $r$ dengan probabilitas yang tinggi.&lt;/p>
&lt;p>Dari sudut pandang kompleksitas, waktu eksekusi algoritma Shor adalah &lt;strong>waktu polinomial kuantum&lt;/strong>, yang secara khusus direpresentasikan sebagai berikut:
&lt;/p>
$$ O((\log n)^3) $$
&lt;p>
Dengan mempertimbangkan implementasi sirkuit yang dioptimalkan dalam beberapa tahun terakhir, hal ini dapat direduksi lebih lanjut menjadi $O((\log n)^2 \log \log n)$.&lt;/p>
&lt;div class="mermaid">graph LR
A["Algoritma Klasik (GNFS)"] -->|Batas| B["Waktu Sub-eksponensial L_n[1/3]"]
C["Algoritma Kuantum (Shor)"] -->|Terobosan| D["Waktu Polinomial O((log n)^3)"]
B --> E["Penggunaan Lanjutan RSA (Peningkatan Panjang Kunci)"]
D --> F["Keruntuhan Total Kriptografi RSA"]&lt;/div>
&lt;h3 id="52-waktu-sub-eksponensial-klasik-vs-waktu-polinomial-kuantum">5.2 Waktu Sub-eksponensial Klasik vs Waktu Polinomial Kuantum
&lt;/h3>&lt;p>Perbedaan antara dua kelas kompleksitas komputasi ini memiliki makna yang sangat krusial (menentukan) dalam keamanan kriptografi dunia nyata.&lt;/p>
&lt;p>Sebagai contoh, perhatikan kasus pemfaktoran RSA-2048 (bilangan komposit 2048-bit).&lt;/p>
&lt;ul>
&lt;li>&lt;strong>GNFS (Klasik)&lt;/strong>: Mensubstitusikan $n \approx 2^{2048}$ ke dalam $L_n[1/3, 1.923]$, diperlukan sekitar $2^{112}$ operasi. Ini adalah jumlah perhitungan astronomis yang akan membutuhkan waktu lebih lama daripada umur alam semesta, bahkan jika semua sumber daya komputasi di Bumi saat ini digabungkan.&lt;/li>
&lt;li>&lt;strong>Algoritma Shor (Kuantum)&lt;/strong>: Dengan algoritma $O((\log n)^3)$, hanya diperlukan sekitar $2048^3 \approx 8.5 \times 10^9$ operasi gerbang logika. Hal ini berarti, jika perangkat keras yang tepat (komputer kuantum universal dengan jutaan qubit fisik dan kemampuan koreksi kesalahan) tersedia, perhitungan dapat diselesaikan hanya dalam beberapa jam atau beberapa hari saja.&lt;/li>
&lt;/ul>
&lt;p>Pergeseran paradigma dari waktu sub-eksponensial dengan &amp;ldquo;pangkat $\alpha=1/3$&amp;rdquo; menuju &amp;ldquo;waktu polinomial&amp;rdquo; meniadakan strategi kriptografi tradisional yang menjamin keamanan dengan memperpanjang panjang kunci.&lt;/p>
&lt;hr>
&lt;h2 id="6-kesimpulan-prospek-menuju-generasi-mendatang">6. Kesimpulan: Prospek Menuju Generasi Mendatang
&lt;/h2>&lt;p>Konsensus komunitas ilmiah saat ini atas pertanyaan &amp;ldquo;Apakah ada algoritma klasik yang melampaui GNFS?&amp;rdquo; adalah sebagai berikut:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Peningkatan praktis terus berlanjut, tetapi tidak ada lompatan asimtotik&lt;/strong>: Berbagai upaya terus dilakukan untuk meningkatkan bagian konstanta $c$ pada GNFS, seperti MNFS, optimasi pemilihan polinomial, paralelisasi Metode Block Wiedemann, dsb. Namun, kemungkinan ditemukannya algoritma klasik di bawah $\alpha = 1/3$ dianggap sangatlah rendah.&lt;/li>
&lt;li>&lt;strong>Keamanan RSA pada komputer klasik masih tetap kuat&lt;/strong>: Kompleksitas perhitungan GNFS masih sangat masif, dan RSA-2048 atau RSA-4096 akan tetap aman terhadap serangan komputer klasik untuk beberapa dekade mendatang.&lt;/li>
&lt;li>&lt;strong>Ancaman sebenarnya adalah algoritma kuantum&lt;/strong>: Algoritma Shor-lah, yang didasarkan pada prinsip-prinsip mekanika kuantum, yang mendobrak tembok kompleksitas komputasi. Oleh karena itu, dunia dipaksa untuk beralih ke Post-Quantum Cryptography (PQC). Garis terdepan kriptografi saat ini adalah transisi ke masalah matematis baru yang dianggap sulit untuk dipecahkan (tidak dapat dipecahkan dalam waktu polinomial) bahkan oleh komputer kuantum, seperti kriptografi kisi (lattice-based cryptography) dan kriptografi berbasis hash (hash-based cryptography).&lt;/li>
&lt;/ol>
&lt;p>General Number Field Sieve (GNFS) adalah salah satu &amp;ldquo;puncak pencapaian tertinggi&amp;rdquo; umat manusia dalam menantang batas maksimal matematika klasik dan desain algoritma. Memahami struktur matematis yang mendalam dari GNFS bukan hanya mempelajari sejarah kriptanalisis, namun juga merupakan perjalanan pencarian intelektual untuk bersentuhan langsung dengan keindahan teori kompleksitas komputasi dan teori bilangan aljabar. Sampai hari di mana komputer kuantum direalisasikan, GNFS nampaknya akan terus mempertahankan takhtanya sebagai algoritma faktorisasi prima terkuat.&lt;/p></description></item><item><title>【Ilustrasi PQC】Perbandingan Algoritma Utama Kriptografi Pasca-Kuantum</title><link>http://kenji.blog/id/p/post-quantum-cryptography-algorithms-comparison/</link><pubDate>Fri, 11 Sep 2026 07:00:00 +0900</pubDate><guid>http://kenji.blog/id/p/post-quantum-cryptography-algorithms-comparison/</guid><description>&lt;img src="http://kenji.blog/p/post-quantum-cryptography-algorithms-comparison/img/eyecatch.jpg" alt="Featured image of post 【Ilustrasi PQC】Perbandingan Algoritma Utama Kriptografi Pasca-Kuantum" />&lt;h2 id="1-pendahuluan-krisis-kriptografi-yang-dibawa-oleh-komputer-kuantum">1. Pendahuluan: &amp;ldquo;Krisis Kriptografi&amp;rdquo; yang Dibawa oleh Komputer Kuantum
&lt;/h2>&lt;p>Dalam masyarakat internet modern, teknologi kriptografi kunci publik sangat diperlukan sebagai infrastruktur untuk melindungi kerahasiaan komunikasi dan integritas data. Kriptografi RSA dan Kriptografi Kurva Eliptik (ECC) yang banyak digunakan saat ini, masing-masing bergantung pada penghalang matematis berupa &amp;ldquo;kesulitan pemfaktoran bilangan komposit besar&amp;rdquo; dan &amp;ldquo;kesulitan masalah logaritma diskrit pada kurva eliptik&amp;rdquo; untuk menjamin keamanannya. Pada komputer klasik (termasuk superkomputer yang kita gunakan saat ini), telah dibuktikan bahwa memecahkan masalah matematis ini membutuhkan waktu yang lebih lama dari usia alam semesta, yang mana hal ini menjadi dasar dari keamanan tersebut.&lt;/p>
&lt;p>Namun, premis yang kokoh ini akan dirobohkan oleh teori dan kemajuan praktis dari &lt;strong>komputer kuantum&lt;/strong>. Pada tahun 1994, kriptografer Peter Shor menerbitkan &amp;ldquo;&lt;strong>Algoritma Shor&lt;/strong>&amp;rdquo;, yang secara teoretis membuktikan bahwa masalah pemfaktoran prima dan logaritma diskrit dapat dipecahkan dalam &amp;ldquo;waktu polinomial&amp;rdquo; dengan menjalankannya di atas komputer kuantum toleransi kesalahan tujuan umum (CRQC: Cryptographically Relevant Quantum Computer) dengan kinerja yang memadai. Ini berarti bahwa semua kriptografi kunci publik yang digunakan saat ini akan menjadi tidak berguna.&lt;/p>
&lt;div class="mermaid">graph TD
A["Komputer Kuantum Skala Besar (CRQC)"] -->|Menjalankan| B["Algoritma Shor"]
B -->|Pemecahan dalam Waktu Polinomial| C["Masalah Pemfaktoran Prima (RSA)"]
B -->|Pemecahan dalam Waktu Polinomial| D["Masalah Logaritma Diskrit (ECC / ECDSA)"]
C --> E["Penyadapan Komunikasi Kriptografi / Perubahan Data / Pemalsuan Identitas"]
D --> E
F["Store Now, Decrypt Later (SNDL)"] --> E&lt;/div>
&lt;p>Adalah sangat berbahaya jika berpikir bahwa &amp;ldquo;tidak ada masalah karena penyelesaian komputer kuantum secara penuh masih beberapa dekade lagi&amp;rdquo;. Ini karena metode serangan yang disebut &lt;strong>Store Now, Decrypt Later (SNDL: Simpan Sekarang, Dekripsi Nanti)&lt;/strong> telah menjadi ancaman nyata. Ini adalah serangan di mana negara yang berniat jahat atau kelompok peretas menyimpan sejumlah besar data komunikasi terenkripsi saat ini (seperti lalu lintas TLS) dalam penyimpanan, dan mendekripsi semuanya pada saat komputer kuantum yang kuat tersedia di masa depan. Rahasia negara, informasi infrastruktur, dan data medis yang harus dilindungi dalam jangka panjang sudah terpapar pada ancaman ini.&lt;/p>
&lt;p>Selain itu, ada juga &lt;strong>Algoritma Grover&lt;/strong>, yang ditemukan pada tahun 1996, yang memengaruhi kriptografi kunci simetris (seperti AES) dan fungsi hash (seperti SHA-256). Hal ini mengurangi kompleksitas komputasi serangan brute force (uji coba menyeluruh) menjadi akar kuadratnya. Dengan kata lain, tingkat keamanan AES-128 secara efektif berkurang setengahnya menjadi 2 pangkat 64, sehingga pada era kuantum, penggunaan kunci yang lebih panjang dan panjang hash seperti AES-256 dan SHA-384 direkomendasikan.&lt;/p>
&lt;p>Untuk melawan krisis kriptografi yang belum pernah terjadi sebelumnya ini, &lt;strong>Kriptografi Pasca-Kuantum (Post-Quantum Cryptography: PQC)&lt;/strong> dilahirkan, yang didasarkan pada masalah matematis baru yang sulit dipecahkan bahkan dengan menggunakan komputer kuantum. Berdasarkan hasil proses standarisasi PQC yang dipimpin oleh National Institute of Standards and Technology (NIST) Amerika Serikat, artikel ini akan menjelaskan secara sangat rinci mengenai algoritma PQC utama, mulai dari latar belakang matematis, mekanisme, hingga perbandingan arsitekturnya.&lt;/p>
&lt;hr>
&lt;h2 id="2-gambaran-lengkap-dan-sejarah-proyek-standarisasi-pqc-oleh-nist">2. Gambaran Lengkap dan Sejarah Proyek Standarisasi PQC oleh NIST
&lt;/h2>&lt;p>Transisi teknologi kriptografi membutuhkan waktu dari beberapa tahun hingga puluhan tahun, termasuk mendesain ulang protokol, memperbarui sistem, dan mengganti perangkat keras. Oleh karena itu, para ahli kriptografi di seluruh dunia telah memulai penelitian PQC sejak dini. Peran utama dalam hal ini dimainkan oleh NIST (National Institute of Standards and Technology) Amerika Serikat. Pada tahun 2016, NIST secara terbuka menyerukan proses standarisasi PQC dan menerima proposal untuk algoritma kriptografi yang sama sekali baru dari komunitas kriptografi di seluruh dunia.&lt;/p>
&lt;p>Target standarisasi dibagi ke dalam dua kategori utama berikut:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Kriptografi Kunci Publik / Mekanisme Enkapsulasi Kunci (KEM: Key Encapsulation Mechanism)&lt;/strong>: Mekanisme untuk membagikan (mendistribusikan) kunci simetris secara aman untuk mengenkripsi jalur komunikasi, seperti pada koneksi TLS.&lt;/li>
&lt;li>&lt;strong>Tanda Tangan Digital (Digital Signatures)&lt;/strong>: Mekanisme untuk membuktikan bahwa tidak ada gangguan pada data dan tidak ada pemalsuan identitas pengirim (otentisitas) dalam pembaruan perangkat lunak atau sertifikat elektronik.&lt;/li>
&lt;/ol>
&lt;p>Setelah sekitar 6 tahun evaluasi, analisis, dan kompetisi kriptanalisis yang sangat ketat (Putaran 1 hingga Putaran 3), evaluasi tambahan pada Putaran 4 dilakukan untuk beberapa algoritma. Sebagai hasilnya, pada tahun 2024, algoritma berikut secara resmi diterbitkan sebagai Standar Pemrosesan Informasi Federal (FIPS) dan ditetapkan sebagai standar global di masa depan:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>FIPS 203 (ML-KEM)&lt;/strong>: KEM berdasarkan CRYSTALS-Kyber&lt;/li>
&lt;li>&lt;strong>FIPS 204 (ML-DSA)&lt;/strong>: Tanda tangan digital berdasarkan CRYSTALS-Dilithium&lt;/li>
&lt;li>&lt;strong>FIPS 205 (SLH-DSA)&lt;/strong>: Tanda tangan berbasis hash tanpa status berdasarkan SPHINCS+&lt;/li>
&lt;li>&lt;strong>(Rencana untuk draf masa depan) FN-DSA&lt;/strong>: Tanda tangan digital berdasarkan FALCON&lt;/li>
&lt;/ul>
&lt;p>Algoritma yang terpilih ini bergantung pada &amp;ldquo;masalah kesulitan&amp;rdquo; matematis yang berbeda, memastikan keberagaman (Crypto Agility) sehingga sistem keseluruhan tidak akan runtuh jika kerentanan fatal ditemukan pada salah satu algoritma di masa depan. Dalam proses standarisasi, kriptografi berbasis kisi (Lattice-based cryptography) menjadi pemeran utama dari segi kinerja, sedangkan kriptografi berbasis hash dan kriptografi berbasis kode diadopsi sebagai cadangan yang kuat.&lt;/p>
&lt;hr>
&lt;h2 id="3-klasifikasi-pendekatan-matematis-utama-dari-pqc">3. Klasifikasi Pendekatan Matematis Utama dari PQC
&lt;/h2>&lt;p>Algoritma PQC diklasifikasikan ke dalam lima kategori utama berikut berdasarkan masalah matematis yang menjadi dasar keamanannya. Artikel ini secara khusus akan menggali lebih dalam tentang tiga pendekatan teratas.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Kriptografi Berbasis Kisi (Lattice-based Cryptography)&lt;/strong>:
Didasarkan pada Masalah Vektor Terpendek (SVP) dan Masalah Vektor Terdekat (CVP) dalam ruang kisi multidimensi, serta Masalah LWE yang diturunkan darinya. Ini merupakan inti dari standarisasi NIST, dengan contoh algoritma seperti Kyber, Dilithium, dan FALCON. Memiliki keseimbangan terbaik antara kecepatan pemrosesan, ukuran kunci publik, dan ukuran cipherteks (teks sandi), menjadikannya ideal untuk penggunaan serbaguna.&lt;/li>
&lt;li>&lt;strong>Kriptografi Berbasis Hash (Hash-based Cryptography)&lt;/strong>:
Keamanannya hanya bergantung pada &amp;ldquo;ketahanan bentrokan (collision resistance)&amp;rdquo; dan &amp;ldquo;sifat satu arah (one-wayness)&amp;rdquo; dari fungsi hash kriptografis (seperti SHA-2 dan SHAKE). Hanya dapat diterapkan pada tanda tangan digital (seperti SPHINCS+), namun bukti keamanannya adalah yang paling kuat, dan ketahanannya terhadap serangan matematis yang belum diketahui sangat tinggi.&lt;/li>
&lt;li>&lt;strong>Kriptografi Berbasis Kode (Code-based Cryptography)&lt;/strong>:
Didasarkan pada teori kode koreksi kesalahan, bergantung pada kesulitan Masalah Dekode Sindrom (Syndrome Decoding Problem). Classic McEliece yang diusulkan pada tahun 1970-an adalah algoritma yang paling representatif, dengan sejarah dan rekam jejak keamanan yang sangat panjang, namun di sisi lain ukuran kunci publiknya sangat besar, mencapai satuan megabita.&lt;/li>
&lt;li>&lt;strong>Kriptografi Polinomial Multivariat (Multivariate Polynomial Cryptography)&lt;/strong>:
Didasarkan pada kesulitan menemukan solusi untuk sistem persamaan kuadrat multivariat pada medan berhingga (Masalah MQ). Terutama diusulkan untuk tanda tangan digital (seperti Rainbow), tetapi selama putaran final NIST, metode serangan kuat ditemukan yang memungkinkan algoritma tersebut dibobol hanya dalam beberapa hari menggunakan satu komputer pribadi, sehingga banyak algoritma dari jenis ini keluar dari standar.&lt;/li>
&lt;li>&lt;strong>Kriptografi Berbasis Isogeni (Isogeny-based Cryptography)&lt;/strong>:
Didasarkan pada masalah pencarian jalur dalam grafik isogeni dari kurva eliptik. Ukuran kuncinya sangat kecil dan diharapkan menjadi penerus yang sah untuk ECC. Namun, kandidat finalnya yaitu &amp;ldquo;SIKE&amp;rdquo;, sepenuhnya dipecahkan hanya dalam beberapa jam di PC biasa menggunakan matematika klasik (seperti serangan Castryck-Decru) pada tahun 2022. Ini menjadi akhir dramatis yang melambangkan kesulitan dan kengerian dalam mendesain PQC.&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="4-kedalaman-kriptografi-kisi-dasar-matematis-masalah-lwe-dan-module-lwe">4. Kedalaman Kriptografi Kisi: Dasar Matematis Masalah LWE dan Module-LWE
&lt;/h2>&lt;p>Saat ini, yang paling diunggulkan dan menjadi pusat standarisasi adalah &lt;strong>Kriptografi Kisi (Lattice-based cryptography)&lt;/strong>. Akar keamanannya terletak pada &lt;strong>Masalah LWE (Learning with Errors: Pembelajaran dengan Kesalahan)&lt;/strong>. Diusulkan oleh Oded Regev pada tahun 2005, yang atas pencapaian terobosannya ini dianugerahi Hadiah Gödel. Pemahaman mengenai Masalah LWE adalah keharusan dalam membahas PQC modern.&lt;/p>
&lt;h3 id="41-apa-itu-masalah-lwe-learning-with-errors">4.1. Apa itu Masalah LWE (Learning with Errors)
&lt;/h3>&lt;p>Pertama, mari kita pertimbangkan sistem persamaan linear sederhana. Misalkan dalam modulus $q$, terdapat matriks acak $A$ yang diketahui dan vektor rahasia $\vec{s}$ yang tidak diketahui, serta hasil kalinya yaitu $\vec{b}$ diberikan:&lt;/p>
$$ \vec{b} = A\vec{s} \pmod q $$
&lt;p>Dalam hal ini, menemukan $\vec{s}$ yang tidak diketahui dari informasi publik $A$ dan $\vec{b}$ adalah mudah. Dengan menggunakan algoritma klasik &amp;ldquo;Eliminasi Gaussian&amp;rdquo;, $\vec{s}$ dapat dihitung dengan mudah dalam waktu polinomial.&lt;/p>
&lt;p>Namun, dengan menambahkan &amp;ldquo;kesalahan yang disengaja dan kecil (noise)&amp;rdquo; pada persamaan ini, tingkat kesulitan masalah melonjak secara dramatis. Inilah &lt;strong>Masalah LWE&lt;/strong>.&lt;/p>
&lt;p>Kita menyiapkan vektor rahasia tak diketahui $\vec{s} \in \mathbb{Z}_q^n$ dan matriks yang dipilih secara acak $A \in \mathbb{Z}_q^{m \times n}$. Selanjutnya, kita menyiapkan vektor kesalahan $\vec{e} \in \mathbb{Z}_q^m$ yang &amp;ldquo;nilai elemennya cukup kecil&amp;rdquo;, yang dipilih berdasarkan distribusi normal atau distribusi binomial, dan menghitung $\vec{b}$ sebagai berikut:&lt;/p>
$$ \vec{b} = A\vec{s} + \vec{e} \pmod q $$
&lt;p>&lt;strong>Masalah Search LWE&lt;/strong> adalah masalah untuk &amp;ldquo;menemukan informasi rahasia $\vec{s}$ dari informasi publik $(A, \vec{b})$&amp;rdquo;. Karena adanya kesalahan $\vec{e}$ ini, apabila kita mencoba memecahkannya secara aljabar seperti eliminasi Gaussian, proses penambahan dan pengurangan persamaan akan melipatgandakan kesalahan $\vec{e}$ seperti bola salju, dan akhirnya menjadi berantakan karena nilai tidak dapat dibedakan dengan angka acak.&lt;/p>
&lt;p>Kehebatan dari Masalah LWE terletak pada bukti teoretis yang kuat (reduksi) bahwa, selama tidak ada algoritma kuantum yang dapat menyelesaikan masalah GapSVP (Masalah Keputusan Vektor Terpendek) atau SIVP (Masalah Vektor Independen Terpendek) yang merupakan masalah &amp;ldquo;kompleksitas waktu kasus terburuk (Worst-case hardness)&amp;rdquo; pada kisi, maka masalah LWE tidak akan dapat dipecahkan bahkan pada &amp;ldquo;kasus rata-rata (Average-case)&amp;rdquo;. Ini berarti, meskipun kunci enkripsi dihasilkan secara acak, tingkat keamanan yang kuat yang didukung oleh batas teoretis tetap terjamin.&lt;/p>
&lt;h3 id="42-ring-lwe-dan-module-lwe-untuk-peningkatan-efisiensi-yang-dramatis">4.2. Ring-LWE dan Module-LWE untuk Peningkatan Efisiensi yang Dramatis
&lt;/h3>&lt;p>Masalah LWE biasa (Standard LWE) memiliki dasar keamanan yang sangat jelas, namun ukuran matriks $A$ menjadi sangat besar, dan ukuran kuncinya bisa mencapai tingkat megabita sehingga tidak praktis. Oleh karena itu, pendekatan yang diusulkan adalah dengan memberikan struktur aljabar menggunakan Gelanggang Polinomial (Polynomial Rings).&lt;/p>
&lt;p>Pada &lt;strong>Masalah Ring-LWE&lt;/strong>, sebagai pengganti vektor atau matriks sederhana, digunakan elemen (polinomial) dari suatu gelanggang polinomial $R_q$. Umumnya, gelanggang polinomial siklotomik berikut digunakan dalam standar NIST:&lt;/p>
$$ R_q = \mathbb{Z}_q[X]/(X^n + 1) $$
&lt;p>Di sini, $n$ adalah pangkat dari 2 (misalnya, 256), dan $q$ adalah bilangan prima yang sesuai. Pada gelanggang ini, dengan menggunakan elemen $a, s, e \in R_q$, kita menghitung $b = a \cdot s + e \pmod q$. Karena satu polinomial $a$ memiliki $n$ buah koefisien, data dapat dikompresi secara signifikan. Selanjutnya, dengan menggunakan versi medan berhingga dari Transformasi Fourier Cepat (FFT) yang disebut &lt;strong>NTT (Number Theoretic Transform: Transformasi Teoretis Bilangan)&lt;/strong>, perkalian polinomial dapat dilakukan secara sangat cepat dengan kompleksitas komputasi $O(n \log n)$.&lt;/p>
&lt;p>Namun, terdapat kekhawatiran pada Ring-LWE bahwa &amp;ldquo;mungkin terdapat kerentanan tersembunyi akibat struktur aljabar gelanggang yang khusus&amp;rdquo;. Selain itu, ketika mengubah tingkat keamanan (seperti setara AES-128, 192, 256), derajat polinomial $n$ itu sendiri perlu diubah, yang menghadirkan tantangan rekayasa karena keseluruhan implementasi, seperti algoritma NTT, harus ditulis ulang.&lt;/p>
&lt;p>Oleh karena itu, algoritma standar Kyber dan Dilithium mengadopsi &lt;strong>Masalah Module-LWE (M-LWE)&lt;/strong>. Module-LWE merupakan kompromi di antara Standard LWE yang tidak terstruktur dan Ring-LWE yang terlalu terstruktur, dengan menggunakan matriks (modul) berukuran $k \times k$ yang elemennya berasal dari gelanggang polinomial $R_q$.&lt;/p>
$$ \vec{b} = A\vec{s} + \vec{e} \pmod{R_q} \quad (A \in R_q^{k \times k}, \vec{s}, \vec{e} \in R_q^k) $$
&lt;p>Keuntungan terbesar dari Module-LWE adalah kemudahannya dalam menskalakan tingkat keamanan hanya dengan mengubah dimensi matriks $k$, sambil tetap mempertahankan derajat polinomial $n$ secara konstan (dalam standar NIST, $n=256$).
Misalnya, pada kasus Kyber, dimensi $k$ disesuaikan sebagai berikut:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Kyber512 (Level 1)&lt;/strong>: $k = 2$ (Setara AES-128)&lt;/li>
&lt;li>&lt;strong>Kyber768 (Level 3)&lt;/strong>: $k = 3$ (Setara AES-192)&lt;/li>
&lt;li>&lt;strong>Kyber1024 (Level 5)&lt;/strong>: $k = 4$ (Setara AES-256)&lt;/li>
&lt;/ul>
&lt;p>Dengan demikian, kode dasar NTT dan sirkuit perangkat keras komputasi polinomial dapat digunakan kembali hingga 100% pada semua level keamanan, sehingga sangat meningkatkan keamanan dan efisiensi implementasi.&lt;/p>
&lt;hr>
&lt;h2 id="5-crystals-kyber-ml-kem-mekanisme-enkapsulasi-kunci-generasi-berikutnya">5. CRYSTALS-Kyber (ML-KEM): Mekanisme Enkapsulasi Kunci Generasi Berikutnya
&lt;/h2>&lt;p>CRYSTALS-Kyber, yang secara resmi distandarisasi sebagai &lt;strong>FIPS 203 (ML-KEM)&lt;/strong>, adalah mekanisme enkapsulasi kunci (KEM) yang didasarkan pada Masalah Module-LWE seperti yang dijelaskan di atas. Ini akan menjadi standar global de facto masa depan untuk membagikan kunci sesi secara aman dalam TLS 1.3, SSH, dan lain-lain.&lt;/p>
&lt;h3 id="51-arsitektur-kem-key-encapsulation-mechanism">5.1. Arsitektur KEM (Key Encapsulation Mechanism)
&lt;/h3>&lt;p>Di era PQC, alih-alih pendekatan langsung seperti RSA di mana &amp;ldquo;klien membuat kunci simetris dan mengenkripsinya dengan kunci publik server sebelum mengirim&amp;rdquo;, kerangka kerja enkapsulasi KEM akan menjadi standar.&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant Client as "Klien (Alice)"
participant Server as "Server (Bob)"
Note over Client: "ML-KEM KeyGen()"
Client->>Client: "Menghasilkan kunci privat (sk) dan kunci publik (pk)"
Client->>Server: "Mengirimkan kunci publik (pk)"
Note over Server: "ML-KEM Encaps()"
Server->>Server: "Menghasilkan kunci simetris acak (K)"
Server->>Server: "Mengenkapsulasi K dengan pk, dan membuat cipherteks (c)"
Server->>Client: "Mengirimkan cipherteks (c)"
Note over Client: "ML-KEM Decaps()"
Client->>Client: "Mendekripsi cipherteks (c) menggunakan kunci privat (sk)"
Client->>Client: "Membuka enkapsulasi dan mengambil kunci simetris (K)"
Note over Client, Server: "Memulai komunikasi terenkripsi (AES, dll.) menggunakan kunci simetris yang dibagikan (K)"&lt;/div>
&lt;h3 id="52-mekanisme-algoritma-internal-kyber-dan-transformasi-fujisaki-okamoto">5.2. Mekanisme Algoritma Internal Kyber dan Transformasi Fujisaki-Okamoto
&lt;/h3>&lt;p>Desain Kyber sangatlah elegan. Pertama, algoritma membangun skema kriptografi kunci publik yang hanya aman terhadap CPA (Serangan Teks Terang Dipilih) (Kyber.CPAPKE). Kemudian, skema ini ditingkatkan ke KEM yang sepenuhnya aman terhadap CCA (Serangan Cipherteks Dipilih Secara Adaptif) dengan menerapkan metode kriptografi yang sangat kuat yang disebut &lt;strong>Transformasi Fujisaki-Okamoto (Fujisaki-Okamoto Transform)&lt;/strong>.&lt;/p>
&lt;p>Inti dari mekanisme enkripsi dan dekripsi CPAPKE adalah sebagai berikut:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Pembuatan Kunci (Key Generation)&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Dari nilai seed acak, matriks $A \in R_q^{k \times k}$ pada domain NTT dihasilkan. Modulus $q$ yang digunakan adalah $3329$.&lt;/li>
&lt;li>Dari Distribusi Binomial Terpusat (CBD), vektor rahasia $\vec{s}$ dan vektor kesalahan $\vec{e}$ dengan koefisien kecil disampel.&lt;/li>
&lt;li>Menghitung $\vec{t} = A\vec{s} + \vec{e}$. Kunci publik adalah $(A, \vec{t})$, dan kunci privat adalah $\vec{s}$. (Dalam praktiknya, $A$ dipublikasikan sebagai nilai seed untuk menghemat bandwidth).&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Enkripsi (Encryption)&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Pesan 32 bita (materi untuk kunci simetris) $m$ yang ingin dibagikan, dienkode ke dalam bentuk polinomial.&lt;/li>
&lt;li>Menghasilkan vektor acak baru $\vec{r}$ dan kesalahan kecil $\vec{e_1}, e_2$.&lt;/li>
&lt;li>$\vec{u} = A^T\vec{r} + \vec{e_1}$&lt;/li>
&lt;li>$v = \vec{t}^T\vec{r} + e_2 + \lfloor q/2 \rceil \cdot m$&lt;/li>
&lt;li>Cipherteks (Teks sandi) adalah $(\vec{u}, v)$.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Dekripsi (Decryption)&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>Penerima menghitung $v - \vec{s}^T\vec{u}$.&lt;/li>
&lt;li>Jika kita mengekspansi persamaan ini:
$v - \vec{s}^T\vec{u} = (\vec{t}^T\vec{r} + e_2 + \lfloor q/2 \rceil \cdot m) - \vec{s}^T(A^T\vec{r} + \vec{e_1})$&lt;/li>
&lt;li>Substitusi $\vec{t} = A\vec{s} + \vec{e}$, maka suku utama $\vec{s}^TA^T\vec{r}$ akan saling meniadakan.&lt;/li>
&lt;li>Yang tersisa adalah $\lfloor q/2 \rceil \cdot m + (\vec{e}^T\vec{r} + e_2 - \vec{s}^T\vec{e_1})$.&lt;/li>
&lt;li>Suku dalam tanda kurung adalah &amp;ldquo;perkalian atau penjumlahan dari kesalahan-kesalahan kecil&amp;rdquo;, sehingga secara keseluruhan nilainya tetap cukup kecil (noise). Oleh karena itu, dengan memeriksa batas (threshold) untuk setiap koefisien apakah nilainya lebih dekat ke $0$ atau ke $q/2$, bit dari pesan asli $m$ (0 atau 1) dapat dipulihkan dengan sempurna tanpa kesalahan.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>Kekuatan terbesar Kyber terletak pada &lt;strong>kecepatan pemrosesan yang luar biasa&lt;/strong> dan &lt;strong>ukuran kuncinya yang wajar&lt;/strong>. Pada Kyber768, ukuran kunci publiknya adalah 1.184 bita, dan ukuran cipherteksnya 1.088 bita. Meski lebih besar bila dibandingkan dengan RSA-3072 (ukuran kunci sekitar 384 bita), ukurannya masih muat ke dalam MTU (Maximum Transmission Unit) jaringan internet modern tanpa perlunya memecah paket data, sehingga hampir tidak memengaruhi latensi jaringan.&lt;/p>
&lt;hr>
&lt;h2 id="6-crystals-dilithium-ml-dsa-tanda-tangan-digital-serbaguna-berbasis-kisi">6. CRYSTALS-Dilithium (ML-DSA): Tanda Tangan Digital Serbaguna Berbasis Kisi
&lt;/h2>&lt;p>Dalam proses standarisasi tanda tangan digital, berbagai algoritma dengan filosofi desain berbeda dalam pendekatan kriptografi kisi saling bersaing. &lt;strong>CRYSTALS-Dilithium&lt;/strong> terpilih sebagai &lt;strong>FIPS 204 (ML-DSA)&lt;/strong> untuk tanda tangan digital serbaguna.&lt;/p>
&lt;h3 id="61-paradigma-fiat-shamir-dengan-aborts">6.1. Paradigma Fiat-Shamir dengan Aborts
&lt;/h3>&lt;p>Seperti Kyber, Dilithium adalah skema tanda tangan digital berdasarkan Masalah Module-LWE (dan Masalah Module-SIS). Desain dasarnya menggunakan paradigma sangat penting yang disebut &amp;ldquo;&lt;strong>Fiat-Shamir with Aborts (Transformasi Fiat-Shamir dengan Pembatalan)&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;p>Transformasi Fiat-Shamir sendiri merupakan metode standar untuk mengubah protokol pembuktian tanpa-pengetahuan interaktif menjadi tanda tangan digital non-interaktif. Pembukti (penanda tangan) menghasilkan komitmen $y$, menghitung $w = Ay$, dan melewatkannya melalui fungsi hash untuk mendapatkan tantangan acak $c$, lalu menghitung tanggapan $z = y + cs$.&lt;/p>
&lt;p>Namun, jika diterapkan secara langsung pada kriptografi kisi, distribusi dari tanggapan $z$ akan terdistorsi tergantung pada nilai kunci privat $s$. Penyerang yang mengamati sejumlah besar tanda tangan akan mendapatkan kebocoran informasi tentang kunci privat $s$ secara bertahap. Ini merupakan masalah yang fatal (kebocoran matematis serupa saluran samping).&lt;/p>
&lt;p>Tim desain Dilithium (Lyubashevsky dkk.) memperkenalkan teknik yang disebut &amp;ldquo;&lt;strong>Penolakan Pengambilan Sampel (Rejection Sampling)&lt;/strong>&amp;rdquo;, di mana jika koefisien hasil tanda tangan $z$ tidak berada dalam ambang batas aman yang ditetapkan sebelumnya, seluruh proses tanda tangan akan dibatalkan (Abort) dan perhitungan diulang kembali dari awal menggunakan bilangan acak $y$ yang baru.&lt;/p>
&lt;p>Dengan cara ini, tanda tangan $z$ yang dihasilkan akhirnya menjadi distribusi seragam yang sempurna dan sama sekali tidak bergantung pada kunci privat, sehingga kebocoran informasi berhasil dicegah sepenuhnya secara matematis.&lt;/p>
&lt;h3 id="62-keuntungan-dilithium-dan-kemudahan-implementasinya">6.2. Keuntungan Dilithium dan Kemudahan Implementasinya
&lt;/h3>&lt;p>Keuntungan besar dalam desain Dilithium adalah bahwa algoritma ini &lt;strong>sama sekali tidak menggunakan&lt;/strong> &amp;ldquo;pengambilan sampel dari distribusi Gaussian&amp;rdquo; yang kompleks atau &amp;ldquo;operasi titik mengambang (floating-point)&amp;rdquo; dalam proses pembuatan tanda tangan. Algoritma ini hanya memerlukan pengambilan sampel dari distribusi seragam, operasi modulo bilangan bulat sederhana, NTT, dan fungsi hash (SHAKE). Karenanya, Dilithium mudah diimplementasikan secara aman dan dalam waktu konstan (Constant-time) di berbagai lingkungan, dari mikrokontroler tersemat (embedded) hingga server awan. Hal ini memberikannya daya tahan yang kuat terhadap serangan saluran samping fisik (physical side-channel attacks) seperti serangan pewaktuan.&lt;/p>
&lt;hr>
&lt;h2 id="7-falcon-fn-dsa-tanda-tangan-kisi-paling-ringkas">7. FALCON (FN-DSA): Tanda Tangan Kisi Paling Ringkas
&lt;/h2>&lt;p>NIST telah memilih &lt;strong>FALCON (Fast-Fourier Lattice-based Compact Signatures over NTRU)&lt;/strong> sebagai kandidat standarisasi lain untuk tanda tangan berbasis kisi, dengan karakteristik yang berbeda dari Dilithium (saat ini sedang dalam tahap penyusunan draf sebagai FN-DSA).&lt;/p>
&lt;h3 id="71-kisi-ntru-dan-pengambilan-sampel-gaussian">7.1. Kisi NTRU dan Pengambilan Sampel Gaussian
&lt;/h3>&lt;p>Fitur terbesar FALCON adalah bahwa alih-alih menggunakan Masalah LWE, algoritma ini menggunakan &lt;strong>kisi NTRU (N-th degree Truncated polynomial Ring Units)&lt;/strong>, yang memiliki sejarah panjang sejak tahun 1996. Selain itu, FALCON mengadopsi paradigma &amp;ldquo;&lt;strong>Hash-and-Sign (Hash-dan-Tanda-tangani)&lt;/strong>&amp;rdquo; berdasarkan kerangka kerja GPV (Gentry-Peikert-Vaikuntanathan).&lt;/p>
&lt;p>Dalam Hash-and-Sign, nilai hash dari pesan dijadikan sebagai titik target di dalam suatu ruang, dan tanda tangannya adalah titik pada kisi yang paling dekat dengan titik target tersebut (solusi perkiraan untuk Masalah Vektor Terdekat). Hal ini memerlukan pengambilan sampel titik-titik berdasarkan distribusi Gaussian diskrit menggunakan kunci privat berupa &amp;ldquo;basis pendek yang baik&amp;rdquo;.&lt;/p>
&lt;p>FALCON secara drastis mempercepat komputasi yang berat ini dengan menggunakan metode yang disebut &amp;ldquo;&lt;strong>Ortogonalisasi Fourier Cepat (Fast Fourier Orthogonalization: FFO)&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;h3 id="72-kelebihan-dan-kekurangan-falcon">7.2. Kelebihan dan Kekurangan FALCON
&lt;/h3>&lt;p>Keuntungan FALCON yang sangat besar adalah &lt;strong>ukuran tanda tangan dan ukuran kunci publiknya yang sangat kecil (ringkas)&lt;/strong>. Ukuran tanda tangan Dilithium3 adalah sekitar 3.309 bita, sedangkan ukuran tanda tangan FALCON-512 hanya sekitar 666 bita. Kunci publiknya juga sangat kecil, hanya 897 bita, menjadikannya sebagai penyelamat untuk lingkungan di mana bandwidth komunikasi sangat terbatas, perangkat IoT, dan protokol jaringan tertentu.&lt;/p>
&lt;p>Namun, FALCON memiliki kelemahan yang serius. Pembuatan tanda tangannya mutlak membutuhkan pengambilan sampel Gaussian diskrit yang melibatkan &lt;strong>operasi titik mengambang (64-bit IEEE 754)&lt;/strong> yang kompleks. Hal ini membuat implementasi waktu konstan (Constant-time implementation) yang diperlukan untuk mencegah kebocoran informasi melalui waktu eksekusi (timing leakage) menjadi sangat sulit, dan kodenya menjadi sangat besar. Akibatnya, alih-alih menjadi algoritma serbaguna (seperti Dilithium), FALCON diposisikan sebagai algoritma yang dikhususkan dan kuat untuk tujuan-tujuan tertentu.&lt;/p>
&lt;div class="mermaid">graph LR
A["Persyaratan Tanda Tangan Digital"] --> B{"Apa batasan prioritas utama?"}
B -->|"Kesederhanaan implementasi, keserbagunaan, kemudahan implementasi waktu konstan"| C["Dilithium (ML-DSA)"]
B -->|"Minimasi bandwidth komunikasi, keringkasan ukuran data"| D["FALCON (FN-DSA)"]
C --> E["Sertifikat TLS serbaguna, tanda tangan elektronik perangkat lunak"]
D --> F["Protokol dengan batasan ukuran paket yang ketat, lingkungan khusus"]&lt;/div>
&lt;hr>
&lt;h2 id="8-sphincs-slh-dsa-tanda-tangan-berbasis-hash-dengan-keamanan-terkuat">8. SPHINCS+ (SLH-DSA): Tanda Tangan Berbasis Hash dengan Keamanan Terkuat
&lt;/h2>&lt;p>Sebagai persiapan untuk skenario terburuk di masa depan di mana keamanan kriptografi kisi dapat ditembus oleh terobosan dari matematikawan jenius, NIST merumuskan &lt;strong>FIPS 205 (SLH-DSA)&lt;/strong>, yaitu &lt;strong>SPHINCS+&lt;/strong>, sebagai standar kriptografi dengan pendekatan yang sama sekali berbeda dari kriptografi kisi.&lt;/p>
&lt;p>SPHINCS+ diklasifikasikan sebagai &lt;strong>tanda tangan berbasis hash&lt;/strong>. Keamanannya semata-mata bergantung pada satu hal: &amp;ldquo;fungsi hash kriptografis yang digunakan (seperti SHA-2 atau SHAKE256) memiliki ketahanan bentrokan (collision resistance) dan sifat satu arah&amp;rdquo;. Karena SPHINCS+ tidak bergantung pada masalah matematis dengan struktur aljabar tertentu seperti LWE atau pemfaktoran prima, SPHINCS+ memiliki tingkat keamanan yang luar biasa kuat (keamanan paling konservatif). Tidak peduli seberapa kuat algoritma kuantum yang muncul di masa depan, pertahanan dapat dilakukan cukup dengan memperpanjang ukuran keluaran dari fungsi hash.&lt;/p>
&lt;h3 id="81-arsitektur-tanpa-status-stateless-melalui-wots-dan-fors">8.1. Arsitektur Tanpa Status (Stateless) melalui WOTS+ dan FORS
&lt;/h3>&lt;p>Sejarah tanda tangan berbasis hash cukup panjang, kembali ke Tanda Tangan Lamport dan Tanda Tangan Sekali Pakai Winternitz (WOTS) pada tahun 1970-an. Semua ini adalah kunci sekali pakai yang &amp;ldquo;hanya bisa ditandatangani secara aman satu kali&amp;rdquo;. Agar kunci ini dapat digunakan berkali-kali, algoritma seperti XMSS (eXtended Merkle Signature Scheme) dan LMS dikembangkan dengan menggabungkan Pohon Merkle (Merkle Tree) guna mengelola jumlah kunci sekali pakai yang tidak terbatas dengan satu hash akar (root hash).&lt;/p>
&lt;p>Namun, XMSS dan LMS memiliki kelemahan yang fatal, yaitu bersifat &amp;ldquo;&lt;strong>Stateful (Mempertahankan Status)&lt;/strong>&amp;rdquo;. Setiap kali tanda tangan dibuat, status indeks mengenai &amp;ldquo;kunci sekali pakai ke berapa yang digunakan&amp;rdquo; harus direkam secara ketat ke dalam memori non-volatil. Jika status ini dikembalikan (rollback), misalnya melalui pemulihan snapshot mesin virtual, dan kunci sekali pakai yang sama digunakan dua kali, kunci privat akan segera bocor dan sistem akan runtuh.&lt;/p>
&lt;p>SPHINCS+ adalah tanda tangan berbasis hash yang &amp;ldquo;&lt;strong>Stateless (Tanpa Status)&lt;/strong>&amp;rdquo;, yang memecahkan kerumitan dalam manajemen status ini.
Teknologi intinya merupakan gabungan dari:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>WOTS+ (Winternitz One-Time Signature Plus)&lt;/strong>: Tanda tangan sekali pakai dasar.&lt;/li>
&lt;li>&lt;strong>FORS (Forest of Random Subsets)&lt;/strong>: Teknologi Tanda Tangan Beberapa Kali (Few-Time Signature). Kunci yang sama masih tetap aman digunakan kembali beberapa kali.&lt;/li>
&lt;li>&lt;strong>Hyper-Tree (Struktur pohon raksasa)&lt;/strong>: Struktur masif yang merupakan pelapisan berbagai Pohon Merkle secara bertumpuk.&lt;/li>
&lt;/ol>
&lt;p>Dalam SPHINCS+, pada saat menandatangani, alih-alih mengelola status, sistem secara acak memilih satu dari sejumlah besar kunci FORS yang terletak di bagian bawah Hyper-Tree dengan menggunakan angka pseudo-acak. Karena jumlah daun pada pohon ini sangatlah banyak, kemungkinan secara kebetulan memilih kunci yang sama dua kali (benturan) menjadi sangat kecil sehingga bisa diabaikan. Sebagai hasilnya, sifat tanpa status (stateless) berhasil diwujudkan.&lt;/p>
&lt;p>Satu-satunya sekaligus kelemahan terbesar dari SPHINCS+ adalah bahwa &lt;strong>ukuran tanda tangannya sangat besar&lt;/strong>. Bergantung pada parameternya, ukuran tanda tangannya dapat mencapai 17 hingga 49 kilobita, dan kecepatan pembentukan tanda tangannya pun jauh lebih lambat dibandingkan kriptografi kisi. Oleh karena itu, ketimbang digunakan untuk penjelajahan web harian, SPHINCS+ lebih ditujukan untuk aplikasi yang tidak membutuhkan proses tanda tangan berfrekuensi tinggi, tetapi sangat menuntut keamanan absolut untuk jangka waktu yang panjang, seperti tanda tangan untuk pembaruan perangkat lunak atau sertifikat pada Otoritas Sertifikat Akar (Root CA).&lt;/p>
&lt;hr>
&lt;h2 id="9-kriptografi-berbasis-kode-raksasa-tua-yang-hebat-classic-mceliece">9. Kriptografi Berbasis Kode: Raksasa Tua yang Hebat, Classic McEliece
&lt;/h2>&lt;p>Dalam proses standarisasi NIST, salah satu pendekatan penting yang saat ini masih terus dievaluasi sebagai kandidat akhir Putaran 4 adalah &lt;strong>Classic McEliece&lt;/strong>, yaitu algoritma &lt;strong>Kriptografi Berbasis Kode&lt;/strong>.&lt;/p>
&lt;p>Algoritma yang diusulkan oleh Robert McEliece pada tahun 1978 ini merupakan salah satu algoritma paling tua dalam sejarah kriptografi kunci publik, sejajar dengan RSA. Algoritma ini menggunakan kode geometri aljabar yang disebut &amp;ldquo;Kode Goppa&amp;rdquo;, di mana pesan dienkripsi dengan sengaja menambahkan kesalahan (vektor noise). Dasar keamanannya bersandar pada &amp;ldquo;&lt;strong>Masalah Dekode Sindrom (Syndrome Decoding Problem)&lt;/strong>&amp;rdquo;, yang menetapkan bahwa hanya pemilik matriks uji paritas Kode Goppa sebagai kunci privatlah yang mampu menggunakan kekuatan koreksi kesalahan untuk menghapus noise tersebut dan memulihkan teks aslinya.&lt;/p>
$$ \vec{c} = \vec{m} G + \vec{e} $$
&lt;p>
(Di mana $G$ adalah kunci publik berupa matriks generator yang diacak, dan $\vec{e}$ adalah vektor kesalahan dengan bobot $t$)&lt;/p>
&lt;p>Hal yang menakjubkan dari Classic McEliece adalah bahwa &lt;strong>meskipun telah berumur lebih dari 40 tahun sejak pertama kali diusulkan dan telah dipelajari secara intensif oleh kriptografer di seluruh dunia untuk diretas, belum ada satu pun kerentanan mendasar yang pernah ditemukan pada algoritma ini&lt;/strong>. Di antara semua PQC, algoritma ini memiliki &amp;ldquo;keamanan terkuat yang telah teruji oleh waktu&amp;rdquo;.&lt;/p>
&lt;p>Selain itu, algoritma ini memiliki keunggulan berupa ukuran cipherteks (teks sandi) yang sangat kecil (hanya sekitar 100-200 bita). Namun, terdapat kelemahan yang sangat fatal: &lt;strong>ukuran kunci publiknya mencapai satuan megabita (MB)&lt;/strong>. Bahkan pada tingkat keamanan terendah (setara AES-128), kunci publiknya berukuran sekitar 250 KB, dan melebihi 1 MB untuk tingkat keamanan yang lebih tinggi.&lt;/p>
&lt;p>Oleh karena itu, algoritma ini sama sekali tidak cocok untuk aplikasi seperti jabat tangan TLS di mana kunci publik harus selalu dikirim melalui jaringan pada tiap awal komunikasi. Namun, untuk kasus penggunaan khusus di mana kunci publik dapat ditempatkan sebelumnya ke dalam sistem secara statis, seperti pada pertukaran kunci pra-berbagi VPN, hardcoding kunci publik ke dalam firmware, atau pada komunikasi satelit, rekam jejak keamanannya yang kokoh menjadikan algoritma ini sebagai pilihan yang sangat menjanjikan untuk dipertimbangkan.&lt;/p>
&lt;hr>
&lt;h2 id="10-perbandingan-kinerja-dan-tarik-ulur-trade-off-setiap-algoritma-pqc">10. Perbandingan Kinerja dan Tarik-Ulur (Trade-off) Setiap Algoritma PQC
&lt;/h2>&lt;p>Mengenai algoritma-algoritma utama yang telah dibahas sejauh ini, karakteristik kinerjanya pada tingkat keamanan yang umum (Setara Level 2-3 NIST, atau tingkat AES-128-192) dirangkum dalam tabel di bawah ini.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Algoritma (Nama Standar)&lt;/th>
&lt;th style="text-align:left">Kategori&lt;/th>
&lt;th style="text-align:left">Dasar Matematis&lt;/th>
&lt;th style="text-align:left">Ukuran Kunci Publik&lt;/th>
&lt;th style="text-align:left">Ukuran Kunci Privat&lt;/th>
&lt;th style="text-align:left">Ukuran Cipherteks/Tanda Tangan&lt;/th>
&lt;th style="text-align:left">Tren Kecepatan Pemrosesan&lt;/th>
&lt;th style="text-align:left">Karakteristik Utama dan Penggunaan&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Kyber768&lt;/strong>&lt;br>(ML-KEM)&lt;/td>
&lt;td style="text-align:left">KEM&lt;/td>
&lt;td style="text-align:left">Module-LWE&lt;/td>
&lt;td style="text-align:left">1.184 Bita&lt;/td>
&lt;td style="text-align:left">2.400 Bita&lt;/td>
&lt;td style="text-align:left">1.088 Bita&lt;/td>
&lt;td style="text-align:left">Sangat cepat&lt;/td>
&lt;td style="text-align:left">Keseimbangan terbaik antara ukuran kunci &amp;amp; kecepatan. Standar KEM serbaguna seperti untuk TLS 1.3.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Dilithium3&lt;/strong>&lt;br>(ML-DSA)&lt;/td>
&lt;td style="text-align:left">Tanda Tangan&lt;/td>
&lt;td style="text-align:left">Module-LWE&lt;/td>
&lt;td style="text-align:left">1.952 Bita&lt;/td>
&lt;td style="text-align:left">4.032 Bita&lt;/td>
&lt;td style="text-align:left">3.309 Bita&lt;/td>
&lt;td style="text-align:left">Pembuatan &amp;amp; verifikasi sangat cepat&lt;/td>
&lt;td style="text-align:left">Implementasi sederhana. Standar tanda tangan digital serbaguna.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>FALCON-512&lt;/strong>&lt;br>(FN-DSA)&lt;/td>
&lt;td style="text-align:left">Tanda Tangan&lt;/td>
&lt;td style="text-align:left">Kisi NTRU&lt;/td>
&lt;td style="text-align:left">897 Bita&lt;/td>
&lt;td style="text-align:left">1.281 Bita&lt;/td>
&lt;td style="text-align:left">666 Bita&lt;/td>
&lt;td style="text-align:left">Pembuatan tanda tangan agak lambat, verifikasi super cepat&lt;/td>
&lt;td style="text-align:left">Ukuran tanda tangan sangat kecil. Tetapi memerlukan operasi titik mengambang. Untuk IoT/perangkat tersemat.&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>SPHINCS+&lt;/strong>&lt;br>(SLH-DSA)&lt;/td>
&lt;td style="text-align:left">Tanda Tangan&lt;/td>
&lt;td style="text-align:left">Fungsi Hash&lt;/td>
&lt;td style="text-align:left">32 Bita&lt;/td>
&lt;td style="text-align:left">64 Bita&lt;/td>
&lt;td style="text-align:left">Sekitar 17.000 Bita&lt;/td>
&lt;td style="text-align:left">Pembuatan tanda tangan sangat lambat&lt;/td>
&lt;td style="text-align:left">Risiko kegagalan secara matematis hampir nol. Untuk penggunaan berkeamanan tinggi seperti sertifikat akar (root).&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Classic McEliece&lt;/strong>&lt;/td>
&lt;td style="text-align:left">KEM&lt;/td>
&lt;td style="text-align:left">Kode Goppa&lt;/td>
&lt;td style="text-align:left">&lt;strong>Sekitar 1,04 MB&lt;/strong>&lt;/td>
&lt;td style="text-align:left">13.568 Bita&lt;/td>
&lt;td style="text-align:left">&lt;strong>188 Bita&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Enkapsulasi sangat cepat&lt;/td>
&lt;td style="text-align:left">Rekam jejak keamanan selama 40 tahun. Kunci publik raksasa. Untuk lingkungan yang dapat di-hardcode.&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h3 id="memahami-tarik-ulur-trade-off">Memahami Tarik-Ulur (Trade-off)
&lt;/h3>&lt;p>Dalam dunia PQC, tidak ada satu algoritma ajaib yang menawarkan &amp;ldquo;ukuran kecil, kecepatan tinggi, dan jaminan matematis sempurna&amp;rdquo; secara sekaligus.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Standar Internet (Kyber / Dilithium)&lt;/strong>: Memiliki keseimbangan kinerja terbaik, dan sangat ideal sebagai pengganti langsung (drop-in replacement) untuk sistem RSA/ECC saat ini.&lt;/li>
&lt;li>&lt;strong>Konservatisme Ekstrem (SPHINCS+)&lt;/strong>: Menjadi pilihan ketika menginginkan jaminan mutlak terhadap penemuan terobosan matematis di masa depan, meskipun harus mengorbankan ukuran data dan kecepatan pemrosesan.&lt;/li>
&lt;li>&lt;strong>Untuk Lingkungan Khusus (FALCON / Classic McEliece)&lt;/strong>: Senjata spesialis yang dipilih untuk menyesuaikan kendala lingkungan, misalnya ketika bandwidth komunikasi sangat sempit atau ketika distribusi kunci publik di awal dimungkinkan.&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="11-tantangan-menuju-penggunaan-praktis-dan-solusi-realistis-kriptografi-hibrida">11. Tantangan Menuju Penggunaan Praktis dan Solusi Realistis: &amp;ldquo;Kriptografi Hibrida&amp;rdquo;
&lt;/h2>&lt;p>Dengan selesainya proses standarisasi oleh NIST dan penerbitan standar FIPS secara resmi, migrasi infrastruktur IT secara global menuju PQC (&lt;strong>Migrasi PQC&lt;/strong>) telah benar-benar dimulai. Peramban Chrome dari Google, iMessage dari Apple (Protokol PQ3), serta penyedia jaringan seperti Cloudflare, telah mulai mengimplementasikan dukungan PQC dalam protokol mereka dan mengoperasikannya dalam lingkungan nyata.&lt;/p>
&lt;p>Namun, mengalihkan seluruh sistem sepenuhnya secara mendadak ke algoritma kriptografi yang baru memiliki risiko yang sangat tinggi. Misalnya, jika seorang matematikawan jenius dalam beberapa tahun ke depan menemukan teknik serangan fatal terhadap kriptografi kisi seperti Kyber (suatu cacat matematis yang bahkan dapat diselesaikan oleh komputer klasik), maka sistem mana pun yang bergantung padanya akan segera terekspos tanpa perlindungan sedikit pun.&lt;/p>
&lt;p>Pendekatan yang realistis dan direkomendasikan untuk memitigasi risiko ketidakpastian ini adalah menggunakan &amp;ldquo;&lt;strong>Kriptografi Hibrida (Hybrid Cryptography)&lt;/strong>&amp;rdquo;.&lt;/p>
&lt;p>Dalam Kriptografi Hibrida, kriptografi klasik saat ini yang memiliki rekam jejak panjang (seperti Kriptografi Kurva Eliptik X25519) dan PQC baru (seperti Kyber768) digunakan secara bersamaan untuk melakukan pertukaran kunci. Masing-masing algoritma digunakan untuk menghasilkan komponen kunci simetris secara mandiri. Kemudian, pada tahap akhir, komponen-komponen ini dicampur menggunakan Fungsi Derivasi Kunci (KDF: Key Derivation Function) yang aman guna menghasilkan rahasia utama (master secret) yang final.&lt;/p>
&lt;div class="mermaid">graph TD
A["Klien"] -->|① Mengirim Kunci Publik X25519 + Kunci Publik Kyber| B["Server"]
B -->|② Membalas Kunci Bersama X25519 + Cipherteks Enkapsulasi Kyber| A
A --> C{"Derivasi Rahasia Utama (KDF)"}
B --> C
C -->|Input: (Kunci Simetris X25519) || (Kunci Simetris Kyber)| D["Kunci Komunikasi Aman (AES-256 / ChaCha20)"]
D -->|"Tahan Terhadap Ancaman Kuantum &amp; Kerentanan Klasik Sekaligus"| E["Komunikasi Kriptografi Hibrida yang Aman (TLS 1.3)"]&lt;/div>
&lt;p>Dengan metode ini, dicapai keamanan dua lapis yang kokoh: &amp;ldquo;bahkan jika komputer kuantum terwujud dan mematahkan ECC, Kyber akan melindungi komunikasi&amp;rdquo;, dan sebaliknya, &amp;ldquo;bahkan jika cacat matematis yang tidak diketahui ditemukan pada Kyber, ECC akan melindungi komunikasi&amp;rdquo;. Contoh representatifnya adalah draf &lt;strong>X25519MLKEM768 (sebelumnya X25519Kyber768)&lt;/strong>, yang saat ini sedang distandarisasi di IETF. Komunikasi antara peramban web saat ini dan server-server mutakhir benar-benar menggunakan metode hibrida ini.&lt;/p>
&lt;p>Selain itu, konsep &lt;strong>Crypto Agility (Kelincahan Kriptografi)&lt;/strong>, yakni &amp;ldquo;membangun arsitektur yang tidak bergantung secara berlebihan pada satu algoritma kriptografi tertentu, dan mampu beralih dengan cepat ke algoritma lain (misalnya dari Kyber ke McEliece, atau dari Dilithium ke SPHINCS+) apabila algoritma tersebut terkompromi&amp;rdquo;, akan menjadi persyaratan mutlak dalam pengembangan sistem di masa mendatang.&lt;/p>
&lt;hr>
&lt;h2 id="12-kesimpulan-cakrawala-baru-teknologi-kriptografi">12. Kesimpulan: Cakrawala Baru Teknologi Kriptografi
&lt;/h2>&lt;p>Ironisnya, teknologi komputer kuantum yang menjadi impian umat manusia kini merupakan ancaman terbesar yang mampu menghancurkan dinding pertahanan matematis seperti &amp;ldquo;Pemfaktoran Prima&amp;rdquo; dan &amp;ldquo;Masalah Logaritma Diskrit&amp;rdquo;, yang selama ini telah kita percayai. Meskipun demikian, alih-alih menyerah, para ahli kriptografi di seluruh dunia justru merintis bidang matematis multi-dimensi yang jauh lebih kompleks dan mendalam, seperti teori kisi, pohon fungsi hash, dan kode koreksi kesalahan, untuk mendirikan dinding pertahanan baru yang disebut Kriptografi Pasca-Kuantum (PQC).&lt;/p>
&lt;p>Penyelesaian standarisasi FIPS 203 (ML-KEM), FIPS 204 (ML-DSA), dan FIPS 205 (SLH-DSA) oleh NIST bukanlah garis akhir. Ini hanyalah langkah pertama dalam perjalanan agung yang disebut Migrasi PQC, yang akan berlanjut selama beberapa dekade ke depan. Bagi teknisi perangkat lunak (software engineers) dan arsitek sistem, mengadaptasi secara optimal dampak perubahan dari algoritma-algoritma baru ini, seperti &amp;ldquo;membesarnya ukuran kunci&amp;rdquo; dan &amp;ldquo;perubahan biaya komputasi&amp;rdquo;, pada protokol jaringan dan sistem akan menjadi tantangan teknis yang besar di masa depan.&lt;/p>
&lt;p>Pertarungan antara komputer kuantum dan kriptografi merupakan area yang paling menarik, di mana eksplorasi matematis umat manusia dan evolusi teknologi saling beririsan dengan sangat tajam. Kami berharap melalui artikel ini, Anda dapat memahami secara mendalam teori matematis yang indah di balik PQC, serta mekanisme luar biasa dari masing-masing algoritma yang membentuk masa depan keamanan siber.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Referensi:&lt;/em>&lt;/p>
&lt;ul>
&lt;li>&lt;em>NIST Post-Quantum Cryptography Standardization Program&lt;/em>&lt;/li>
&lt;li>&lt;em>FIPS 203: Module-Lattice-Based Key-Encapsulation Mechanism Standard&lt;/em>&lt;/li>
&lt;li>&lt;em>FIPS 204: Module-Lattice-Based Digital Signature Standard&lt;/em>&lt;/li>
&lt;li>&lt;em>FIPS 205: Stateless Hash-Based Digital Signature Standard&lt;/em>&lt;/li>
&lt;/ul></description></item></channel></rss>