Kriptografi Dan Python PDF
Kriptografi Dan Python PDF
Kriptografi Dan Python PDF
P Y T H O N
*Sebuah nilai dan inspirasi untuk Indonesia, Tanah Airku
Dilengkapi dengan topik dan projek pembahasan
Dibagikan dan dibaca untuk gratis dengan tetap menyertakan sumber/nama penulis
1.Jika Anda membaca hal ini berarti anda sudah mengunduh ebook
Kriptografi Python yang ditulis oleh Matius Celcius Sinaga,
tetaplah menyertakan narasumber, sumber dan nama penulis jika
anda ingin melakukan penulisan ulang/repost/reshare sebagai
bentuk menghargai karya orang lain.
2.Anda berhak untuk berbagi dalam bentuk salinan, baik wujud fisik
maupun media elektronik lainnya dimana ebook adalah sebagai
wujud asli/bentuk pertama dalam publikasi dengan tetap
mencantumkan nama penulis baik berupa potongan
kalimat/referensi atau source code/sumber kode namun tidak
untuk komersial atau bahkan sebagai bentuk meraih keuntungan
pribadi/golongan.
Page 2 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Coba fikirkan hal apa yang tidak dapat diretas hari ini ?
Apakah demikian juga halnya dahulu ? apakah esok dan masa
depan kita masih akan terus mengalami semua kekacauan ini ?
Coba jawab dalam diri anda berapa banyak informasi yang
anda ijinkan untuk diketahui dan tidak oleh oranglain, ada
beberapa cara agar tetap bisa menjaga rahasia yang kita miliki
dalam era teknologi serba canggih ini. Tidak ada yang benar-
benar aman di dunia maya, sudah marak terjadi aksi
pembobolan bank melalui saluran internet, peretasan akun
internet juga hal-hal yang bersifat pribadi dengan mudah
dicuri dan disebarkan oleh pihak-pihak yang tidak
bertanggung jawab secara sengaja dan tidak. Lalu apakah kita
akan membiarkan hal ini terus terjadi ? Tetaplah berhati-hati,
pada buku ini akan dibahas hal mengenai sandi namun penuh
dengan kata-kata/kalimat yang mudah dimengerti, bagaimana
anda dapat membuat sandi anda sendiri, merusak dan bahkan
meretasnya. Dan untuk yang lebih menarik akan dibahas
mengenai apa dan bagaimana sandi RSA melakukan
enkripsinya.
Page 3 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Page 4 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Ini adalah buku kedua dari buku yang saya tuliskan tahun ini
(September, 2017) dan menjadi buku kedua yang saya tulis. Ini
adalah mimpi saya untuk tetap dapat berbagi kepada orang lain
menjadi orang yang berguna setidaknya bagi bangsa dan negara.
Setidaknya saya menghabiskan waktu kurang lebih 3 bulan untuk
benar-benar yakin bahwa apa yang saya tulis adalah hal yang
berguna nantinya bagi orang lain. Buku kedua ini adalah buku
perjanjian bagi saya, perjanjian dimana yang dimaksudkan adalah
janji pada diri untuk mengajarkan sesuatu pada orang lain. Saya
belajar mengenai pemograman dan hal lainnya dimulai pada usia
15 tahun dengan membaca artikel di Internet atau dahulu disebut
dengan WARNET (Warung Internet) hingga akhirnya dapat belajar
otodidak mempelajari bahasa pemograman dan pengkodean. Ada
banyak kisah tentang pemograman yang saya miliki dan bahkan itu
terlalu panjang untuk diungkapkan dalam tulisan ini namun kelak
saya berharap dapat berbagi. Buku Perjanjian ini juga adalah janji
saya untuk 21 tahun lebih menjalani kehidupan yang indah dari
Tuhan Allah Yang Maha Esa dan esok adalah hari baru bagi saya
menjalani usia 22 Tahun. Saya sangat berharap dengan buku ini
seseorang terbantu dan menjadi kado ulang tahun yang lebih dari
cukup dikenang nantinya.
Page 5 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Page 6 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
... Seseorang boleh pandai dan terkenal, namun jika ia tidak menulis
Ia akan tenggelam dalam masyarakat dan sejarah.
Page 7 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Page 8 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
DAFTAR ISI
Cover ...............................................................1
Perhatian dan Peringatan .............................................2
Tentang Buku Ini .....................................................5
Daftar Isi ..........................................................9
Bagian 1
Kriptografi
Terminologi .........................................................13
Sejarah kriptografi dan kriptanalisis ................................14
Kriptografi klasik ................................................... 15
Era komputer ......................................................... 19
Kriptografi Moderen ..................................................21
Kriptografi kunci-simetris ........................................... 21
Kriptografi kunci-publik ............................................. 23
Kriptanalisis ........................................................ 27
Kriptogfari sederhana ................................................ 30
Kriptosistem ......................................................... 31
Larangan ............................................................. 32
Pembatasan ekspor .................................................... 33
Keterlibatan NSA ..................................................... 35
Manajemen hak digital ................................................ 36
Pembukaan paksa kunci enkripsi ....................................... 37
Bagian 2
Python
Sejarah .............................................................40
Fitur ...............................................................41
Masukan / Keluaran ................................................... 41
Halo Dunia ........................................................... 42
Kerangka Kerja (Framework) ........................................... 42
Bagian 3
Lembaga Sandi Negara
Bagian 4
Projek Kriptografi Dan Python
Membalikkan Sandi .................................................... 47
Sandi Caesar ......................................................... 49
Meretas Sandi Caesar Dengan Brute-Force .............................. 51
Melakukan Enkripsi Dengan Sandi Transposisi .......................... 54
Dekripsi Dengan Sandi Transposisi .................................... 57
Memprogram Sebuah Program Untuk Melakukan Test Pada Program Anda ..... 60
Mengenkripsi Dan Mendekripsi File .................................... 63
Page 9 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Page 10 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Bagian 1
KRIPTOGRAFI
Terminologi, Sejarah kriptografi dan kriptanalisis, Kriptografi Moderen
keahlian dan ilmu dari cara-cara untuk komunikasi aman pada kehadirannya di
terjadi karena terdapat titik temu antara disiplin ilmu matematika, ilmu komputer,
dan teknik elektro. Aplikasi dari kriptografi termasuk ATM, password komputer,
dan E-commerce.
konversi dari kalimat-kalimat yang dapat dibaca menjadi kelihatan tidak masuk
akal. Pembuat dari pesan enkripsi membagi teknik pemecahan sandi yang
Page 11 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
melakukan hal yang sama. Sejak Perang Dunia I dan kedatangan komputer,
Kriptografi modern sangat didasari pada teori matematis dan aplikasi komputer;
algoritma ini sangat sulit dipecahkan oleh musuh. Secara teoretis, sangat sulit
cara praktis. Oleh karena itu skema ini disebut sangat aman secara
benar tidak boleh dapat ditembus bahkan dengan komputasi yang tak terbatas
kriminal yang tertuduh harus menyerahkan kunci dekripsinya jika diminta oleh
pelanggaran hak untuk tidak dipaksa mencurigai dirinya sendiri, seperti dalam
Page 12 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
TERMINOLOGI
menjadi teks yang tak dapat dipahami (disebut teks sandi). Deskripsi merupakan
kebalikan, dengan kata lain, memindahkan teks sandi yang tidak dapat dibaca
Operasi yang lebih mendalam dari sandi diatur baik oleh algoritma dan pada
setiap permintaan dekripsi dengan kunci. Kunci ini bersifat rahasia (yang
biasanya diketahui hanya oleh orang yang berkomunikasi), dan biasanya terdiri
dengan karakter string singkat, yang dibutuhkan untuk mendekripsi teks sandi.
elemen-elemen teks terbatas, teks sandi terbatas, kunci terbatas, dan algoritma
dekripsi dan enkripsi yang berkoresponden pada setiap kunci. Kunci sangat
sandi tanpa kunci variabel dapat dengan mudah rusak dengan hanya
pengetahuan yang digunakan dari sandi dan dengan kemungkinan tidak berguna
(atau malam tidak produktif) untuk banyak tujuan. Secara historis, sandi sering
dalam kriptografi, sandi telah memiliki arti yang lebih spesifik. Itu berarti
pemindahan unit teks (contoh kata atau frasa yang berarti) dengan sebuah kata
sandi (sebagai contoh, "wallaby" berarti "menyerang saat fajar"). Sandi tidak lagi
Page 13 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
menyangkut istilah tertentu-sejak sandi yang dipilih secara tepat lebih praktis dan
lebih aman daripada sandi terbaik dan juga dapat diadaptasikan pada komputer.
memperoleh arti dari informasi enkripsi tanpa mengakses sandi secara normal
dan kriptologi untuk merujuk pada ilmu kombinasi dari kriptografi dan
kriptanalisis. Bahasa Inggris lebih fleksibel dari istilah umum yang digunakan
pada beberapa bahasa lain yang dimana kriptologi (dilakukan oleh kriptolog)
Ilmu karateristik dari bahasa yang memiliki aplikasi pada kriptografi (atau
kriptologi) (seperti data frekuensi, kombinasi surat, pola universal, dll.) disebuh
kriptolinguistik.
dipahami menjadi bentuk yang tak dapat dipahami dan kembali lagi satu dengan
yang lain, menjadikannya tak dapat dibaca oleh pencegat atau penyadap tanpa
ilmu khusus (di mana sandi dibutuhkan untuk dekripsi pesan itu). Enkripsi
Page 14 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
lain.
KRIPTOGRAFI KLASIK
implementasi penulisan sejak banyak orang tidak dapat membaca. lawan yang
lebih terpelajar, membutuhkan kriptografi yang nyata. Tipe sandi klasik utama
subtitusi, di mana secara sistematis mengganti huruf atau grup kata dengan kata
teks sandi yang diukir pada batu di Mesir (1900 sebelum Masehi), namun teks
sandi ini digunakan hanya sebagai hiburan untuk pengamat terpelajar daripada
Page 15 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
militer Sparta.Steganografi
Steganografi (menyembunyikan kehadiran pesan sehingga pesan
tersebut menjadi rahasia) juga pertama kali diperkenalkan pada masa kuno.
Contoh awal seperti, dari Herodotus, menyembunyikan pesan - sebuah tato pada
kepala budaknya - di bawah rambut yang kembali tumbuh. Contoh yang lebih
modern dari steganografi termasuk penggunaan tinta tak tampak, mikrodot, dan
Di India, Kamasutra dari Vtsyyana yang berumur 2000 tahun berbicara dengan
dua jenis sandi yang berbeda yang disebut Kautiliyam dan Mulavediya. Di
dan bertimbal-balik.
Teks sandi yang dihasilkan dengan sandi klasik (dan beberapa sandi modern)
selalu mengungkapkan informasi statistik tentang teks awal, yang sering dapat
Page 16 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
yang masih populer hingga saat ini, meskipun lebih banyak dalam bentuk puzzle.
Mesin sandi berbentuk buku pada abad ke-16 milik Perancis, ditangan Henri II dari Perancis
Surat terenkripsi dari Gabriel de Luetz d'Amaron, Duta Besar Perancis untuk Kerajaan Ottoman,
setelah 1546, dengan penguraian parsial
Pada dasarnya semua sandi tetap rentan kepada kriptanalisis menggunakan
dijelaskan oleh Leon Battista Alberti sekitar tahun 1467, meskipun terdapat
beberapa indikasi bahwa hal ini telah terlebih dahulu diketahui oleh Al-
alfabet) untuk beberapa bagian pesan (mungkin untuk setiap teks surat berturut-
turut hingga akhir). Dia juga menemukan apa yang mungkin menjadi alat sandi
kunci, yang mengatur substitusi surat berdasarkan surat mana dari kata kunci
Page 17 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
bahwa sandi Vigenre sangat rentan terhadap pemeriksaan Kasiski, namun hal
ini diterbitkan pertama sekali kira-kira sepuluh tahun kemudian oleh Friedrich
Kasiski.
Walaupun analisis frekuensi dapat sangat kuat dan menjadi teknik umum
membuat spionase, penyuapan, pencurian, dll. Hal ini secara tegas mengakui
kerahasiaan algoritma sandi pada abad 19 sangat tidak peka dan tidak
menerapkan praktik keamanan pesan; faktanya, hal ini lebih lanjut disadari
bahwa setiap skema kriptografi yang memadai (termasuk sandi) harus tetap
aman walaupun musuh benar-benar paham tentang algoritma sandi itu sendiri.
kunci agar tetap rahasia bahkan ketika diserang sekalipun. Prinsip fundamental
ini pertama kali dijelaskan pada tahun 1883 oleh Auguste Kerckhoffs dan secara
umum dikenal dengan Prinsip Kerckhoff; secara alternatif dan blak-blakan, hal ini
sistemnya'.
Alat-alat bantu yang berbeda telah banyak digunakan untuk membantu sandi.
Salah satu alat paling tua yang dikenali merupakan scytale dari Yunani, tangkai
yang digunakan oleh Spartan sebagai alat bantuk untuk memindahkan sandi
(lihat gambar di atas). Pada zaman pertengahan, alat bantu lainnya ditemukan
seperti jerejak sandi, yang juga dikenal sebagai jenis steganografi. Dengan
penemuan polialfabetik, sandi menjadi lebih mutakhir dengan bantuan disk sandi
Page 18 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
milik Alberti, skema tabula recta Johanner Trithemius, dan silinder multi Thomas
Jefferson (tidak banyak diketahui, dan ditemukan kembali oleh Bazeries sekitar
tahun 1900. Banyak alat mekanik enkripsi/dekripsi ditemukan pada awal abad
ke-20, dan beberapa telah dipatenkan, di antaranya mesin rotor yang dikenal
dengan nama mesin Enigma digunakan oleh pemerintah dan militer Jerman dari
ERA KOMPUTER
KRIPTANALISIS dari alat mekanis baru terbukti lebih sulit dan melelahkan. Di
perkembangan alat yang lebih efisien untuk membawa tugas yang berulang-
ulang. Hal ini berujung pada pengembangan Colossus, komputer digital pertama
sekali yang bekerja penuh secara elektronik, yang membantu penyandi untuk
mengenkripsi setiap jenis data yang mungkin dalam bentuk biner, tidak seperti
chiper klasik yang hanya mengenkripsi teks bahasa tertulis; hal ini sangat baru
baik untuk desain chiper dan kriptanalisis. Banyak chiper komputer dapat
dikategorikan dengan operasi mereka pada urutan biner (kadang dalam grup
atau blok), tidak seperti skema mekanikal dan klasik, yang biasa
hingga batas tertentu untuk kompleksitas chiper yang lebih tinggi. Namun, chiper
modern yang baik telah mengungguli kriptanalisis; kasus ini biasa menggunakan
kualitas chiper yang lebih efisien (seperti membutuhkan sumber daya yang
Page 19 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
lebih luas dibandingkan chiper yang lebih klasik, membuat kriptanalsis menjadi
Riset akademik kriptografi yang terbuka luas masih relatif baru; dimulai pada
pertengahan 1970an. Pada saat ini, personel IBM mendesain algoritma yang
menjadi standar enkripsi data Federal; Whitfield Diffie dan Martin Hellman
dipublikasikan oleh kolumnis Amerika Martin Gardner. Sejak saat itu, kriptografi
telah sangat luas digunakan dalam dunia komunikasi, jaringan komputer, dan
seperti faktorisasi integer atau masalah logaritma diskrit, jadi terdapat hubungan
yang mendalam dengan matematika abstrak. Tidak ada bukti pasti bahwa teknik
aman jika beberapa masalah komputasional sulit untuk dipecahkan, atau asumsi
attack, jadi ketika menentukan panjang kunci, diharuskan memilih kunci yang
sulit. Efek potensial dari komputer kuantum telah dipertimbangkan oleh beberapa
sistem desainer kriptografi; implementasi kecil dari mesin ini yang akan segera
spekulatif.
Page 20 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Pada Dasarnya, pada awal abad ke-20, kriptografi secara singkat berkenaan
dengan bahasa dan pola lexicographic. Sejak saat itu tekanannya telah berubah,
teori bilangan, dan matematika diskrit secara umum. Kriptografi juga merupakan
cabang teknik, namun tidak biasa sebab hal ini berkaitan dengan pertentangan
yang aktif, pintar, dan jahat; teknik jenis lain (seperti teknik kimia dan sipil) hanya
KRIPTOGRAFI MODEREN
BIDANG kriptografi yang lebih modern dapat dibagi dalam beberapa area studi.
KRIPTOGRAFI KUNCI-SIMETRIS
Kriptografi kunci-simetris, di mana satu kunci di gunakan untuk enkripsi dan dekripsi
pengirim dan penerima membagi kunci yang sama (atau, walaupun kuncinya
tidak mirip, namun dapat berhubungan dengan cara komputasi sederhana). Hal
Page 21 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
ini menjadi satu-satunya jenis enkripsi yang ketahui publik hingga Juni
versi PGP (Pretty Good Privacy) untuk enkripsi tingkat tinggi, seperti e-
mail Chiper kunci simetris diimplementasikan baik itu sebagai chiper blok atau
chiper stream. Sebuah block chiper enchiper masukan pada blok plainteks
sebagai lawanan untuk karakter individual, bentuk masukan yang digunakan oleh
chiper aliran. Standar Enkripsi Data (SED) dan Standar Enkripsi Lanjutan (SEL)
SED (masih menjadi varian yang masih terbukti dan lebih aman) masih cukup
terkenal; Hal ini digunakan oleh banyak penerapan dari enskripsi ATM hingga
keamanan e-mail dan akses remote aman.Banyak chiper blok lainnya telah
didesain dan dirilis, dengan kualitas yang bervariasi. Banyak telah juga yang
dihancurkan, seperti FEAL. Beberapa chiper, yang berbeda dengan tipe 'blok',
dengan bit-bit teks atau karakter-karakter, sedikit mirip dengan one-time pad.
yang tersembunyi yang berubah saat chiper bekerja. Keadaan internal mulanya
diatur menggunakan bahan kunci rahasia. RC4 sangat luas digunakan sebagai
chiper aliran. Chiper blok dapat digunakan sebagai chiper aliran. Fungsi hash
segala panjang pesan sebagai input, dan panjang keluaran hash yang pendek
dan tetap, yang dapat digunakan sebagai (sebagai contoh) tanda tangan digital.
Untuk memiliki fungsi hash yang baik, penyerang tidak dapat mencari dua pesan
yang dapat menghasilkan hash yang sama. MD4 merupakan fungsi hash
pangjang yang sekarang telah dapat dipecahkan; MD5, varian yang lebih kuat
Page 22 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
dari MD4, sudah luas digunakan namun dapat dipecahkan saat beroperasi.
Aman seperti fungsi hash MD5: SHA-0 ialah algoritma cacat yang kemudian
ditarik; SHA-1 digunakan secara luas dan lebih aman dari MD5, namun
kewenangan Amerika mengatakan hal ini cukup bijaksana dari sudut pandang
pada tahun 2012, standar nasional Amerika memilih SHA-3 sebagai standar
desain hash yang baru. Message Authentication Code (MAC) hampir mirip
dengan fungsi hash kriptografi, kecuali terdapat kunci rahasia yang dapat
KRIPTOGRAFI KUNCI-PUBLIK
Page 23 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
dan dekripsi sebuah pesan, walaupun pesan atau kelompok pesan dapat
memiliki kunci yang berbeda dari yang lain. Kerugian yang paling signifikan dari
membagi kunci yang berbeda, dan juga membagi textchiper yang berbeda juga.
jumlah kunci yang dibutuhkan meningkat dua kali lipat dari jumlah anggota
menciptakan kunci rahasia yang aman di antara dua pihak yang saling
Whitfield Diffie dan Martin Hellman, penulis jurnal pertama kriptografi kunci-
publik]] Pada jurnal pionir tahun 1976, Whifiled Diffie dan Martin Hellman
disebut kunci asimetris) pada dua istilah yang berbeda namun secara matematis
terdapat kunci yang berhubungan, yaitu kunci publik dan kunci privat. Sistem
kunci pablik dikonstruksikan sangat baik sehingga kalkulasi dari satu kunci
('kunci privat') secara komputasional tidak mirip dengan (kunci 'publik') walaupun
secara kebutuhan mereka mirip. Malah, kedua kunci dihasilkan secara rahasia,
Dalam ekosistem kunci-publik, kunci publik dapat secara bebas terdistribusi, saat
pasangannya kunci privat harus selalu terjaga rahasia. Pada sistem enkripsi
Page 24 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
privat atau rahasia digunakan untuk dekripsi. Sementara Diffie dan Hellman tidak
kunci-publik
publik memang benar mungkin dengan menunjukkan protokol Diffie-
Jurnal Diffie dan Hellman menyebar luas pada dunia akademi dalam mencari
Algoritma Diffie-Hellman
Hellman dan RSA, sebagai tambahan dalam menciptakan contoh
algoritma kunci-publik
publik kualitas tinggi pertama yang dikenal publik, telah sangat
pertukaran Diffie-Hellman.
Hellman.
icon kunci dari browser web Firefox, yang mengindikasikan TLS,, sistem kriptografi kunci
kunci-publik,
sedang digunakan
Page 25 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
skema tanda tangan digital. Tanda tangan digital berhubungan dengan tanda
tangan pada umumnya; mereka memiliki karateristik yang sama dimana mudah
bagi pengguna untuk membuatnya, namun sangat sulit bagi orang lain untuk
pada konten pesan yang sedang ditanda tangani; mereka lalu tidak dapat
'dipindahkan' dari satu dokumen ke dokumen yang lain, dan setiap usaha akan
dapat terdeteksi. Pada skema tanda tangan digital, terdapat dua algoritma: satu
pesan (atau hash dari pesan, atau keduanya), dan satu untuk verivikasi, di mana
kunci publik yang sesuai digunakan dengan pesan untuk memeriksa validitas
tanda tangan. RSA dan DSA merupakan dua skema tanda tangan digital yang
paling terkenal. Tanda tangan digital merupakan pusat dari operasi infrastruktur
kunci publik dan banyak skema keamanan jaringan lainnya (seperti Transport
Algoritma kunci publik paling sering didasari pada teori masalah kompleksitas
kurva eliptis telah ditemukan, sistem di mana keamanan yang didasari pada
komputasional lebih mahal ketimbang teknik yang digunakan pada banyak chiper
Page 26 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
sendiri, sedang kunci simetris yang relevan dikirimkan dengan pesan, namun
tangan hybrid sering digunakan, di mana fungsi hash kriptogfari dihitung secara
komputer, dan hanya hash hasil yang ditanda tangani secara digital.
KRIPTANALISIS
VARIAN dari mesin Enigma, digunakan oleh militer dan otoritas Jerman pada
akhir tahun 1920an saat Perang Dunia II, mengimplementasikan jenis chiper
Enigma di Biro chiper Polandia, selama 7 tahun sebelum perang, dan dekripsi
Dunia II, membuktikan bahwa chiper one-time pad tidak dapat dipecahkan,
menemukan kunci utama yang acak, tidak pernah dapat digunakan lagi,
Page 27 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
menyimpan rahasia dari setiap penyerang, dan memiliki panjang yang sama dan
lebih besar dari pesan itu sendiri.Kebanyakan chiper, selain one-time pad, dapat
dipecahkan dengan cara komputasional brute force attack, namun jumlah usaha
yang dibutuhkan dapat sangat lama tergantung pada besar kunci, sebanding
dengan usaha yang dibutuhkan untuk membuat chiper. Pada beberapa kasus,
keamanan yang efektif dapat dicapai jika terbuktik bahwa usaha yang dibutuhkan
(seperti "faktor kerja", dalam istilah Shannon) melebihi kemampuan dari setiap
musuh. Ini berarti bahwa tidak boleh ada metode yang efisien (berbanding
terbalik dengan metode brute force yang menghabiskan waktu) dapat ditemukan
untuk memecahkan chiper. Sejak tidak ada bukti yang ditemukan, metodeone-
time-pad tetap secara teoretis merupakan chiper yang tidak dapat dipecahkan.
dalam beberapa cara yang berbeda. Perbedaan yang sama yang diketahui oleh
kriptanalis memiliki akses hanya pada chiperteks (kriptosistem modern yang baik
teks yang diketahui, kriptanalis memiliki akses pada chiperteks dan teks yang
berhubungan (atau pada banyak pasangan). Pada serangan teks yang terpilih,
beberapa kali); sebagai contoh, istilah gardeing yang digunakan oleh Inggris
selama Perang dunia II. Akhirnya, pada serangan chiperteks yang terpilih,
untuk diketahui, walaupun dengan jumlah yang sangat besar, ialah sering
kriptografis.
Page 28 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
melawan cipher blok atau cipher aliran yang lebih efisien daripada setiap
brute force sederhana melawan DES membutuhkan satu teks yang diketahui dan
dekripsi 255, membutuhkan kira-kira setengah dari kunci yang mungkin, untuk
Namun hal ini tidak cukup menjadi jaminan; serangan kriptanalis linear terhadap
DES membutuhkan 243 teks yang deiketahui dan kira-kira 243 operasi DES. Hal
algoritma RSA yang didasari pada masalah yang berhubungan dengan faktor
masalah komputasional ini, dan beberapa darinya, efisien (contoh dalam waktu
kriptografi kurva eliptik versi logaritma diskrit sangat menghabiskan banyak waktu
ketimbang algoritma yang paling dikenal untuk faktorisasi, paling tidak untuk
masalah dengan besar yang lebih kurang sama. Oleh karena itu, segala hal
harus sama, untuk mencapai kekuatan menahan serangan yang sama, teknik
enkripsi berbasis faktor harus menggunakan kunci yang lebih besar dari teknik
Page 29 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
kurva eliptik. Untuk alasan ini, kriptosistem kunci-publik yang didasari pada kurva
eliptik telah menjadi lebih dikenal sejak penemuannya pada pertengahan tahun
1990an.
pada perangkat yang nyata, yang disebut side-channel attack. Jika kriptanalis
memiliki akses pada, sebagai contoh, jumlah waktu yang dibutuhkan perangkat
password atau karakter pin, dia mungkin dapat menggunakan serangan waktu
untuk memecahkan cipher yang paling tidak tahan pada analisis. Penyerang
mungkin juga mempelajari pola dan panjang pesan untuk mendapatkan informasi
berharga; hal ini dikenal sebagai analisis trafik dan cukup berguna untuk
kunci yang terlalu pendek, akan membuat setiap sistem menjadi mudah
diserang, terlepas dari faktor lainnya. Dan, tentu saja, teknik sosial, dan serangan
lain melawan personel yang bekerja dengan kriptosistem atau pesan yang
penyiksaan, dll) menjadi serangan yang paling produktif dari semuanya jenis
serangan.
KRIPTOGFARI SEDERHANA
kriptografi lainnya. Alat kriptografi yang lebih sulit lalu diciptakan dari kriptografi
Page 30 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
KRIPTOSISTEM
tertentu (seperti enkripsi kunci publik) sembari menjamin sifat keamanan tertentu
sifat keamanan sistem. Tentu saja, karena perbedaan antara kriptosistem dan
kriptografi tidak jelas, kriptosistem yang canggih dapat diperoleh dari kombinasi
melibatkan komunikasi maju mundur di antara dua atau lebih kelompok dalam
ruangan. (seperti di antara pengirim dari pesan aman dan penerimanya) atau
Schnorr, enkripsi El-Gamal, PGP, dll. Kriptosistem yang lebih rumit melibatkan
Page 31 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
keamanan kriptosistem; Hal ini secara umum disebut keamanan terbukti. Ide
Ilmu yang melihat seberapa baik implementasi dan integrasi kriptografi dalam
penerapannya pada perangkat lunak disebut bidang tenik kriptografi dan teknik
keamanan.
LARANGAN
privasinya, kriptografi juga dianggap menarik untuk pendukung hak sipil. Oleh
karena itu, terdapat sejarah dari masalah legal yang kontroversial mengenai
atau telah, dilarang. Hingga tahun 1999, Perancis telah menlarang penggunaan
kriptografi.
Page 32 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
dan Vietnam.
banyak konflik mengenai masalah legal atau tidaknya kegunaan kriptografi. Satu
masalah khas yang penting mengani ekspor kriptografi dan kriptografi perangkat
Dunia II dan ekspektasi bahwa kriptografi akan terus menjadi penting untuk
keamanan nasional, banyak pemerintah Barat memiliki, pada satu titik, mengatur
kriptografi secara ketat. Setelah Perang Dunia II, ialah ilegal di Amerika untuk
enkripsi ditunjuk sebagai alat militer tambahan dan didaftarkan pada Daftar
personal, algoritma kunci asimetris (seperti teknik kunci publik), dan Internet,
menjadi tersedia dengan luas, semakin teknik enkripsi kualitas tinggi dikenal luas
di seluruh dunia.
PEMBATASAN EKSPOR
kriptografi. Setelah kode sumber program Pretty Good Privacy (PGP) milik Philip
komplain oleh RSA Security (yang kini dinamakan RSA Data Security, Inc.)
Page 33 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
keputusan pada tahun 1999 mengenai kode sumber cetak untuk algoritma dan
sistem kriptografi dilindungi sebagai kebebasan berbicara (atau free speech) oleh
simetris, 512-bit untuk RSA) tidak akan diatur ekspornya. Kriptografi yang
pada tahun 2000;Tidak ada banyak larangan lagi pada besar kunci di perangkat
lunak yang dijual bebas di Amerika. Sejak perenggangan dari larangan ekspor
dengan Internet termasuk browser web Amerika seperti Firefox atau Internet
kriptografi yang berkualitas via browser mereka (seperti, via Transport Layer
Security. Program klien email Mozilla Thunderbird dan Microsoft Outlook dapat
mentransmit dan menerima email melalui TLS, dan dapat mengirim dan
banyak kriptosistem yang sangat luas. Browser dan program email ini terdapat di
secara umum pada dunia sipil tidak dapat menemukan cari yang praktis untuk
mengatur distribusi atau penggunaan kriptografi pada kualitas ini, bahkan hukum
yang dibuat saat ini oleh pemerintah hampir mustahil dapat dilaksanakan secara
efektif.
Page 34 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
KETERLIBATAN NSA
aturan cipher. NSA terlibat dengan desain Data Encryption Standard selama
oleh NSA dan IBM, yang menjadi diketahui publik hanya ketika hal ini ditemukan
kriptanalisis differensial, namun NSA meminta teknik ini tetap terjaga rahasia.
Teknik ini menjadi diketahui publik ketika Biham dan Shamir menemukan kembali
Contoh lain keterlibatan NSA ialah pada masalah chip Clipper pada tahun 1993,
kriptografi Capstone. Clipper dikritik secara luas oleh kriptografer untuk dua
pada tahun 1998, jauh setelah Clipper pertama kali ditemukan). Cipher yang
cipher lemah untuk membantu usaha intelejennya. Keseluruhan inisiatif ini juga
pada escrow key diatur oleh pemerintah untuk digunakan menegakkan hukum,
Page 35 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
kelompok teknik teknologi mengatur penggunaan hak cipta, yang secara luas
diimplementasikan dan disebar atas perintah beberapa hak cipta. Pada tahun
penggunaan teknik dan teknologi kriptanalitik tertentu (telah ditemukan atau akan
mengelabui skema teknologi DRM. Hal ini memiliki dampak yang nyata pada
komunitas riset kriptografi sejak penjanjian ini dibuat di mana selaga riset
implementasi Hak Cipta Direktif. Larangan yang sama juga tercantum pada
Intelektual Dunia.
Departemen Hukum dan Ham serta FBI Amerika belum menegakkan DMCA
juga, tetap menjadi kontroversial. Niels Ferguson, peneliti kriptografi yang sangat
hukum DMCA. Baik Alan Cox (pengembang kernel Linux kedua) dan Edward
kunjungannya ke Amerika dari Rusia, dan dihukum selama lima bulan masa
telah Ia lakukan di Rusia, di mana hal itu legal di sana. Pada tahun 2007, kunci
Page 36 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
kriptografi yang bertanggung jawab atas konten Blu-ray dan HD DVD tersebar
luas di Internet. Atas kasus itu, MPAA mengirim banyak sekali peringatan
pelanggaran hukum, dan dikenakan hukuman dua hingga lima tahun penjara jika
Perancis, dan India memaksa terdakwa untuk memberikan kunci enkripsi atau
Dalam banyak yuridikasi, status legal pemaksaan seperti ini masih belum jelas.
Page 37 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Bagian 2
PYTHON
Sejarah, Fitur
sintaksis kode yang sangat jelas, dan dilengkapi dengan fungsionalitas pustaka
Page 38 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
pemrograman fungsional. Salah satu fitur yang tersedia pada python adalah
Saat ini kode python dapat dijalankan di berbagai platform sistem operasi,
1) Linux/Unix
2) Windows
3) Mac OS X
5) OS/2
6) Amiga
7) Palm
Page 39 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
License (GPL)
SEJARAH
PYTHON dikembangkan oleh Guido van Rossum pada tahun 1990 di CWI,
Python. Versi terakhir yang dikeluarkan adalah 1.6. Tahun 2000, Guido dan para
pemegang hak cipta intelektual Python sejak versi 2.1 dan dengan demikian
mencegah Python dimiliki oleh perusahaan komersial. Saat ini distribusi Python
Nama Python dipilih oleh Guido sebagai nama bahasa ciptaannya karena
kecintaan Guido pada acara televisi Monty Python's Flying Circus. Oleh karena
Page 40 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
FITUR
berorientasi objek.
seperti java)
maupun C/C++.
pengoprasiannya.
Masukan / Keluaran
Contoh masukan :
Page 41 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Contoh keluaran :
Halo Dunia
Halo dunia!
python:
Django
Cubicweb
Pyramid
Web.py
Web2py
Page 42 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Zope
Flask
Falcon
Bottle
Wezzy.web
Giotto
Grok
Page 43 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Bagian 3
LEMBAG A SANDI NEGAR A
Negeri dan Perwakilan RI di New Delhi, Den Haag, dan New York. Melalui
Melalui SK Presiden RIS nomor 65/1950, pada tanggal 14 Februari 1950, terjadi
Page 44 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
dengan Keppres Nomor 54/1994, pada 7 Juli 1999 dengan Keppres Nomor
dimulai dari Mayor Jenderal TNI Dr. Roebiono Kertopati dari tahun 1946-1984,
selanjutnya oleh Laksamana Muda TNI B.O. Hutagalung dari tahun 1998-2002,
lalu Mayor Jenderal TNI Nachrowi Ramli, S.E. dari tahun 2002-2008, kemudian
Budiharso, S.IP, dan sekarang dipimpin oleh Mayor Jenderal TNI Dr. Djoko
Setiadi, M.Si.
Page 45 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Bagian 4
PROJEK KRIPTOGRAFI DAN PYTHON
2)
Backbox 4/Ubuntu 12.04 (32bit) python
2.7 Acer Aspire 5570 series (*tidak seluruh
program)
3)
Windows 7 (32bit) python 3, Dell
Inspiron N4050
Page 46 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
MEMBALIKKAN SANDI
Membalikkan sandi atau reverse cipher dapat dilakukan dengan cara mengubah urutan
huruf pertama menjadi huruf terakhir dari kata atau kalimat, contohnya adalah Hello
world! di enkripsi menjadi !dlrow olleH. Untuk melakukan dekripsi menjadi pesan
asli cukup lakukan hal sebaliknya, yaitu mengubah urutan !dlrow olleH, dimana huruf
################################################################
# Membalikkan Sandi #
# Editor : Matius Celcius Sinaga #
# Author : http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
#mengenalkan ubah dan nantinya akan menyimpan string yang telah diubah
#ingat bahwa string yang digunakan adalah dua single qoute (' ')
#bukan double karakter
ubah = ''
#panjang pesan akan dikurangi 1 dari posisi awal untuk menentukan barisan
i = len(pesan) - 1
Page 47 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
print(ubah)
Output/Hasilnya adalah :
ayaR aisenodnI
Apabila anda mengubah isi dari variabel pesan menjadi ayaR aisenodnI (tanpa tanda
kutip) akan menghasilkan teks asli dari proses membalikkan sandi yaitu Indonesia Raya.
Selamat anda sudah memulai mempelajari hal dasar mengenai kriptografi dan
Page 48 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
SANDI CAESAR
Sandi Caesar atau Caesar Cipher adalah sandi yang digunakan oleh Julius Caesar 2.000
tahun yang lalu. Sandi ini sangat mudah untuk dipelajari namun mudah juga untuk
ditebak.
###############################################################
# Sandi Caesar #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
#jumlah nilai langkah/sandi geser yang akan anda gunakan pada kunci
#silahkan ganti dengan angka yang anda inginkan
#kunci 9 berarti huruf yang pertama diubah menjadi huruf ke 9
#dalam urutan abjad
kunci = 9
ubah = ''
Page 49 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
#jika pesan yang diproses lebih besar dari atau lebih kecil
#atau sama dengan nol/tidak ada
if nomor >= len(HURUF):
nomor = nomor - len(HURUF)
elif nomor < 0:
nomor = nomor + len(HURUF)
JOEPOFTJB SBZB
Page 50 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Brute-force adalah suatu teknik kriptanalistik dengan menebak secara terus menerus
terhadap kunci sandi, apabila kunci yang dihasilkan salah maka program akan mencoba
kunci yang lain secara terus menerus hingga menemukan kunci yang tepat, kunci yang
dihasilkan akan digunakan untuk melakukan dekripsi dan menampilkan pesan asli. Hal
tersebutlah mengapa sandi Caesar (Caesar Cipher) tidak digunakan dewasa ini, selain
jumlah kunci yang memungkinkan sandi untuk di tebak hanya memiliki kemungkinan
26 kunci dan membutuhkan hanya beberapa waktu (detik) untuk menemukan salah
satunya. Untuk membuat data privasi anda aman, anda membutuhkan sandi yang
memiliki kunci yang lebih banyak dan sulit untuk ditebak. Contohnya adalah dengan
sandi transposisi.
Anda dapat melakukan hack/peretasan pada sandi Caesar dengan menggunakan teknik
Kriptanalitik yang disebut dengan brute-force. Pada program ini anda dapat
memecahkan program sandi Caesar dengan sangat efektif, contoh sederhana mengapa
lebih baik untuk tidak menggunakan sandi Caesar untuk penggunaan informasi rahasia.
bernama Auguste Kerckhoffs mengatakan bahwa sebuah sandi seharusnya tetap aman
bahkan jika seseorang mengetahui bagaimana sandi bekerja dan memiliki teks sandi,
yang dimaksud adalah orang lain bisa saja memiliki seluruh informasi kecuali kunci. Hal
tersebut juga diulangi pada abad ke 20 oleh seorang matematikawan Claude Shannon
################################################################
# Meretas sandi Caesar dengan Brute-force #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
Page 51 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
#bagian akhir dari proram ini hampir sama dengan program asli Caesar Cipher
#kode enkripsi dan dekripsi berjalan dan melakukan tugasnya pada string pesan
for symbol in pesan:
if symbol in HURUF:
#mencari jumlah simbol dalam huruf
nomor = HURUF.find(symbol)
nomor = nomor - kunci
Page 52 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Sesuai dengan kunci yang digunakan pada sandi Caesar , maka urutan kunci yang
menghasilkan pesan asli berada pada angka tersebut juga.
Page 53 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Anda telah membuktikan bahwa sandi Caesar tidak cukup untuk melindungi data anda
agar tidak mudah ditebak maupun dengan mudah diketahui oleh orang lain. Sandi
################################################################
# Enkripsi Transposisi #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
import pyperclip
#salin string yang telah dienkripsi dalam chipertext pada tampilan layar
pyperclip.copy(sanditeks)
Page 54 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
#tetap melakukan perulangan hingga pointer berada pada nilai pesan terakhir
while pointer < len(pesan):
#menempatkan karakter pada titik pesan yang terakhir
#pada kolom di dalam daftar ciphertext
sanditeks[col] += pesan[pointer]
Page 55 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Contoh gambar sederhana untuk menjelaskan program diatas adalah sebagai berikut :
I d n s
a R y (spasi)
A a (spasi) I
k : R A
n o e I
(spasi) a a T
n h A R
u l T |
Page 56 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Sesuai dengan gambar yang sebelumnya pada enkripsi transposisi maka anda akan
mencoba meretas kembali dengan skema dan gambaran dari program dan gambar yang
1. Hitung jumlah dari kolom yang kamu akan ambil dengan panjang dari pesan dan
2. Bayangkan jumlah dari kotak. Jumlah kolom yang sudah dihitung pada langkah 1.
jumlah dari baris juga memiliki hal yang sama dengan kunci.
dengan menghitung jumlah dari julah kotak yang terpakai dan tidak dan kurangi
4. Isi setiap karakter dari sandi teks dimulai dari baris paling atas dan berlanjut dari kiri
5. Tetapkan teks awal dengan membaca dari kolom yang paling kiri hingga mencapai
################################################################
# Dekripsi dengan sandi Transposisi #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
def main():
#ubah disini apabila ingin mengganti pesan dan kunci
Page 57 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
#pesanSaya
#kunciSaya
pesanSaya = 'Iaakn nudRa:oahIny ReaATs iAiTr|'
kunciSaya = 8
#jumlah kotak yang terisi adalah jumlah kolom baris dan pesan
jumlahKotakyangTerisi = (jumlahKolom * jumlahBaris) - len(pesan)
Page 58 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
#jika ada kolom lebih atau adanya baris yang tidak sesuai, maka
#kembali pada kolom pertama dan melanjutkannya
if (kolom == jumlahKolom) or (kolom == jumlahKolom - 1 and baris >=
jumlahBaris - jumlahKotakyangTerisi):
kolom = 0
baris += 1
return''.join(teksawal)
IRTA hanya sebatas singkatan dari Indonesia Raya Tanah Airku pengisi ruang kosong
Page 59 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Anda dapat menggunakan keahlian anda lebih dari sekedar dalam menulis program.
Anda dapat juga memprogram sebuah program untuk menguji program yang anda
miliki apakah bekerja sebagaimana mestinya meskipun dengan nilai masukan yang
berbeda-beda.
################################################################
# Test/ujicoba Transposisi #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
#random dan sys sudah tersedia pada python saat anda melakukan instalasi
#enkripsitransposisi dan dekripsitransposisi adalah program sebelumnya
#tempatkan enkripsitransposisi dan dekripsitransposisi berada pada folder yang sama
import random, sys, enkripsitransposisi, dekripsitransposisi
def main():
#mengatur settingan acak "seed" menjadi nilai statis
#mengubah algoritma dan menentukan nilai 42
#hal ini disebut juga sebagai PSEUDORANDOM NUMBERS
#pada random.randint juga menghasilkan PSEUDORANDOM NUMBERS
#secara teknis nilai yang dihasilkan random.randint() sesungguhnya tidaklah acak
#dan hasil algoritmanya dapat anda prediksi
random.seed(42)
#contohnya jika anda menentukan seed antara 1 hingga 10 akan menentukan nilai
acak 7
pesan = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' * random.randint(4, 40)
Page 60 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
pesan = ''.join(pesan)
#list/daftar diubah menjadi string
Page 61 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Page 62 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Pada program sebelumnya anda hanya melakukan enkripsi dan dekripsi yang mungkin
terasa sangat sederhana, dengan cara mengubahnya menjadi kata atau kalimat acak.
Namun bagaimana bila anda mencobanya terhadap file yang sebenarnya ? pada hal ini
anda akan mencoba pada file .txt (dot teks) yang digunakan untuk menyimpan kata
atau teks, biasanya file seperti ini digunakan pada format penyimpanan notepad (pada
Windows), TextMate atau TextEdit (pada OS X) atau gedit (pada Linux) dan beberapa
program editor lainnya. Anda juga bisa menyimpan file dengan format .txt pada IDLE
file editor bawaan Python30 lalu menyimpannya dalam extensi .txt yang biasanya anda
################################################################
# Transposisi File sandi #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
def main():
#siapkan sebuah file teks berisi kata maupun kalimat
#dengan nama file matiuscelciussinaga.txt (txt format teks)
masukkanNamaFile = 'matiuscelciussinaga.txt'
#jika nama file sudah ada dengan file yang akan anda gunakan
#maka program akan melakukan perubahan pada nama file matiuscelciussinaga.txt
namaFileKeluaran = 'matiuscelciussinaga.encrypted.txt'
kunciSaya = 10
#tentukan disini apakah dilakukan enkripsi atau dekripsi
modeSaya = 'encrypt'
#jika file yang dimaksudkan belum ada, maka program terlebih dahulu melakukan
eliminasi
if not os.path.exists(masukkanNamaFile):
Page 63 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
#menghasilkan pesan yang diubah menjadi file yang baru untuk ditampilkan
FileObjekKeluaran = open(namaFileKeluaran, 'w')
FileObjekKeluaran.write(ubah)
Page 64 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
FileObjekKeluaran.close()
Encrypting...
Encryption time: 0.0 seconds
Done encrypting matiuscelciussinaga.txt (26 characters).
Encrypted file is matiuscelciussinaga.encrypted.txt.
Page 65 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
pada akhirnya komputer tidak akan menjadi manusia seutuhnya dan tak mampu
memainkan peran sebagai lawan dalam permainan komputer atau bahkan menjadi
peralatan seperti pasukan robot militer. Namun instruksi-instruksi yang diberikan yang
akan menentukan bagaimana hal tersebut menjadi kebiasaan dalam menanggapi sesuatu
yang dimana hal ini sebenarnya sangat-sangatlah rumit dalam penjelasannya terutama
permainan komputer atau memberikan anda peluang masa depan yang lebih baik juga
################################################################
# Deteksi Bahasa #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
Page 66 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
fileKamus.close()
return cekKata
if kemungkinanKata == []:
#jika tidak ditemukan satupun huruf maka hasilkan nilai 0
return 0.0
cocok = 0
for kata in kemungkinanKata:
if kata in KATA_BAHASA:
cocok += 1
return float(cocok) / len(kemungkinanKata)
Page 67 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Program ini tidak menghasilkan tulisan atau cuplikan yang dapat ditampilkan sebagai
Jika anda ingin mencoba melakukan cekBahasa silahkan import pada IDLE dan ikuti
Page 68 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Untuk melakukan peretasan terhadap sandi transposisi, anda akan menggunakan cara
brute-force. Dengan ribuan kata kunci, kunci yang benar akan menghasilkan nilai yang
dapat terbaca dalam bahasa inggris. Anda telah mengembangkan program deteksi
bahasa pada bagian terakhir program dimana hal tersebut dapat membantu anda jika
################################################################
# Meretas Sandi Transposisi #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
#jalankan program terlebih dahulu tekan enter pada shell saat melakukan proses
import pyperclip, deteksibahasa, dekripsitransposisi
def main():
#anda akan melakukan bruteforce pada pesan ini
#silahkan dicopy-paste jika ingin melakukan eliminasi
pesanSaya = """Cb b rssti aieih rooaopbrtnsceee er es no npfgcwu plri ch nitaalr
eiuengiteehb(e1 hilincegeoamn fubehgtarndcstudmd nM eu
eacBoltaeteeoinebcdkyremdteghn.aa2r81a condari fmps" tad l t oisn sit u1rnd stara
nvhn fsedbh ee,n e necrg6 8nmisv l nc muiftegiitm tutmg cm shSs9fcie ebintcaets h
aihda cctrhe ele 1O7 aaoem waoaatdahretnhechaopnooeapece9etfncdbgsoeb
uuteitgna.rteoh add e,D7c1Etnpneehtn beete" evecoal lsfmcrl iu1cifgo ai. sl1rchdnheev
sh meBd ies e9t)nh,htcnoecplrrh ,ide hmtlme. pheaLem,toeinfgn t e9yce da' eN eMp a
ffn Fc1o ge eohg dere.eec s nfap yox hla yon. lnrnsreaBoa t,e eitsw il ulpbdofgBRe
bwlmprraio po droB wtinue r Pieno nc ayieeto'lulcih sfnc ownaSserbereiaSm-eaiah,
nnrttgcC maciiritvledastinideI nn rms iehn tsigaBmuoetcetias rn"""
#pada pesanSaya memiliki 3 tanda kutip diakhir dan diawal
#hal tersebut digunakan untuk menandakan bahwa pesanSaya
#baris-baris yang berbeda
Page 69 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
if pesanYangTeretas == None:
print('Gagal melakukan peretasan pada enkripsi.')
else:
print('Menyalin pesan yang teretas ke dalam layar:')
print(pesanYangTeretas)
#pyperclip harus berada satu folder dengan program
pyperclip.copy(pesanYangTeretas)
def retasTransposisi(pesan):
print('Sedang meretas...')
if deteksibahasa.cekBahasa(pesanTerdekripsi):
#apabila kunci telah ditemukan
print()
print('Kemungkinan dapat di retas:')
print('Kunci %s: %s' % (kunci, pesanTerdekripsi[:100]))
print()
print('Tekan D untuk berhenti dan Enter untuk melanjutkan peretasan:')
respon = input('> ')
if respon.strip().upper().startswith('D'):
return pesanTerdekripsi
return None
Page 70 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
if __name__ == '__main__':
main()
Melakukan Peretasan...
(Tekan Ctrl-C atau Ctrl-D setiap kali anda ingin berhenti)
Mencoba kunci #1...
Mencoba kunci #2...
Mencoba kunci #3...
Mencoba kunci #4...
Mencoba kunci #5...
Mencoba kunci #6...
Mencoba kunci #7...
Mencoba kunci #8...
Mencoba kunci #9...
Mencoba kunci #10...
Page 71 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Algoritma Euclid akan anda gunakan untuk mencari GCD (Greatest Common
Persekutuan Terbesar).
Mencoba GCD/FPB dengan dua angka akan menjadi hal penting untuk melakukan
perkalian dan juga dalam sandi Affine. Caranya cukup mudah hanya perlu mencari
angka-angka dan tulis setiap faktor yang memungkinkan, lalu bandingkan daftar dan
Seorang matematikawan yang hidup 2.000 tahun lalu bernama Euclid menjadi seorang
algoritim dalam menemukan pembagian terbesar pada dua angka. Namun tak
seorangpun yang mengerti atau dapat menjelaskan bahwa Euclid ada di dalam dokumen
sejarah dan bagaimana rupanya secara pasti namun pada Universitas Oxford telah
dibuat patung yang kiranya menyerupai beliau dan disebut sebagai Statue of Some
Anda akan diberi contoh seperti hal mencari symbol F yang dienkrip dengan kunci ke-
angka untuk simbol J. Jadi F dapat dienkripsi sehingga menjadi J dan melakukan
Kali ini anda akan meramu dua teknik sandi menjadi satu yaitu perkalian sandi
digubung dengan sandi Caesar menjadi sandi Affine. Salah satu kekurangan perkalian
sandi adalah bahwa huruf A akan selalu memetakan huruf A. Hal ini karena huruf A
adalah angka 0, dan jika 0 dikalikan dengan sesuatu akan menghasilkan angka 0 . Anda
akan memperbaiki hal ini dengna menambahkan kunci kedua dengan sandi Caesar
Page 72 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Hal ini disebut dengan sandi Affine (affinity) karena memiliki dua kunci kunci A yang
adalah integer (bilangan bulat) yang dengan huruf angka tersebut dikalikan. Setelah
melakukan mod dengan angka 26. Kunci B adalah integer yang ditambahkan ke dalam
angka. Hal ini dijumlahkan menjadi mod dengan 26. seperti halnya sandi Caesar.
Untuk menghitung kebalikan modular untuk mendapatkan kunci dekripsi, anda dapat
seperti halnya diatas. Namun untuk kali ini anda akan menghemat waktu untuk kunci
################################################################
# Kriptomath #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
if gcd(a, m) != 1:
return None
#tanpa pembagian mod inverse if a & m bukan bilangan prima
Page 73 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
v1, v2, v3, u1, u2, u3 = (u1 - q * v1), (u2 - q * v2), (u3 - q * v3), v1, v2, v3
return u1 % m
Karena perkalian sandi adalah hal yang sama dengan sandi Affine kecuali menggunakan
kunci B dari 0. Anda tidak perlu membagi program untuk mengalikan program. Dan hal
tersebut sangatlah tidak aman dalam hal sandi Affine dan sebenarnya tidak perlu selalu
Page 74 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
SANDI AFFINE
Sandi Affine seperti yang dijelaskan sebelumnya adalah kelipatan atau perkalian dari
sandi dimana sandi Caesar berada pada posisi atas. Sandi Affine membutuhkan dua
kunci, satu untuk perkalian sandi dan kelipatannya dan lainnya untuk penambahan
sandi Caesar.
Perihal program sandi Affine, anda akan menggunakan satu integer sebagai kunci.
################################################################
# Sandi Affine #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
#fungsi pada main() hampir sama dengan main() pada program transposisi
def main():
pesanSaya = """"A computer would deserve to be called intelligent if it could
deceive a human into believing that it was human." -Alan Turing"""
kunciSaya = 2023
#pada modeSaya silahkan ubah apakah enkripsi maupun dekripsi
modeSaya = 'enkripsi'
Page 75 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Page 76 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
sys.exit('Kunci A harus lebih besar daripada 0 dan kunci B harus ada diantara 0
dan %s.' % (len(SYMBOLS) - 1))
if kriptomath.gcd(kunciA, len(SYMBOLS)) != 1:
sys.exit('Kunci A (%s) dan simbol ukuran yang ditentukan (%s) secara realtif
bukanlah yang paling utama. Silahkan pilih kunci yang berbeda.' % (kunciA,
len(SYMBOLS)))
Page 77 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
symIndex = SYMBOLS.find(symbol)
teksawal += SYMBOLS[(symIndex - kunciB) * kunciUntukMembalikkanA %
len(SYMBOLS)]
else:
#tambahkan apabila terdapat simbol yang tidak terdekripsi
teksawal += symbol
return teksawal
def menentukanKunciAcak():
#disini akan dilakukan perulangan
#jika perulangan tidak pernah salah akan menjadi perulangan yang tiada akhir
#jika program melakukan perulangan terus menerus, karena perulangan tidak
menghasilkan nilai False
#untuk berhenti maka tekan Ctrl-C atau Ctrl-D
while True:
kunciA = random.randint(2, len(SYMBOLS))
kunciB = random.randint(2, len(SYMBOLS))
if kriptomath.gcd(kunciA, len(SYMBOLS)) == 1:
return kunciA * len(SYMBOLS) + kunciB
Kunci: 2023
Enkripsi :
fX<*h>}(rTH<Rh()?<?T]TH=T<rh<tT<*_))T?<ISrT))I~TSr<Ii<Ir<*h()?<?T*TI=T<
_<4(>_S<ISrh<tT)IT=IS~<r4_r<Ir<R_]<4(>_SEf<0X)_S<k(HIS~
Seluruh enkripsi teks telah disalin.
Page 78 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
7,125 adalah angka yang sama pada kunci yang paling memungkinkan dengan sandi
pesan transposisi, dan anda sudah benar-benar belajar bagaimana program komputer
untuk meretas angka dari kunci dengan brute-force. Yang berarti bahwasanya anda
dapat memadukan sandi affine hingga mencapai titik kelemahan sandi yang
Sandi Affine tidak seaman sandi sebelumnya . Sandi Transposisi memiliki lebih banyak
kunci, namun angka yang memungkinkan dibatasi oleh ukuran dari pesan. Untuk pesan
dengan ukuran 20 karakter, sandi transposisi hanya dapat memiliki hampir 18 kunci
(dari kunci 2 hingga 19). Sandi Affine juga dapat digunakan untuk mengenkripsi pesan
singkat dengan lebih aman daripada sandi sebelumnya, sandi Caesar. Karena jumlah
Page 79 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Perlu anda ketahui bahwa sandi Affine dibatasi untuk beberapa ribuan kunci. Ini
################################################################
# Meretas Sandi Affine #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
MODE_SENYAP = False
def main():
pesanSaya = """U&'<3dJ^Gjx'-
3^MS'Sj0jxuj'G3'%j'<mMMjS'g{GjMMg9j{G'g"'gG'<3^MS'Sj<jguj'm'P^dm{'g{G3'%j
Mgjug{9'GPmG'gG'-m0'P^dm{LU'5&Mm{'_^xg{9"""
pesanYangTeretas = retasAffine(pesanSaya)
if pesanYangTeretas != None:
#seluruh teks awal yang telah ditampilkan akan di salin ke dalam layar
print('Sedang menyalin pesan yang sudah diretas:')
print(pesanYangTeretas)
pyperclip.copy(pesanYangTeretas)
else:
print('Gagal melakukan peretasan terhadap enkripsi.')
def retasAffine(pesan):
print('Sedang mencoba meretas...')
Page 80 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
continue
if deteksibahasa.cekBahasa(pesanTerdekripsi):
#apabila pengguna(user) melakukan pengecekan
#terhadap kunci terdekripsi yang telah ditemukan
print()
print('Enkripsi dapat diretas:')
print('Kunci: %s' % (kunci))
print('Pesan Terdekripsi: ' + pesanTerdekripsi[:200])
print()
print('Tekan D untuk selesai, atau tekan Enter untuk melanjutkan peretasan:')
respon = input('> ')
if respon.strip().upper().startswith('D'):
return pesanTerdekripsi
return None
#jika program berjalan dengan sesuai juga dengan modul yang diimnport
#fungsi main dimulai dari sini
if __name__ == '__main__':
main()
Page 81 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Pada bagian ini tidak dijelaskan suatu teknik baru. Selama jumlah kemungkinan kunci
yang memungkinkan lebih kurang sejuta, hal ini akan memberikan waktu lebih lama
Page 82 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Transposisi dan sandi Affine memiliki ribuan kemungkinan kunci, namun sebuah
komputer juga dapat melakukan brute-force untuk mengatasi semuanya dengan mudah.
Anda nantinya akan membutuhkan sebuah sandi yang memiliki kemungkinan kunci
yang lebih banyak, dimana sebuah komputer tak lagi mampu melakukan brute-force
Sandi Sibtitusi sederhana secara efektif tak dapat dikalahkan oleh brute-force.
Meskipun komputer anda dapat menjalankan milyaran kunci setiap detik, hal ini akan
tetap membutuhkan jutaan tahun untuk dapat mencoba semua kunci yang sudah ada
dan dihasilkan.
sususan kata yang terdiri dari huruf acak untuk melakukan enkripsi terhadap huruf
tersebut. Untuk satu huruf digunakan hanya untuk sekali saja. Kunci tersebut akan
menghasilkan 26 huruf dari setiap bilangan acak yang ditukarkan. Sehingga menjadi
################################################################
# Sub Sandi Sederhana #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
HURUF = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
def main():
pesanSaya = 'If a man is offered a fact which goes against his instincts, he will
scrutinize it closely, and unless the evidence is overwhelming, he will refuse to believe
it. If, on the other hand, he is offered something which affords a reason for acting in
Page 83 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
accordance to his instincts, he will accept it even on the slightest evidence. The origin
of myths is explained in this way. -Bertrand Russell'
kunciSaya = 'LFWOAYUISVKMNXPBDCRJTQEGHZ'
#program ini akan melakukan enkripsi
modeSaya = 'enkripsi'
cekKebenaranKunci(kunciSaya)
if modeSaya == 'enkripsi':
ubah = pesanEnkripsi(kunciSaya, pesanSaya)
elif modeSaya == 'dekripsi':
ubah = pesanDekripsi(kunciSaya, pesanSaya)
print('Menggunakan kunci %s' % (kunciSaya))
print('Kunci %sed pesan:' % (modeSaya))
print(ubah)
pyperclip.copy(ubah)
print()
print('Pesan sedang disalin kedalam layar.')
Page 84 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
if daftarKunci != daftarHuruf:
sys.exit('Ditemukan sebuah error pada kunci atau simbol.')
#salah satu cara untuk memasukkan fungsi dan memanggilnya dua kali tanpa harus
membuat lagi
#pertama, hal ini tidak perlu di kode program lagi
#kedua, jika ada bug/kesalahan/celah dalam kode yang diduplikasi
#anda hanya perlu memperbaiki bug tersebut sekali pada dua tempat berbeda
#hal ini lebih baik daripada mengganti kode yang sudah diduplikat dengan satu fungsi
yang memiliki kode
def pesanEnkripsi(kunci, pesan):
return ubahPesan(kunci, pesan, 'enkripsi')
Page 85 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
def menentukanKunciAcak():
kunci = list(HURUF)
random.shuffle(kunci)
return ''.join(kunci)
if __name__ == '__main__':
main()
Apabila huruf yang digunakan dalam pesan asli adalah huruf kecil, hal ini akan menjadi
huruf kecil pada santi teks. Sandi Subtitusi sederhana tidak akan mengenkripsi program
Page 86 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
Berapa banyak kata yang anda ketahui untuk menirukan pembentukan kalimat yang
sama antar yang satu dan yang lainnya. Contohnya adalah Puppy hanya memiliki 3
jenis huruf berbeda saja, P, U dan Y hal ini hampir sama dengan Mommy dan Bobby
bahkan mungkin Lilly hanya diikuti oleh 3 huruf berbeda saja. Banyak contoh kata yang
berbeda yang pembentukannya hampir sama dan tak jarang anda temui bahwa dengan
mengganti satu huruf dalam kata akan memiliki pengartian yang berbeda pula.
Dalam teks awal dan katasandi akan selalu menghasilkan pola kata yang sama pula,
tidak masalah contohnya seperti apa pada kunci Subtitusi yang digunakan dalam
melakukan enkripsi.
################################################################
# Membuat Pola Kata #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
def membuatPolaKata(kata):
#menghasilkan sebuah string dari pola yang diberikan oleh kata
#contohnya adalah '0.1.2.3.4.1.2.3.5.6' dan selanjutnya
kata = kata.upper()
angkaSelanjutnya = 0
nomorHuruf = {}
polaKata = []
Page 87 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
angkaSelanjutnya += 1
polaKata.append(nomorHuruf[huruf])
return '.'.join(polaKata)
def main():
seluruhPola = {}
fo = open('dictionary.txt')
daftarKata = fo.read().split('/n')
fo.close()
if __name__ == '__main__':
main()
Output yang dihasilkan adalah kumpulan kata yang dimana hal tersebut merupakan
Page 88 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
2. Cari daftar kata berbahasa inggris mewakili dari setiap katasandi yang
memungkinkan pendekripsian
3. Buat satu pemetaan huruf sandi untuk setiap kata sandi menggunakan daftar kata
sandi yang dicalonkan. (pemetaan huruf sandi hanyalah kamus yang benar).
4.Potong setiap pemetaan huruf sandi menjadi satu permotongan pemetaan huruf sandi
################################################################
# Meretas Sub Sandi Sederhana #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
if not os.path.exists('polaKata.py'):
membuatpolakata.main()
import polaKata
HURUF = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
bukanHurufatauPolaSpasi = re.compile('[^A-Z\s]')
def main():
pesan = 'Sy l nlx sr pyyacao l ylwj eiswi upar lulsxrj isr sxrjsxwjr, ia esmm rwctjsxsza
sj wmpramh, lxo txmarr jia aqsoaxwa sr pqaceiamnsxu, ia esmm caytra jp famsaqa sj.
Sy, px jia pjiac ilxo, ia sr pyyacao rpnajisxu eiswi lyypcor l calrpx ypc lwjsxu sx
Page 89 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
lwwpcolxwa jp isr sxrjsxwjr, ia esmm lwwabj sj aqax px jia rmsuijarj aqsoaxwa. Jia
pcsusx py nhjir sr agbmlsxao sx jisr elh. -Facjclxo Ctrramm'
def menentukanPemetaanRuangKosongHurufSandi():
#mengembalikan nilai dictionary dalam bentuk huruf-huruf asli yang dipetakan
return {'A': [], 'B': [], 'C': [], 'D': [], 'E': [], 'F': [], 'G': [], 'H': [], 'I': [], 'J': [], 'K': [],
'L': [], 'M': [], 'N': [], 'O': [], 'P': [], 'Q': [], 'R': [], 'S': [], 'T': [], 'U': [], 'V': [], 'W': [],
'X': [], 'Y': [], 'Z': []}
#fungsi ini menambahkan kata pada candidate sebagai dekripsi potensial pada
cipherletters dalam pemetaan sandi huruf
pemetaanHuruf = copy.deepcopy(pemetaanHuruf)
for i in range(len(katasandi)):
Page 90 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
#daftar kosong berarti "setiap huruf memungkinkan". Pada hal ini hanya salin
map lainnya pada masukan
if petaA[huruf] == []:
PemetaanYangDipotong[huruf] = copy.deepcopy(petaB[huruf])
elif petaB[huruf] == []:
PemetaanYangDipotong[huruf] = copy.deepcopy(petaA[huruf])
else:
#jika huruf dalam mapA[letter] ada di dalam mapB[letter] tambahkan huruf
pada pemotongan pemetaan[huruf]
for hurufYangDipetakan in petaA[huruf]:
if hurufYangDipetakan in petaB[huruf]:
PemetaanYangDipotong[huruf].append(hurufYangDipetakan)
return PemetaanYangDipotong
def mengubahHurufyangsudahselesaiDipetakan(pemetaanHuruf):
#huruf asli dalam pemetaan dalam map hanya untuk per satu huruf saja yang
didekrip dan dapat di ubah dalam bentuk huruf lainnya
#sebagai contoh, jika 'A' dipetakan pada huruf yang potensial ['M','N'], dan 'B'
dipetakan pada ['N'], lalu anda tahu bahwa 'B' harus dipetakan pada 'N',
#lalu anda dapat mengubah 'N' dari daftar bahwa 'A' dapat dipetakan juga. Maka 'A'
dipetakan pada ['M'].
#sekarang peta 'A' hanya memiliki satu huruf, anda dapat mengubah nya ke 'M' dari
daftar kata untuk setiap huruf. (hal inilah mengapa ada perulangan dan pemakaian
kembali map
pemetaanHuruf = copy.deepcopy(pemetaanHuruf)
ulangiLagi = True
Page 91 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
while ulangiLagi:
#asumsikan dahulu bahwa hal ini tidak melakukan perulangan lagi
ulangiLagi = False
#huruf yang sudah diubah hanya akan menjadi daftar huruf besar saja dan hanya
memmungkinkan satu pemetaan dalam pemetaan huruf
hurufYangDipecah = []
for sandiHuruf in HURUF:
if len(pemetaanHuruf[sandiHuruf]) == 1:
hurufYangDipecah.append(pemetaanHuruf[sandiHuruf][0])
#jika satu huruf telah selesai, lalu hal ini tidak berarti dapat menjadi huruf potensial
untuk melakukan dekripsi pada chipertext yang berbeda
#jadi anda harus mengubah hal ini dari daftar yang lainnya
for sandiHuruf in HURUF:
for s in hurufYangDipecah:
if len(pemetaanHuruf[sandiHuruf]) != 1 and s in
pemetaanHuruf[sandiHuruf]:
pemetaanHuruf[sandiHuruf].remove(s)
if len(pemetaanHuruf[sandiHuruf]) == 1:
#jika sudah ada huruf yang selesai diproses maka,
#diulangi untuk huruf selanjutnya dan seterusnya
loopAgain = True
return pemetaanHuruf
def retasSubSederhana(pesan):
PetaYangDipotong = menentukanPemetaanRuangKosongHurufSandi()
daftarKataSandi = bukanHurufatauPolaSpasi.sub('', pesan.upper()).split()
for kataSandi in daftarKataSandi:
#membuat pemetaan cipherletter yang baru untuk setiap kata sandi teks
petaBaru = menentukanPemetaanRuangKosongHurufSandi()
Page 92 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
#peta yang dipotong adalah peta yang telah dipotong yang sebelumnya telah ada
PetaYangDipotong = memotongPemetaan(PetaYangDipotong, petaBaru)
def dekripsiDenganMenggunakanHurufSandiYangDipetakan(sanditeks,
pemetaanHuruf):
#mengembalikan nilai string pada ciphertext yang sudah didekrip dengan pemetaan
huruf
#setiap huruf hasil dekrip yang ambigu akan ditempatkan kembali dengan sebuah
"_" underscore
#buatlah dahulu sebuah kunci sub sederhana dari letterMapping dengan pemetaan
kunci = ['x'] * len(HURUF)
for sandiHuruf in HURUF:
if len(pemetaanHuruf[sandiHuruf]) == 1:
#jika hanya ada satu huruf saja, lalu tambahkan hal ini ke dalam kunci
indeksKunci = HURUF.find(pemetaanHuruf[sandiHuruf][0])
kunci[indeksKunci] = sandiHuruf
else:
sanditeks = sanditeks.replace(sandiHuruf.lower(), '_')
sanditeks = sanditeks.replace(sandiHuruf.upper(), '_')
kunci = ''.join(kunci)
#dengan kunci yang telah anda buat, lakukan dekripsi pesan asli
#pesanDekripsi harus sesuai dengan subsandisederhana
return subsandisederhana.pesanDekripsi(kunci, sanditeks)
if __name__ == '__main__':
main()
#program ini bekerja hanya jika spasi tidak di enkripsi
#memiliki 403,291,461,126,605,635,584,000,000 kemungkinan
Page 93 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
#kemungkinan melakukan bruteforce hampir beberapa ratus tahun dan hampir tidak
terpecahkan
#hal ini disebut dengan "polyalphabetic" oleh sandi Vigenre
#saat program sudah berjalan akan membutuhkan beberapa waktu untuk komputer
berjalan normal
#komputer anda baik-baik saja dan begitupun dengan program ini
#hanya saja membutuhkan waktu untuk tidak sekedar mengkompilasi
#namun juga menghasilkan program baru bernama polaKata.py
#data polaKata.py berasal dari dictionary.txt
Kata sandi lebih banyak berada pada sanditeks, lebih banyak pemetaan huruf sandi
pemetaan huruf sandi yang anda intersectkan bersama, berarti adanya potensi dekripsi
yang lebih banyak melakukan dekripsi huruf yang ada pada huruf sandi. Ini berarti
lebih besar kemungkinan pesan sandi teks, lebih banyak kemungkinan anda mampu
Page 94 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
RUANG KOSONG ?
Ya, pada teknik peretasan sebelumnya anda hanya melakukan peretasan terhadap kata
atau huruf saja namun tidak dengan ruang kosong (spasi) dan simbol khusus. Anda
mengenkripsi spasi, angka, dan karkater khusus sebagaimana sebuah kata, dan akan
membuat pesan terenkripsi dengan kuat namun tetap bukan tidak mungkin untuk di
retas. Bagaimanapun, semenjak spasi menjadi kata/huruf bagian dari sanditeks, anda
dapat menulis sebuah program untuk meretasnya dan mengubahnya menjadi spasi,
layaknya meretas sanditeks dengan normal. Jadi meskipun anda melakukan enkripsi
terhadap karakter spasi namun tetap dapat diretas dan tidak terlalu menawarkan
Meretas program pada akhirnya memanglah sangat rumit. Pemetaan sanditeks sebagai
alat utama untuk memodelkan huruf hingga memungkinkan huruf sanditeks dapat
yang sudah diubah berdasarkan daftar dari dekripsi pesan, Anda dapat mengubahnya
Kekuatan yang paling sederhana dari substitusi sederhana adalah luasnya jumlah
kemungkinan kunci. Namun jika hanya dengan membongkar dan merusaknya saja
tidaklah cukup dibandingkan dengan jumlah katasandi pada pada file dictionary untuk
Page 95 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
menebak huruf sandi dengan cara yang sederhana lalu memilih hal manakah yang dapat
mendekripsi huruf.
Page 96 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
SANDI VIGENRE
Vigenre cipher adalah juga sandi yang disebut sebagai polyalphabetic, dimana hal ini
dimaksudkan bahwa sandi ini membutuhkan ratusan tahun untuk meretasnya. Sandi
Vigenre memiliki sandi yang kuat bahkan lebih kuat dari sandi-sandi yang sebelumnya
yang memiliki kemungkinan kunci yang terlalu banyak hingga anda dapat melakukan
dengan sandi Vigenre yang tidak dapat dirusak/diretas hanya dengan pola kata yang
bekerja pada sandi Subtitusi sederhana. Hal ini dijelaskan pertama sekali oleh salah
seorang Kriptografer bernama Giovan Battista Bellaso lalu kemudian setelah sekian
lama dikembangkan oleh Blaise de Vigenre. Sandi ini tidak dapat dirusak/diretas
hingga akhirnya seorang ahli komputer melakukannya pada abad ke-19 yaitu Charles
Babbage. Dan sandi ini disebut le chiffreindchiffrable dalam bahasa Francis berarti
Sandi Vigenre hampir sama dengan sandi Caesar, perbedaannya adalah pada Sandi
Vigenre menggunakan kunci perkalian. Karena menggunakan lebih dari satu set
substitusi, maka hal ini disebut juga dengan sandi polyalphabetic substitution. Pada
sandi Caesar terdapat kunci dari 0 hingga 25. Pada sandi Vigenre menggunakan sandi
angka nomerik, kemungkinan anda akan menggunakan kunci huruf. Huruf A akan
digunakan pada kunci 0. Huruf B akan menggunakan kunci 1, dan begitulah hingga
Sandi Vigenre tidak memiliki celah pada dictionari untuk pola kata menggunakan
pesan rahasia selama ratusan tahun. Bayangkan saja bagaimana peretasan terhadap
sandi Vigenre dahulunya sangat susah hingga abad 19 yang dimana sandi ini akhirnya
dapat diretas, anda akan belajar salah satu teknik baru yaitu menganalisis frekuensi
Page 97 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
################################################################
# Vigenre Cipher ( Sandi Subtitusi Polyalphabetic ) #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
import pyperclip
HURUF = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
#pada fungsi main terdapat variabel pesan, kunci dan mode sebelum program
dijalankan
#pada mode anda dapat menetapkan apakah program akan melakukan enkripsi atau
dekripsi
def main():
pesanSaya = """Alan Mathison Turing was a British mathematician, logician,
cryptanalyst, and computer scientist. He was highly influential in the development of
computer science, providing a formalisation of the concepts of "algorithm" and
"computation" with the Turing machine. Turing is widely considered to be the father
of computer science and artificial intelligence. During World War II, Turing worked for
the Government Code and Cypher School (GCCS) at Bletchley Park, Britain's
codebreaking centre. For a time he was head of Hut 8, the section responsible for
German naval cryptanalysis. He devised a number of techniques for breaking German
ciphers, including the method of the bombe, an electromechanical machine that could
find settings for the Enigma machine. After the war he worked at the National Physical
Laboratory, where he created one of the first designs for a stored-program computer,
the ACE. In 1948 Turing joined Max Newman's Computing Laboratory at Manchester
University, where he assisted in the development of the Manchester computers and
became interested in mathematical biology. He wrote a paper on the chemical basis of
morphogenesis, and predicted oscillating chemical reactions such as the Belousov-
Zhabotinsky reaction, which were first observed in the 1960s. Turing's homosexuality
resulted in a criminal prosecution in 1952, when homosexual acts were still illegal in the
United Kingdom. He accepted treatment with female hormones (chemical castration)
as an alternative to prison. Turing died in 1954, just over two weeks before his 42nd
birthday, from cyanide poisoning. An inquest determined that his death was suicide; his
mother and some others believed his death was accidental. On 10 September 2009,
following an Internet campaign, British Prime Minister Gordon Brown made an official
public apology on behalf of the British government for "the appalling way he was
treated." As of May 2012 a private member's bill was before the House of Lords which
would grant Turing a statutory pardon if enacted."""
Page 98 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
kunciSaya = 'MATIUS'
#silahkan ubah untuk melakukan enkripsi atau dekripsi disini
modeSaya = 'enkripsi'
if modeSaya == 'enkripsi':
ubah = enkripsiPesan(kunciSaya, pesanSaya)
elif modeSaya == 'dekripsi':
ubah = dekripsiPesan(kunciSaya, pesanSaya)
kunciIndex = 0
kunci = kunci.upper()
Page 99 of 157
[KRIPTOGRAFI DAN PYTHON] Untuk Indonesia
nomor %= len(HURUF)
kunciIndex += 1
#ubah kunci yang akan dipakai selanjutnya
if kunciIndex == len(kunci):
kunciIndex = 0
else:
#symbol tidak berada pada HURUF, maka tambahkan hal tersebut dan
ubahkan
ubah.append(symbol)
return ''.join(ubah)
Enkripsied pesan :
Mltv Gsfhbaif Fukqhy ial i Vjutbab emtamgsfivquf, xozqwamn, vzshfagifqet, tvx uamicnwd svqyffilb. Bw ial
pcytlr qhxxuxvnaml bv nzq dxdydapfmhl af vwghgtxz muuegky, hdooqxazg t nijyaeqmsfihv ix fhx kifoeibm gr
"aeoijutau" ufp "chujmfamqif" iimp nzq Tnzcfs mtkbaze. Mclazg ba qapeeg wgzsblyjqd mw vw fhx nultek wz
uamicnwd svqyfoe tvx sdtbncuuae qhlqleqawzcx. Lojunz Eijxd Pil AU, Tnzcfs whzewp fhz nzq Ghdyjzmxvn
Uadx ihv Oyipyj Ecawid (SCVA) ul Nlxbwzxer Xujw, Bkqnsun'l kivqbkmucunz kyffrx. Nij m tbuy zq wta
bwmd hn Bmf 8, tam mwotbwh jqsiwhkubem zgd Gxzgsz ntdud orrxnszaegmae. Hx lynusxl u fgmuml gr
txkbfuqnmm xar uzyswigo Awdmtv wabhxzm, azcecxazg mpy eqtawx gr tam vgybx, ih wxevblgyevpufuctt
gsohbvy ltam kimxd yqhv eembcfss ywl lte Xvcyya fiwzunx. Izlqr mpy omr am qgdkxl ul fhx Vuluogif
Htylqwsx Ltjijmthzs, otekm bw orxinwp ogm ix fhx ncjet wmmasnl nij m smwlwp-pkwajmm vwghgtxz, nzq
AVM. Cf 1948 Fukqhy vobvyv Yaq Vyoyag'a Wgypnbcfs Ltjijmthzs sf Mtvwzqsmml Mziomlkutr, ebwde am
ukeilbyv un mpy vqvxtihyegb ix fhx Uufohxanwd chujmfeka ufp bxkueq igbyjqsmmx az mtbbwyamqwsx
bbwfgsy. Am qjatx i jsbek wh lte vpyeuctt vseil wz earipiyqnxack, mnw xlwpivbyv asvqfdmtbva utefqwsx
rxiwluoga mmoh ta nzq Bxtimeoo-Hbsnomqhkwy kmuufihv, qzuca eyjq fbzml ablmlnqd bv nzq 1960s.
Mclazg'l pieasxfosximg lweuebyv un t klayigif hdolmwmfihv cf 1952, ihxv bgyolmrmml tknk iekm mlule
qfdqgtt cf fhx Chafew Scfsdhu. Bw mcvmjlqd mzysfmxvn outa nyemlx pijyogmm (utefqwsx ctanjmtbwh) se
ag iflqrginahe mw jjushv. Nmdigo xaqd bv 1954, dmet hdyj fwh eywws umzgde aqm 42fp bbznzpar, nlgy
crihape iwckanbva. Sz igyowet wmnwdmbvyv fhtb bae dxinz ial aoaoiwm; bae mhbbwd agl mgye hbbwds
umfaqvxl bae dxinz ial iwuudxvnsx. Og 10 Ayhfefjyj 2009, roetiounz ih Aztxzhwf ctujsugg, Jlafilp Jjumx
Ucfusmml Yarwwh Tdopv gspe tv ixrivqud buutcu mphtiyk og jyzmly wz lte Uzclusa oinqrguyff fhz "nzq
aixudxigo qsk hx euk frxinwp." Al wz Emy 2012 t xlahamm gwybxz'm tule euk neywlw fhx Pimee hn Fgddl
ebaoh pwodp gkihl Fukqhy m sminmfokg jsddhv cx qntknwp..
ANALISIS FREKUENSI
Pada koin anda dapat melihat 2 bagian berbeda, saat anda membalikkan sebuah koin,
anda hanya melihat kepala (atas) dan ekor (bawah). Frekuensi juga adalah banyaknya
jumlah kemungkinan yang diberikan apabila 2 mata koin menghasilkan kepala atau
Ada 26 huruf dalam alphabet bahasa inggris dan Indonesia, namun setiap huruf tidak
memiliki bentuk yang sama dalam teks bahasa Inggris maupun Indonesia. Beberapa
huruf digunakan lebih sering dibandingkan huruf lainnya. Sebagai contoh anda akan
menggunakan bahasa Inggris pada program kali ini agar sesuai dengan dictionary yang
saya miliki, jika anda memiliki dictionary atau kamus untuk tata bahasa Indonesia
silahkan ubah dan tetap perhatikan letak perbedaannya. Baiklah coba anda lihat tulisan
dengan kemungkinan frekuensi lebih banyak. Namun huruf J, X, Q dan Z cukup jarang
ditemukan dalam teks bahasa inggris. Anda akan menggunakan fakta ini untuk
membantu dalam meretas pesan terenkripsi sandi Vigenre. Teknik ini disebut sebagai
analisis frekuensi.
Menghitung huruf dan berapa frekuensi yang muncul diantara teksaawal dan tekssandi
Karena sandi Vigenre memiliki kunci perkalian sandi Caesar yang digunakan pada
pesan adalah sama, anda dapat menggunakan analisis frekuensi untuk melakukan
peretasan terhadap setiap sub kunci satu untuk satu kemungkinan dalam frekuensi
huruf untuk mencoba dekripsi. Anda tidak akan mencoba dengan memerhatikan setiap
teks berbahasa inggris, karena setiap kata dalam teks sandi akan dienkripsi dengan sub
kunci yang dikalilipatkan. Dan anda tidak membutuhkan kumpulan kata dengan
lengkap, anda bisa menganalisa frekuensi huruf pada setiap sub kunci untuk
mendekripsi teks.
################################################################
# Analisis Frekuensi #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
#pada fungsi ini akan mengambil parameter string dan menghasilkan dictionary/kamus
#dimana hal ini dapat menghitung seberapa sering setiap huruf muncul dalam string
def menghitungJumlahHuruf(pesan):
#menghasilkan sebuah daftar kamus dengan kunci dari setiap huruf dan nilai
#dimana hal ini dihitung berapa kali hal tersebut muncul dalam sebuah parameter
pesan
hitungHuruf = {'A': 0, 'B': 0, 'C': 0, 'D': 0, 'E': 0, 'F': 0, 'G': 0, 'H': 0, 'I': 0, 'J': 0, 'K':
0, 'L': 0, 'M': 0, 'N': 0, 'O': 0, 'P': 0, 'Q': 0, 'R': 0, 'S': 0, 'T': 0, 'U': 0, 'V': 0, 'W': 0, 'X':
0, 'Y': 0, 'Z': 0}
return hitungHuruf
def menentukanNilaipadaDasar(x):
return x[0]
#pada fungsi ini akan mengambil parameter string dan menghasilkan string dari 26
huruf
#diubah dari yang paling sering muncul menjadi parameter yang paling terakhir muncul
def menentukanJumlahPerintah(pesan):
#mengembalikan sebuah nilai dengan huruf alpabet yang disusun dengan
#mengatur frekuensi huruf yang muncul paling sering dalam parameter pesan
#pertama, tentukan dictionary/kamus untuk setiap kata dan frekuensi yang dihitung
hurufpadaFrekuensi = menghitungJumlahHuruf(pesan)
#kedua, buatlah sebuah dictionary/kamus dimana setiap frekuensi yang dihitung
#pada setiap huruf dengan frekuensinya
frekuensipadaHuruf = {}
for huruf in HURUF:
if hurufpadaFrekuensi[huruf] not in frekuensipadaHuruf:
frekuensipadaHuruf[hurufpadaFrekuensi[huruf]] = [huruf]
else:
frekuensipadaHuruf[hurufpadaFrekuensi[huruf]].append(huruf)
return ''.join(penugasanFrekuensi)
#pada fungsi ini akan mengambil parameter string dan menghasilkan integer/bilangan
bulat
#dari 0 hingga 12 dari string yang paling cocok nilainya
def JumlahfrekuensiYangCocok(pesan):
#menampilkan jumlah kata yang sesuai dengan pesan
jumlahyangCocok = 0
#cari berapa jumlah yang sesuai dengan kata terbanyak yang ada disana
for hurufYangUmum in ETAOIN[:6]:
if hurufYangUmum in penugasanFrekuensi[:6]:
jumlahyangCocok += 1
#cari berapa jumlah yang sesuai dengan kata terbanyak yang ada disana
for hurufYangtidakUmum in ETAOIN[-6:]:
if hurufYangtidakUmum in freqOrder[-6:]:
jumlahyangCocok += 1
return jumlahyangCocok
Output dari program ini tidak ditampilkan namun akan digunakan/diimport oleh
program lain untuk membantu dalam peretasan sandi Vigenre.
Ada beberapa hal dimana anda dapat mencoba meretas sandi Vigenre, hal pertama
semua kunci yang memungkinkan sebagai kunci Vigenre. Dan yang kedua dengan
kunci acak yang telah anda miliki. Awalnya dicatat dan digunakan oleh seorang
Hal yang perlu anda ingat adalah bahwa dalam kunci Vigenre jika kunci yang mudah
anda ingat tersusun dari kata/huruf sederhana atau mudah untuk ditebak hal tersebut
dengan kamus.
Jika kunci Vigenre dalam kata bahasa inggris sangatlah mudah untuk diingat. Namun
jangan pernah menggunakan kata bahasa inggris untuk kunci enkripsi. Hal ini akan
terhadap kamus.
Serangan dictionary attack dimaksud adalah teknik brute-force dimana seorang hacker
mencoba untuk melakukan dekripsi pada sandi teks menggunakan kata dari file
inggris, dan membutuhkan waktu 5 menit untuk komputer menjalankan seluruh proses
#############################################################
# Meretas Sandi Kamus Vigenere #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
#############################################################
def main():
sanditeks = """Tzx isnz eccjxkg nfq lol mys bbqq I lxcz."""
pesanYangTeretas = meretasVigenere(sanditeks)
if pesanYangTeretas != None:
print('Menyalin pesan ke layar tampilan:')
print(pesanYangTeretas)
pyperclip.copy(pesanYangTeretas)
else:
print('Gagal meretas enkripsi')
def meretasVigenere(sanditeks):
fo = open('dictionary.txt')
kata_kata = fo.readlines()
fo.close()
if respon.upper().startswith('D'):
return pesanTerdekripsi
if __name__ == '__main__':
main()
Seperti halnya anda ketahui bahwa Charles Babbage dapat meretas sandi Vigenre,
bahwa metode yang digunakan beliau diungkapkan pada abad 20 oleh matimatikawan
Friedrich Kasiski.
subkunci.
beberapa kaliamat akan dipisah. Hal-hal yang dianggap penting baik dalam halnya
2. Mencari faktor dari jarak, yaitu dimana jarak antara satu dan dua angka yang
#############################################################
# Meretas Sandi Kamus Vigenere #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
#############################################################
HURUF = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
FREKUENSI_HURUF_TERBESAR = 4
PANJANG_KUNCI_MAKSIMAL = 16
POLA_YANG_BUKAN_HURUF = re.compile('[^A-Z]')
def main():
sanditeks = """Mltv Gsfhbaif Fukqhy ial i Vjutbab emtamgsfivquf, xozqwamn,
vzshfagifqet, tvx uamicnwd svqyffilb. Bw ial pcytlr qhxxuxvnaml bv nzq dxdydapfmhl af
vwghgtxz muuegky, hdooqxazg t nijyaeqmsfihv ix fhx kifoeibm gr "aeoijutau" ufp
"chujmfamqif" iimp nzq Tnzcfs mtkbaze. Mclazg ba qapeeg wgzsblyjqd mw vw fhx
nultek wz uamicnwd svqyfoe tvx sdtbncuuae qhlqleqawzcx. Lojunz Eijxd Pil AU, Tnzcfs
whzewp fhz nzq Ghdyjzmxvn Uadx ihv Oyipyj Ecawid (SCVA) ul Nlxbwzxer Xujw,
Bkqnsun'l kivqbkmucunz kyffrx. Nij m tbuy zq wta bwmd hn Bmf 8, tam mwotbwh
jqsiwhkubem zgd Gxzgsz ntdud orrxnszaegmae. Hx lynusxl u fgmuml gr txkbfuqnmm
xar uzyswigo Awdmtv wabhxzm, azcecxazg mpy eqtawx gr tam vgybx, ih
wxevblgyevpufuctt gsohbvy ltam kimxd yqhv eembcfss ywl lte Xvcyya fiwzunx. Izlqr
mpy omr am qgdkxl ul fhx Vuluogif Htylqwsx Ltjijmthzs, otekm bw orxinwp ogm ix fhx
ncjet wmmasnl nij m smwlwp-pkwajmm vwghgtxz, nzq AVM. Cf 1948 Fukqhy vobvyv
Yaq Vyoyag'a Wgypnbcfs Ltjijmthzs sf Mtvwzqsmml Mziomlkutr, ebwde am ukeilbyv
un mpy vqvxtihyegb ix fhx Uufohxanwd chujmfeka ufp bxkueq igbyjqsmmx az
mtbbwyamqwsx bbwfgsy. Am qjatx i jsbek wh lte vpyeuctt vseil wz earipiyqnxack, mnw
xlwpivbyv asvqfdmtbva utefqwsx rxiwluoga mmoh ta nzq Bxtimeoo-Hbsnomqhkwy
kmuufihv, qzuca eyjq fbzml ablmlnqd bv nzq 1960s. Mclazg'l pieasxfosximg lweuebyv
un t klayigif hdolmwmfihv cf 1952, ihxv bgyolmrmml tknk iekm mlule qfdqgtt cf fhx
Chafew Scfsdhu. Bw mcvmjlqd mzysfmxvn outa nyemlx pijyogmm (utefqwsx
ctanjmtbwh) se ag iflqrginahe mw jjushv. Nmdigo xaqd bv 1954, dmet hdyj fwh eywws
umzgde aqm 42fp bbznzpar, nlgy crihape iwckanbva. Sz igyowet wmnwdmbvyv fhtb
bae dxinz ial aoaoiwm; bae mhbbwd agl mgye hbbwds umfaqvxl bae dxinz ial
iwuudxvnsx. Og 10 Ayhfefjyj 2009, roetiounz ih Aztxzhwf ctujsugg, Jlafilp Jjumx
Ucfusmml Yarwwh Tdopv gspe tv ixrivqud buutcu mphtiyk og jyzmly wz lte Uzclusa
oinqrguyff fhz "nzq aixudxigo qsk hx euk frxinwp." Al wz Emy 2012 t xlahamm
gwybxz'm tule euk neywlw fhx Pimee hn Fgddl ebaoh pwodp gkihl Fukqhy m
sminmfokg jsddhv cx qntknwp."""
pesanYangTeretas = meretasVigenere(sanditeks)
if pesanYangTeretas != None:
print('menyalin pesan yang sudah teretas ke dalam layar:')
print(pesanYangTeretas)
pyperclip.copy(pesanYangTeretas)
else:
print('Gagal melakukan peretasan terhadap enkripsi.')
def cariRuangKosongberangkaiBerulang(pesan):
#akan mencoba pesan dan menetapkan 3 hingga 5 huruf untuk dirangkai dan
diulang
#menghasilkan kunci dari rangkaian dan nilai pada daftar kosong antara jumlah
huruf yang diulang
#gunakan jenis huruf yang umum untuk mengubah pesan dan non pesan dari pesan
pesan = POLA_YANG_BUKAN_HURUF.sub('', pesan.upper())
def menentukanfaktorYangberguna(angka):
#menghasilkan daftar factor yang berguna dan menggunakannya
#tidak kurang dari MAX_KEY_LENGTH + 1. Sebagai contohnya adalah (144)
# menghasilkan [2, 72, 3, 48, 4, 36, 6, 24, 8, 18, 9, 16, 12]
#ketika menemukan factor, anda hanya harus mencek nilai bilangan bulat yang
mencapai
MAX_KEY_LENGTH.
for i in range(2, PANJANG_KUNCI_MAKSIMAL + 1):
if angka % i == 0:
faktor.append(i)
faktor.append(int(angka / i))
if 1 in faktor:
faktor.remove(1)
return list(set(faktor))
def menetapkanSatudasarIndex(x):
return x[1]
def menentukanFaktorYangPalingUmum(faktorRangkaian):
#hitung berapa banyak perulangan yang ditetapkan sebagai factor yang ditemukan
pada rangkaian faktor
menghitungFaktor = {} # key is a factor, value is how often if occurs
#rangkaian factor adalah bentuk-bentuk rangkaian yang memiliki daftar nilai ruang
kosong
#pada rangkaian factor memiliki nilai seperti: {'GFD': [2, 3, 4, 6, 9, 12,
# 18, 23, 36, 46, 69, 92, 138, 207],
for rangkaian in faktorRangkaian:
daftarFaktor = faktorRangkaian[rangkaian]
for faktor in daftarFaktor:
if faktor not in menghitungFaktor:
menghitungFaktor[faktor] = 0
menghitungFaktor[faktor] += 1
return menghitungdenganFaktor
def pengujianKasiski(sanditeks):
#menetapkan rangkaian dari 3 hingga 5 huruf yang didapatkan dari perulangan yang
berkali-kali di dalam pesan teks,
#perulangan jarak rangkaian memiliki nilai seperti
# {'EXG': [192], 'NAF': [339, 972, 633], ... }
melakukanUrutanRuangkosong = cariRuangKosongberangkaiBerulang(sanditeks)
#menentukan penetapan factor yang paling umum sebagai dekripsi dari factor
rangkaian
faktorRangkaian = {}
for rangkaian in melakukanUrutanRuangkosong:
faktorRangkaian[rangkaian] = []
for jarak in melakukanUrutanRuangkosong[rangkaian]:
faktorRangkaian[rangkaian].extend(menentukanfaktorYangberguna(jarak))
#menentukan penetapan factor yang paling umum sebagai dekripsi dari factor yang
dihitung
menghitungdenganFaktor = menentukanFaktorYangPalingUmum(faktorRangkaian)
#ekstrak factor yang dihitung dari factor yang dihitung dan masukkan seluruhnya
dalam panjang kunci
#yang menyerupai atau sama dengan begitu akan lebih mudah untuk digunakan
nantinya
seluruhKunciyangMemungkinkan = []
for duaBilangan in menghitungdenganFaktor:
seluruhKunciyangMemungkinkan.append(duaBilangan[0])
return seluruhKunciyangMemungkinkan
#menggunakan ekspressi yang umum untuk menentukan jenis huruf dan bukan
huruf pada pesan
pesan = POLA_YANG_BUKAN_HURUF.sub('', pesan)
i=n-1
huruf = []
#nilai frekuensi adalah daftar dari penyatuan dua hal seperti huruf, bahasa,
frekuensi dan nilai yang cocok
# daftar yang telah diurutkan dengan kesamaan nilai contohnya dari yang paling
banyak kesamaan
#silahkan cek dari nilai frekuensi kecocokan bahasa pada program analisis
frekuensi
frekuensiNilai = []
for kunciYangMemungkinkan in HURUF:
teksTerdekripsi = sandivigenere.dekripsiPesan(kunciYangMemungkinkan,
hurufKeN)
kunciDanFrekuensiYangcocok = (kunciYangMemungkinkan,
analisisfrekuensi.JumlahfrekuensiYangCocok(teksTerdekripsi))
frekuensiNilai.append(kunciDanFrekuensiYangcocok)
#urutkan dengan kecocokan nilai
frekuensiNilai.sort(key=menetapkanSatudasarIndex, reverse=True)
seluruhNilaiFrekuensi.append(frekuensiNilai[:FREKUENSI_HURUF_TERBESAR])
if not MODE_SENYAP:
for i in range(len(seluruhNilaiFrekuensi)):
#gunakan i+1 untuk huruf yang pertama disebut dengan huruf ke 0
#coba dengan setiap kombinasi dari yang paling cocok dengan huruf pada setiap
posisi pada kunci
for terindeks in itertools.product(range(FREKUENSI_HURUF_TERBESAR),
repeat=kunciYangpalingmemungkinkan):
#membuat kunci yang memungkinkan dari huruf dalam nilai frekuensi
keseluruhan
kunciYangMemungkinkan = ''
for i in range(kunciYangpalingmemungkinkan):
kunciYangMemungkinkan += seluruhNilaiFrekuensi[i][terindeks[i]][0]
if not MODE_SENYAP:
print('Mencoba dengan kunci: %s' % (kunciYangMemungkinkan))
pesanTerdekripsi = sandivigenere.dekripsiPesan(kunciYangMemungkinkan,
sanditeksKapital)
if deteksibahasa.cekBahasa(pesanTerdekripsi):
#menentukan teks awal yang dapat diretas menjadi bentuk asli
bentukAsli = []
for i in range(len(sanditeks)):
if sanditeks[i].isupper():
bentukAsli.append(pesanTerdekripsi[i].upper())
else:
bentukAsli.append(pesanTerdekripsi[i].lower())
pesanTerdekripsi = ''.join(bentukAsli)
if respon.strip().upper().startswith('D'):
return pesanTerdekripsi
#tidak menemukan bahasa dengan dekripsi yang ditentukan dan menghasilkan nilai
kembali 0 (none)
return None
def meretasVigenere(sanditeks):
#lakukan pengujian Kasiski untuk menggambarkan bagaimana panjang sandi teks
enkripsi dari kunci
seluruhKunciyangMemungkinkan = pengujianKasiski(sanditeks)
if not MODE_SENYAP:
panjangKunciString = ''
for panjangKunci in seluruhKunciyangMemungkinkan:
panjangKunciString += '%s ' % (panjangKunci)
print('Pengujian Kasiski menghasilkan apa yang disebut dengan panjang kunci
yang menyerupai tersebut : ' + panjangKunciString + '\n')
#jika tidak ditemukan panjang kunci dengan pengujian Kasiski maka lakukan brute-
force pada panjang kunci
if pesanYangTeretas == None:
if not MODE_SENYAP:
print('Tidak dapat meretas pesan dengan panjang kunci. Panjang kunci brute-
force...')
for panjangKunci in range(1, PANJANG_KUNCI_MAKSIMAL + 1):
#tidak memerlukan pengecekan kembali pada pengujian Kasiski
if panjangKunci not in seluruhKunciyangMemungkinkan:
if not MODE_SENYAP:
#jika program sudah berjalan dengan semestinya dan seluruh program yang diimport
berjalan dengan lancar
if __name__ == '__main__':
main()
Kasiski Examination results say the most likely key lengths are: 3 2 6 4 12 8 9 16 5 11 10 15 7 14 13
Ada satu sandi yang hampir tidak mungkin untuk di pecah/dirusak, tidak peduli
seberapa tangguh komputermu, berapa lama waktu yang kamu habiskan untuk
memecahnya, atau seberapa pintarnya kamu menjadi seorang peretas. Anda tidak harus
menulis program baru untuk menggunakannya di lain waktu. Program Vigenere dapat
diterapkan pada sandi ini tanpa harus membuat perubahan yang berarti. Namun sandi
ini tidak nyaman apabila penggunaannya bersifat monoton/tetap hal ini sering
1. Panjang kunci memiliki panjang yang sama dengan pesan yang terinkripsi.
3. Kunci yang digunakan hanya sekali saja, dan tidak akan pernah digunakan kembali
Dengan mengikuti aturan ini, anda mengenkripsi pesan yang tidak memiliki celah
untuk setiap serangan yang digunakan kriptanalis. Bahkan dengan kata harafiahnya jika
komputer anda memiliki perhitungan yang tidak ada habisnya sandi tetap tidak akan
dapat dirusak.
Kunci pada OTP(One-Time Pad) disebut Pad karena menampilkan pesan pada pada
kertas. Bagian atas dari kertas akan diambil setelah itu akan anda gunakan
Mengapa OTP tidak terpecahkan, coba fikirkan tentang bagaimana halnya sandi
Vigenre memiliki celah dan digunakan untuk merusak. Program Sandi Vigenre untuk
dapat di retas bekerja dengan menggunakan analisis frekuensi. Namun jika kunci
memiliki panjang yang sama dengan pesan, maka setiap kemungkinan sandi teks huruf
Contohnya jika anda ingin mengenkripsi teks awal pada OTP 'matiuscelciussinaga'(
kemungkinan kunci, bahkan jika anda melakukan brute-force hal tersebut tidak akan
bekerja karena terlalu banyak perhitungan yang dilakukan komputer. Apakah anda
manakah kunci yang asli. Namun pada dasarnya ada kemungkinan dari teks awal pesan
yang memiliki panjang 19 huruf dapat dijadikan sebagai pesan awal yang asli. Tapi
tidak berarti bahwa jikapun anda mampu melakukan dekripsi terhadap pesan awal
Jika anda menggunakan OTP secara bersamaan untuk mengenkripsi dua pesan
berbeda, maka anda telah mengetahui kelemahan enkripsi. OTP dan TTD pada
Jika hanya karena sebuah kunci mendekripsi sebuah OTP teks sandi sehingga dapat
dibaca bukan berarti hal tersebut adalah kunci yang benar. Bagaimanapun jika anda
menggunakan kunci yang sama pada pesan yang berbeda maka seorang akan
mengetahui jika sebuah kunci mendekripsi pesan awal agar dapat dibaca tetapi untuk
mendekripsi dengan kunci yang sama pada pesan kedua pada pesan sampah yang acak
tidaklah mengharuskan kunci asli. Pada dasarnya seperti satu kunci yang akan
Jika seorang peretas hanya memiliki satu kunci dari dua pesan dan maka hal ini tetap
dalam kondisi enkripsi, ketahuilah bahwasanya semua pesan yang terenkripsi akan
ditangkap oleh peretas lainnya dan kemungkinan juga pemerintah dan tak usah takut
Sederhananya, OTP sama halnya dengan sandi Vigenre dengan kunci yang sama
panjangnya dengan pesan dimana hanya digunakan sekali. Selama kedua hal ini anda
ikuti, secara harafiah OTP tidak mungkin untuk dipecahkan . Bagaimanapun, hal ini
merepotkan dalam penggunaan OTP dimana hal ini tidak umum digunakan kecuali hal
yang sangat rahasia. Biasannya semakin besar daftar OTP yang diubah dan dibagikan
pada orang yang dimaksud, dengan waktu yang khusus. Dalam hal ini, jika anda
menerima pesan berasal manapun khususnya pada 31 Oktober, anda dapat langsung
melihat daftar OTP yang dimaksud. Namun jangan sampai jatuh pada orang yang
salah.
Pada awalnya seluruh sandi yang anda gunakan diatas membutuhkan waktu untuk
dapat diretas bahkan hampir tidak mungkin namun setelah beberapa waktu bahkan
ratusan tahun berlalu dan penelitian berlanjut, berkembang menjadikan hal tersebut
menjadi mungkin, pesan tersebut kini dapat di pecah, didekripsi. Namun penelitian dan
perkembangan sandi tetap berjalan untuk mencapai apa yang disebut dengan keamanan
maksimal, pengujian demi pengujian yang menghasilkan inovasi-inovasi dari ide kreatif
yang terkait.
Sebuah angka primer memiliki lebih dari 1 faktor dan setidaknya dua faktor. Angka 1
dan 21 adalah faktor dari 21. Angka 1 dan 12 adalah faktor dari 12. Hal ini dikarenakan
1 dari setiap angka berarti selalu menghasilkan nilai yang sama. Namun jika tidak ada
faktor lain pada angka tersebut, maka angka tersebut adalah primer.
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,
101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191,
193, 197,199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281 dan
selanjutnya
10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,
search engine perusahaan Google berasal dari kesalahan abjad googol, namun
Satu milyar milyar milyar googols memiliki lebih dari 27 angka nol daripada googol
:10,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
Namun dalam angka lebih sederhana. Tipe angka primer yang digunakan pada
112,829,754,900,439,506,175,719,191,782,841,802,172,556,768,253,593,054,977,186,2355,8
4,979,780,304,652,423,405,148,425,447,063,090,165,759,070,742,102,132,335,103,295,947,0
00,718,386,333,756,395,799,633,478,227,612,244,071,875,721,006,813,307,628,061,280,861,
610,153,485,352,017,238,548,269,452,852,733,818,231,045,171,038,838,387,845,888,589,41
1,762,622,041,204,120,706,150,518,465,720,862,068,595,814,264,819
Saya tidak yakin bahwa anda akan membaca angka tersebut sampai habis namun
GABUNGAN ANGKA
Bilangan bulat bukanlah angka primer yang disebut gabungan angka, hanya karena
tergabung pada dua faktor yang saling bersebelahan antara 1 angka dan lainnya. Angka
gabungan dapat dikatakan begitu apabila angka tersebut gabungan dari angka primer
yang dikalikan bersama, seperti halnya 1.386 adalah gabungan dari angka primer dari 2
x 3 x 3 x 7 x 11.
1. Angka primer adalah bilangan bulat yang lebih besar dari 1 dan hanya memiliki 1
3. Pada angka primer tidak memiliki batas maka hal tersebut menjadikan bahwasanya
4. Perkalian dua angka primer akan menghasilkan dua angka primer yang hanya
memiliki dua pasang faktor yang sama, 1 dan dirinya sendiri, dan dua angka primer
yang dikalikan. Sebagai contoh, 3 dan 7 adalah angka primer, faktornya adalah 21
Sieve dari Eratosthenes (melafalkannya era, taws, thuh, knees) adalah sebuah
kondisi angka dapat dibagi dengan rentang akar kuadrat dari 2. Tetapi bagaimana bila
tersebut adalah primer atau tidak akan membutuhkan waktu yang lumayan lama. Dan
jikapun angka dalam jumlah ratusan maka akan membutuhkan waktu hingga triluyan
tahun untuk mengetahui bahwa angka tersebut adalah primer atau bukan.
################################################################
# Angka Primer Sieve #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
import math
def adalahPrimer(angka):
#menghasilkan True apabila angka adalah angka primer
#contohnya adalah bahwa angka dibawah 2 adalah bukan primer
#menghasilkan True apabila angka yang dimaksud angka primer, vice versa
if angka < 2:
return False
#jika sebuah angka dapat dibagi dua dengan setiap angka hingga
#perpangkatan dua akar dari angka tersebut
for i in range(2, int(math.sqrt(nomor)) + 1):
if angka % i == 0:
return False
return True
def SievePrimer(ukuranSieve):
#menghasilkan sebuah daftar angka primer yang dapat dihitung
#menggunakan algoritma Sieve dari Eratosthenes
sieve = [True] * ukuranSieve
#angka nol dan satu (dibawah dua) bukanlah angka primer
sieve[0] = False
sieve[1] = False
pointer += i
#mengkompilasi daftar angka primer
primes = []
for i in range(ukuranSieve):
if sieve[i] == True:
primes.append(i)
return primes
RABIN MILLER
################################################################
# Rabin Miller #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
import random
def rabinMiller(angka):
#mengembalikan nilai Benar jika num adalah angka primer
s = angka - 1
t=0
while s % 2 == 0:
#s tetap setengah hingga menghasilkan nilai genap
#gunakan t untuk menghitung berapa banyak jumlah setengah dari s
s = s // 2
t += 1
def adalahPrimer(angka):
#menghasilkan True jika num adalah angka primer
#fungsi ini lberjalan lebih cepat
#angka primer melakukan cek sebelum memanggil rabinMiller()
if (angka < 2) :
return False
if angka in primerDasar:
return True
#melihat apakah setiap angka kecil primer dapat dibagi dengan angka
for prime in primerDasar:
if (angka % prime == 0):
return False
#jika seluruh kemungkinan gagal, panggil rabinMiller() untuk menentukan jika num
adalah angka primer
return rabinMiller(angka)
Angka primer memiliki sesuatu yang khusus dalam matematika. Seperti yang anda
ketahui angka primer dapat digunakan sebagai inti dari sandi, biasanya digunakan pada
teknik enkripsi software profesional. Jika saya mencoba untuk mendefinisikan secara
sederhana yaitu sebuah angka dimana terdiri dari satu dan faktor dari dirinya sendiri.
Namun untuk membedakan setiap angka adalah primer atau bukan dan juga
kumpulannya akan sangat membutuhkan waktu yang tidak sedikit meski sudah dengan
Saat ini, kriptografi yang kuat dan sulit untuk di retas banyak digunakan sebagai
perlindungan bisnis dan pengusaha online dibanyak jutaan toko online yang
menjalankan bisnisnya setiap waktu. Kriptografi menjadi suatu dasar yang kuat dimana
menerus tiada hentinya. Pada tahun 1990 hal seperti berbagi pengetahuan seperti yang
dilakukan oleh buku ini adalah hal yang illegal dan dapat membahayakan diri anda
sendiri, maka beruntunglah jika saat ini semua telah berubah dimana anda dapat
menikmati berbagai ilmu secara bebas namun tetap bertanggung jawab pada apa dan
Untuk detail sejarah lengkap Kriptografi dapat saya referensikan pada buku Steven
Levys. Crypto : How the Code Rebels Beat the Government, Saving Privacy in the
Digital Age.
Rasa takut dan keraguan adalah ilusi mengapa anda tak lagi berkembang diciptakan
dari kelompok orang-orang yang ahli akan bidangnya membuat ancaman dan keamanan
anda terganggu untuk merahasiakan apapun dan bagaimana anda meraih sesuatu
namun bayang-bayang tentang ketakutan semakin terungkap hingga ragu tak lagi
Pernahkah anda berfikir tentang bagaimana jika anda berbagi suatu pesan(data) yang
telah terenkripsi pada orang yang anda tidak pernah anda temui atau kenal sebelumnya
Katakanlah seseorang yang berada pada sudut lain bumi ini ingin melakukan
kontak(komunikasi) dengan anda. Tetapi anda tidak ingin orang lain tahu
karena seiring perkembangan zaman jaringan data yang digunakanpun dicurigai adanya
akses dari pemerintah atau pihak yang ingin mengambil keuntungan. Mungkin salah
satu caranya berbagi kunci rahasia terhadap file yang terenkripsi yang sebelumnya
disepakati dahulu. Hal itupun tidak boleh dilakukan dalam pesan yang melibatkan
jaringan data yang dicurigai, karena apa ? Hal itu sama saja memberikan akses terhadap
orang lain dengan membaca kunci tersebut sebelumnya. Ini akan menjadi masalah baru
apabila orang yang anda tuju berada pada jarak yang tidak memungkinkan untuk
bertemu.
Masalah seperti diatas dapat diatasi dengan menggunakan Kunci Publik Kriptografi
dimana sandi ini memiliki dua kunci, satu digunakan sebagai enkripsi dan satu lagi
digunakan sebagai dekripsi. Kunci sandi yang dapat digunakan untuk enkripsi dan
dekripsi disebut Asymmetric, Lalu dimana sandi digunakan untuk mengirim kunci yang
Yang perlu anda ketahui adalah sebuah pesan yang telah terenkripsi dengan satu kunci
hanya dapat didekripsi dengan kunci yang lain. Jadi apabila seseorang mendapatkan
kunci enkripsi belum tentu mereka dapat membaca pesan yang telah terenkripsi karena
kunci enkripsi hanya dapat mengenkripsi namun tidak dapat mendekrip pesan yang
telah terenkripsi.
Jadi jika anda memiliki dua kunci ini, anda memanggil satu kunci publik dan satu kunci
private. Kunci publik adalah yang telah disebarkan/dipublikasikan. Namun kunci private
tetaplah menyimpan rahasia. Jika Andin ingin mengirim sebuah pesan kepada Bob
karena Andin sebelumnya telah memiliki/mengetahui kunci publik Baim dimana hal itu
dimanfaatkan sebagai bentuk enkripsi dalam komunikasi rahasia antara Andin dan Bob.
Orang lain boleh saja mengetahui kunci publik Bob namun ketika Bob menerima pesan
ia akan menggunakan kunci private untuk mendekripnya, untuk membalas Andin, Bob
harus mengetahui kunci publiknya dan mengenkripsi balasan tersebut maka Andin
Untuk kembali pada contoh dari komunikasi dengan seseorang dalam dunia maya tidak
masalah apabila seseorang mendapatkan kunci publik milikmu bahkan jika itu orang
yang tidak bertanggung jawab, mereka tidak akan bisa membaca pesan yang telah
terenkripsi dengan kunci publik. Hanya kunci private yang dapat mendekripsi pesan
Secara khusus sandi kunci publik yang telah diterapkan dan disebut sandi RSA
dikembangkan pada tahun 1977 dan dinamakan sesuai dengan pengembangnya : Ron
Anda tidak akan menulis program hacking program sandi RSA dari buku ini, agar tidak
ada kesalahpahaman tentang program sandi RSA nantinya, program RSA sudah benar-
benar aman. Untuk mendapatkan hak dalam melakukan Kriptografi sangatlah sulit dan
Program RSA yang akan anda bahas hanya sebatas buku pelajaran semata saja, ketika
primer yang luas, akan ada beberapa bagian kesalahan pada hal ini yang akan
pseudorandom dan angka yang benar-benar acak sehingga mengubah fungsi adalah
salah satu kesalahan. Dan masih banyak contoh lainnya di luar sana
Jadi jika anda tidak mampu meretas teks sandi yang telah dibuat dengan program sandi
RSA bukan berarti orang lain tidak bisa. Seorang kriptografer Bruce Scheier pernah
berkata, seseorang yang paling amatir tanpa pengetahuan adalah kriptografer yang
terbaik, dapat membuat sebuah algoritma yang tidak seorangpun dapat meretas.
Bahkan dirinya sendiri. Hal ini bahkan tidaklah susah. Apa susahnya membuat sebuah
algoritma yang tak seorangpun mampu merusaknya, bahkan setelah beberapa tahun
kemungkinan yang ada dan itu akan membuang waktu yang tidak sedikit. :)
Terkadang anda abai mengenai kunci sandi publik. Bayangkan apabila anda menerima
pesan begini :
Hello saya ini Andini mantan kamu, boleh share publik keynya. Aku tiba-tiba
Anda sudah mengetahui sebelumnya bahwa kunci publik membuat anda mampu untuk
mengirimkan pesan dengan tingkat rahasia yang tinggi dan membuat orang selain
Andini tidak bisa mengetahui apa balasan kamu. Tapi bagaimana anda benar-benar
yakin bahwa itu adalah Andini jangan-jangan itu Butet pacar kamu yang lagi menguji
rasa setia seorang Bob ( anggap saja nama kamu sekarang Bob ) dan jika salah dalam
menganalisa hancur sudah apa yang sudah kamu jalin dengan Butet si boru batak.
Maka anda harus benar-benar yakin bahwa Andini adalah orang dimaksud dengan
melakukan pengujian dan melihat bagaimana dan benarkah Andini dapat melakukan hal
tersebut.
Pada dasarnya ini bukanlah menjadi masalah sandi Symmetric, karena ketika anda
jika anda tidak ingin seseorang dapat mengetahui kunci publik anda sendiri dan sedang
berbagi pesan rahasia maka tetaplah jaga kunci publik kriptografi tersebut.
Ada hal yang disebut dengan PKI ( Public Key Infrastructure ) yang membuktikan
bahwa kebenaran dan kesamaan kunci publik dengan beberapa tingkat keamanan.
Yang paling berbahaya dalam peretasan pesan terenkripsi adalah sesorang pada bagian
tengah jaringan atau Man In The Middle Attack. Katakanlah seseorang sangat ingin
berkomunikasi dengan anda dan mengirimi anda beberapa pesan, namun seseorang
mencegatnya dalam jaringan anda. MITMA dapat mengubah kunci publik yang
disematkan dalam email dengan kunci publik mereka, lalu mengirimnya kepada anda.
Anda akan berfikir bahwa kunci tersebut berasal dari orang yang anda maksudkan.
Sekarang ketika anda mengenkripsi balasan pada penerima, pesan akan tersaring dan
ditangkap oleh MITMA lalu mebacanya dengan kunci publik anda yang sudah terlebih
dahulu diketahui pihak MITMA lalu mengirimkannya pada penerima yang anda
Anda dan penerima akan berfikir bahwasanya pesan anda masih dalam kerahasiaan.
Namun sebenarnya seseorang telah mengetahui apa yang sedang anda dan penerima
pesan anda dengan kunci publik yang telah diubah. Sekali lagi, masalah ini disebabkan
oleh fakta kunci publik tidak hanya memberikan keamanan namun juga pengenalan.
Sebuah kunci pada skema RSA dibuat oleh dua angka. Cara membuat kunci
tersebut :
1. Buat dua angka acak, angka primer yang sangat luas. Angka ini akan
dinamakan p dan q. Kalikan angka ini untuk mendapatkan apa yang anda
sebut sebagai n.
2. Buatlah angka acak yang disebut dengan e, dimana angka primer relatif
dengan (p 1) (q 1).
Kunci publik berasal dari dua angka yaitu n dan e. Kunci private akan menjadi
dua angka disebut n dan d. Anda akan melengkapi bagaimana enkripsi dan
################################################################
# Membuat kunci RSA publik/private #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
def main():
#membuat kunci publik dan privat dengan 1024 bit kunci
print('Sedang membuat kunci...')
buatKunciFile('matius_celcius_sinaga', 1024)
print('Kunci file sudah dibuat.')
def hasilkanKunci(ukuranKunci):
#membuat sebuah kunci publik dan private dengan kunci dengan ketentuan panjang
kunci
#hal ini akan berlangsung sedikit lebih lama dibandingkan program lainnya
#langkah kedua, buatlah angka a dimana e menjadi lebih relatif menjadi primer (p-
1)*(q-1)
print('Mengubah e menajdi angka primer yang lebih relatif menjadi (p-1)*(q-1)...')
while True:
#tetap mencoba dengan angka acak hingga e mencapai nilai yang benar
e = random.randrange(2 ** (ukuranKunci - 1), 2 ** (ukuranKunci))
if kriptomath.gcd(e, (p - 1) * (q - 1)) == 1:
break
#mengecek untuk mencegah penulisan kunci yang terlalu banyak dari kunci file
if os.path.exists('%s_pubkey.txt' % (nama)) or os.path.exists('%s_privkey.txt' %
(nama)):
print()
print('Kunci publik adalah %s dan a %s banyak angka.' % (len(str(kunciPublik[0])),
len(str(kunciPublik[1]))))
print('Menulis kunci publik pada file %s_pubkey.txt...' % (nama))
fo = open('%s_pubkey.txt' % (nama), 'w')
fo.write('%s,%s,%s' % (ukuranKunci, kunciPublik[0], kunciPublik[1]))
fo.close()
print()
print('Kunci private adalah %s dan a %s banyak angka.' % (len(str(kunciPublik[0])),
len(str(kunciPublik[1]))))
print('Menulis kunci publik pada file %s_privkey.txt...' % (nama))
fo = open('%s_privkey.txt' % (nama), 'w')
fo.write('%s,%s,%s' % (ukuranKunci, kunciPrivat[0], kunciPrivat[1]))
fo.close()
#jika keseluruhan program sudah berjalan dengan benar juga program yang diimport
sudah berjalan dengan semestinya
if __name__ == '__main__':
main()
4247195624154527945398610662445031319825666093063099445861916768421457206416
2155188134182539244154160024346228091432168063039239752792548720334991004838
8473288846899034944914263926819038138933002734727985629473062687590759765222
3317542842276124747131085499830940109512988462483095635550081990575391227653
9737800003,
1696544267543113468020172440459455790338087287195167973754756902676837061578
3547207906185010320762220903713211901823715407847470734049854501656774905937
4903778828311435765557300621596483396672744390514244147562293745944291021152
1293024016486372218904937399781784474415201324540969850662102127528354576784
27637)
Kunci Private :
(254069949491203565468565957419125533596034306372676249595436745322102540180
7436299744322120668381912637855946707603383437795842944150239429235037679004
4670033834890884732737141791712981288425374295076287420377479808760420128193
8664318623273832140247758232232432830994257653938371435117117403769602012567
4247195624154527945398610662445031319825666093063099445861916768421457206416
2155188134182539244154160024346228091432168063039239752792548720334991004838
8473288846899034944914263926819038138933002734727985629473062687590759765222
3317542842276124747131085499830940109512988462483095635550081990575391227653
9737800003,
1604413766046392076714912367413318346914505202022007956792800826057542458896
1092244608263333480359719361115065128462812224275784261710766049372013510001
0234248166152015640975671050305692821752671640257323951322195699647053631667
3329125810006364988074926022283421554081897034369343088083215248214577481803
7361409104878361196316638116542403644229011920277374566298870713547175324098
1440489903506088043491625101609324608997365605537734746018638750346136993904
0717063896227175075016589693819757073877506409607942983081128385913711787883
8750387678407735951453839532331964150786318588866506534313482951041273122668
773817573)
KRIPTOSISTEM HYBRID
Dalam kehidupan sebenarnya, kerumitan matematika membuat RSA dan enkripsi kunci
publik sangat lambat untuk dihitung. Hal ini khususnya bagi server yang membutuhkan
pembuatan ratusan bahkan ribuan koneksi terenkripsi dalam satu detik. Sebaliknya,
sandi RSA sering digunakan untuk mengenkripsi kunci pada sandi kunci symmetrik.
Kunci terenkripsi dikirim pada orang lain, dan kunci tersebut digunakan untuk
kunci simetrik dan sebuah kunci asimmetrik akan membuat komunikasi benar-benar
################################################################
# Sandi RSA #
# Editor : Matius Celcius Sinaga #
# Author : # http://inventwithpython.com/hacking (BSD Licensed) #
################################################################
import sys
#ukuran blok harus lebih kecil daripada atau sama dengan ukuran kunci
#ukuran blok dalam bytes, ukuran kunci dalam bits
#ada 8 bits dalam 1 byte
UKURAN_BLOK_STANDAR = 128
#maksudnya terdapat 128 bytes
UKURAN_BYTE = 256
#dalam satu byte memiliki 256 nilai yang berbeda
def main():
#jalankan sebuah test yang mengenkripsi sebuah pesan dalam sebuah file atau
mendekrip sebuah pesan dari file
namafile = 'encrypted_file.txt'
#file untuk menulis atau untuk membaca
mode = 'encrypt'
#tentukan apakah enkripsi atau dekripsi
if mode == 'encrypt':
pesan = '''"Journalists belong in the gutter because that is where the ruling
classes throw their guilty secrets." -Gerald Priestland "The Founding Fathers gave the
free press the protection it must have to bare the secrets of government and inform the
people." -Hugo Black'''
namaKunciFilePublik = 'matius_celcius_sinaga_pubkey.txt'
print('Mengenkripsi dan menulis dalam %s...' % (namafile))
teksTerenkripsi = enkripsidantulisDalamFile(namafile, namaKunciFilePublik,
pesan)
pesanDalamByte = pesan.encode('ascii')
#mengubah bilangan bulat menjadi bytes
blockInts = []
for mulaiBlok in range(0, len(pesanDalamByte), ukuranBlok):
#menghitung blok bilangan bulat pada blok pada teks
blockInt = 0
for i in range(mulaiBlok, min(mulaiBlok + ukuranBlok, len(pesanDalamByte))):
blockInt += pesanDalamByte[i] * (UKURAN_BYTE ** (i % ukuranBlok))
blockInts.append(blockInt)
return blockInts
def membacaKunciFile(namaFileKunci):
#berikan nama file untuk setiap file yang memiliki kunci publik atau private
#menghasilkan kunci sebagai berikut (n,e) atau (n,d) nilai tuple
fo = open(namaFileKunci)
content = fo.read()
fo.close()
ukurankunci, n, EorD = content.split(',')
return (int(ukurankunci), int(n), int(EorD))
#mengenkripsi pesan
blokTerenkripsi = enkripsiPesan(pesan, (n, e), ukuranBlok)
fo.close()
#juga menghasilkan string yang terenkripsi
return kontenYangTerenkripsi
#mengubah pesan terenkripsi hingga menjadi lebih besar dari nilai integer
blokTerenkripsi = []
for blok in pesanTerenkripsi.split(','):
blokTerenkripsi.append(int(blok))
#jika rsaCipher.py sudah berjalan termasuk didalamnya seluruh modul maka panggil
fungsi main()
if __name__ == '__main__':
main()
Untuk melakukan dekripsi terhadap sandi RSA anda hanya mengubah mode menjadi
decrypt/dekrip/dekripsi dan menjalankan program seperti di awal.
Ini adalah contoh bagaimana program sandi RSA diimplementasikan, hal ini hanya akan
mengenkrip dan dekripsi file teksawal. Sebuah teksawal (bukan maksud untuk membuat
ambigu antara antara teksawal dengan cara kriptografi) adalah file yang hanya
memiliki karakter teks (seperti halnya apa yang dapat anda ketikkan di keyboard).
Sebagai contoh, .py yang anda ketikkan pada program python adalah file plaintext. File
plainteks adalah tipe yang dibuat menggunakan teks editor seperti Notepad pada
Windows, TextMate pada OSX, atau Gedit pada Ubuntu. Secara khusus, file plainteks
adalah file yang hanya mengandung nilai ASCII.
File seperti gambar, video, program exe, file atau bahasa prosessor disebut file binary.
(file kata prosessor adalah file binary karena teks memiliki font, warna, dan ukuran
informasi yang disatukan dengan teks).
Sandi RSA bukan hanya menunjukkan bagaimana enkripsi bekerja namun juga
bagaimana pengelanan digital untuk mengetahui apakah orang yang anda maksud/tuju
adalah orang yang benar. Ingatlah bahwasanya sandi RSA memiliki kunci publik dan
privat dan setiap string akan di enkripsi dengan satu kunci yang dihasilkan oleh teks
sandi dan hanya dapat di dekripsi dengan kunci sandu yang lain. Jika anda
mengenkripsi dengan kunci publik maka hanya pemilik kunci privatlah yang dapat
mendekripsi sandi awal tersebut.
Dalam Kriptografi terdapat blok yang dapat mengubah panjang dari sebuah bits di
dalam sandi RSA ada blok yang dihasilkan dengan sebuah integer atau bilangan bulat
yang ditentukan menjadi ukuran blok hingga mencapai 128 byte atau 1024 bits, ingat
dalam perhitungannya 8 bits berarti 1 byte.
PROGRAM PYPERCLIP
# Pyperclip v1.4
# A cross-platform clipboard module for Python. (only handles plain text for now)
# By Al Sweigart [email protected]
# Usage:
# import pyperclip
# pyperclip.copy('The text to be copied to the clipboard.')
# spam = pyperclip.paste()
# On Mac, this module makes use of the pbcopy and pbpaste commands, which should
come with the os.
# On Linux, this module makes use of the xclip command, which should come with the
os. Otherwise run "sudo apt-get install xclip"
# Copyright (c) 2010, Albert Sweigart
# All rights reserved.
#
# BSD-style license:
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the pyperclip nor the
# names of its contributors may be used to endorse or promote products
# derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY Albert Sweigart "AS IS" AND ANY
# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL Albert Sweigart BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
GOODS OR SERVICES;
# Change Log:
# 1.2 Use the platform module to help determine OS.
# 1.3 Changed ctypes.windll.user32.OpenClipboard(None) to
ctypes.windll.user32.OpenClipboard(0), after some people ran into some TypeError
import platform, os
def winGetClipboard():
ctypes.windll.user32.OpenClipboard(0)
pcontents = ctypes.windll.user32.GetClipboardData(1) # 1 is CF_TEXT
data = ctypes.c_char_p(pcontents).value
#ctypes.windll.kernel32.GlobalUnlock(pcontents)
ctypes.windll.user32.CloseClipboard()
return data
def winSetClipboard(text):
text = str(text)
GMEM_DDESHARE = 0x2000
ctypes.windll.user32.OpenClipboard(0)
ctypes.windll.user32.EmptyClipboard()
try:
# works on Python 2 (bytes() only takes one argument)
hCd = ctypes.windll.kernel32.GlobalAlloc(GMEM_DDESHARE,
len(bytes(text))+1)
except TypeError:
# works on Python 3 (bytes() requires an encoding)
hCd = ctypes.windll.kernel32.GlobalAlloc(GMEM_DDESHARE, len(bytes(text,
'ascii'))+1)
pchData = ctypes.windll.kernel32.GlobalLock(hCd)
try:
# works on Python 2 (bytes() only takes one argument)
ctypes.cdll.msvcrt.strcpy(ctypes.c_char_p(pchData), bytes(text))
except TypeError:
# works on Python 3 (bytes() requires an encoding)
ctypes.cdll.msvcrt.strcpy(ctypes.c_char_p(pchData), bytes(text, 'ascii'))
ctypes.windll.kernel32.GlobalUnlock(hCd)
ctypes.windll.user32.SetClipboardData(1, hCd)
ctypes.windll.user32.CloseClipboard()
def macSetClipboard(text):
text = str(text)
outf = os.popen('pbcopy', 'w')
outf.write(text)
outf.close()
def macGetClipboard():
outf = os.popen('pbpaste', 'r')
content = outf.read()
outf.close()
return content
def gtkGetClipboard():
return gtk.Clipboard().wait_for_text()
def gtkSetClipboard(text):
global cb
text = str(text)
cb = gtk.Clipboard()
cb.set_text(text)
cb.store()
def qtGetClipboard():
return str(cb.text())
def qtSetClipboard(text):
text = str(text)
cb.setText(text)
def xclipSetClipboard(text):
text = str(text)
def xclipGetClipboard():
outf = os.popen('xclip -selection c -o', 'r')
content = outf.read()
outf.close()
return content
def xselSetClipboard(text):
text = str(text)
outf = os.popen('xsel -i', 'w')
outf.write(text)
outf.close()
def xselGetClipboard():
outf = os.popen('xsel -o', 'r')
content = outf.read()
outf.close()
return content
setcb = xselSetClipboard
try:
import gtk
getcb = gtkGetClipboard
setcb = gtkSetClipboard
except Exception:
try:
import PyQt4.QtCore
import PyQt4.QtGui
app = PyQt4.QApplication([])
cb = PyQt4.QtGui.QApplication.clipboard()
getcb = qtGetClipboard
setcb = qtSetClipboard
except:
raise Exception('Pyperclip requires the gtk or PyQt4 module installed, or
the xclip command.')
copy = setcb
paste = getcb
'Stay Hungry, Stay Foolish' atau dalam bahasa Indonesia berarti 'Tetap Lapar, Tetap
Bodoh', banyak orang berfikir bahwa hal ini pertama kalinya diungkapkan oleh Steve
Jobs namun tahukah anda bahwa sebenarnya kalimat tersebut pertama sekali dicetak
oleh majalah Steward Brand dan diedit oleh Kevin Kelly, sebuah pesan perpisahan di
belakang sampul majalah tersebut yang dimana dimaksudkan bahwa kita harus pahami
ketidakpentingan kita sendiri, gunakan kesadaran dengan rendah hati dan haus, akan
seolah-olah laparnya pengetahuan untuk merangkul masa depan. Anda adalah kelompok
orang-orang yang benar-benar kelaparan hingga sangat benar-benar kelaparan untuk
memiliki buku ini namun kelaparan yang anda mililki tak bisa menjadi alasan ilmu yang
ada hanya untuk anda sendiri, laparlah akan ilmu pengetahuan selain dari buku ini
namun tetap berbagi hingga menjadi habis dan bodoh, sampai akhir hayat menjemput
lalu Allah berkata, sudah selesai.
Amin.
DAFTAR PUSTAKA
a b Schneier, Bruce (1996). Applied Cryptography (2nd ed.). Wiley. ISBN 0-471-
11709-9.
a b Singh, Simon (2000). The Code Book. New York: Anchor Books. pp. 1420. ISBN
9780385495325.
a b c Levy, Steven (2001). Crypto: How the Code Rebels Beat the Government
Saving Privacy in the Digital Age. Penguin Books. p. 56. ISBN 0-14-
024432-8. OCLC 244148644 48066852 48846639.
Babai, Lszl (1985). "Trading group theory for randomness". Proceedings of the
Seventeenth Annual Symposium on the Theory of Computing (Association for
Computing Machinery).
Bini, Ola (2007). Practical JRuby on Rails Web 2.0 Projects: bringing Ruby on
Rails to the Java platform. Berkeley: APress. p. 3. ISBN 978-1-59059-
881-8.
Blaze, Matt; Diffie, Whitefield; Rivest, Ronald L.; Schneier, Bruce; Shimomura,
Tsutomu; Thompson, Eric; Wiener, Michael (January 1996). "Minimal key
lengths for symmetric ciphers to provide adequate commercial security".
Fortify. Diakses tanggal 26 March2015.
Cocks, Clifford (20 November 1973). "A Note on 'Non-Secret Encryption'" (PDF).
CESG Research Report.
Coppersmith, D. (May 1994). "The Data Encryption Standard (DES) and its
strength against attacks" (PDF). IBM Journal of Research and Development
38 (3): 243. doi:10.1147/rd.383.0243. Diakses tanggal 26 March 2015.
Ferguson, Niels (15 August 2001). "Censorship in action: why I don't publish my
HDCP results". Diarsipkan Desember 1, 2001 di Wayback Machine
"FIPS PUB 197: The official Advanced Encryption Standard" (PDF). Computer
Security Resource Center. National Institute of Standards and
Technology.
Hakim, Joy (1995). A History of Us: War, Peace and all that Jazz. New York:
Oxford University Press. ISBN 0-19-509514-6.
Ingold, John (January 4, 2012). "Password case reframes Fifth Amendment rights
in context of digital world". The Denver Post.
James Gannon, Stealing Secrets, Telling Lies: How Spies and Codebreakers Helped
Shape the Twentieth Century, Washington, D.C., Brassey's, 2001, ISBN 1-
57488-367-4.
Junod, Pascal (2001). "On the Complexity of Matsui's Attack" (PDF). Selected
Areas in Cryptography.
Kahn, David (Fall 1979). "Cryptology Goes Public". Foreign Affairs 58 (1): 153.
Kuchling, Andrew M. (22 December 2006). "Interview with Guido van Rossum (July
1998)". amk.ca.
Leyden, John (2011-07-13). "US court test for rights not to hand over crypto
keys". Theregister.co.uk.
Leyden, John (13 July 2011). "US court test for rights not to hand over crypto
keys". The Register.
"NIST Selects Winner of Secure Hash Algorithm (SHA-3) Competition". Tech Beat.
National Institute of Standards and Technology. October 2, 2012.
"ORDER GRANTING APPLICATION UNDER THE ALL WRITS ACT REQUIRING DEFENDANT FRICOSU
TO ASSIST IN THE EXECUTION OF PREVIOUSLY ISSUED SEARCH WARRANTS" (PDF).
United States District Court for the District of Colorado.
"RFC 2440 - Open PGP Message Format". Internet Engineering Task Force. November
1998.
Rivest, Ronald L.; Shamir, A.; Adleman, L. (1978). "A Method for Obtaining
Digital Signatures and Public-Key Cryptosystems". Communications of the
ACM (Association for Computing Machinery) 21 (2): 120126.Diarsipkan
November 16, 2001 di Wayback Machine
Schemenauer, Neil; Peters, Tim; Hetland, Magnus Lie (18 May 2001). "PEP 255
Simple Generators". Python Enhancement Proposals. Python Software
Foundation.
Schneier, Bruce (15 June 2000). "The Data Encryption Standard (DES)". Crypto-
Gram.
Simionato, Michele. "The Python 2.3 Method Resolution Order". Python Software
Foundation. The C3 method itself has nothing to do with Python, since it
was invented by people working on Dylan and it is described in a paper
intended for lispers
Song, Dawn; Wagner, David A.; Tian, Xuqing (2001). "Timing Analysis of
Keystrokes and Timing Attacks on SSH" (PDF). Tenth USENIX Security
Symposium.
Smith, Kevin D.; Jewett, Jim J.; Montanaro, Skip; Baxter, Anthony (2 September
2004). "PEP 318 Decorators for Functions and Methods". Python
Enhancement Proposals. Python Software Foundation. Diakses tanggal 24
February 2012.
Sweigart, Al. Hacking Secret Ciphers with Python. 2013. United State. ISBN 978-
1482614374. 1st Editio
"The Digital Millennium Copyright Act of 1998" (PDF). United States Copyright
Office.
"UK Data Encryption Disclosure Law Takes Effect". PC World. 1 October 2007.
Williams, Christopher (11 August 2009). "Two convicted for refusal to decrypt
data". The Register.
Williams, Christopher (24 November 2009). "UK jails schizophrenic for refusal
to decrypt files". The Register.
http://google.com/watercolour-splatter-in-rainbow-colours_1048-6320
http://staff.neu.edu.tr/~fahri/cryptography.html
http://wikipedia.com/Kriptografi
http://wikipedia.com/python