UJI TINGKAT KERANDOMAN BIT PADA ENKRIPSI DATA ENCRYPTION STANDARD
Zamzamiah
PROGRAM STUDI MATEMATIKA FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS ISLAM NEGERI SYARIF HIDAYATULLAH JAKARTA 2010 M/1431 H
i
UJI TINGKAT KERANDOMAN BIT PADA ENKRIPSI DATA ENCRYPTION STANDARD
Skripsi Sebagai Salah Satu Syarat untuk Memperoleh Gelar Sarjana Sains Fakultas Sains dan Teknologi Universitas Islam Negeri Syarif Hidayatullah Jakarta
Oleh :
Zamzamiah 103094029748
PROGRAM STUDI MATEMATIKA FAKULTAS SAINS DAN TEKNOLOGI UNIVERSITAS ISLAM NEGERI SYARIF HIDAYATULLAH JAKARTA 2010 M / 1431 H
ii
PENGESAHAN UJIAN Skripsi yang berjudul “ Uji Tingkat Kerandoman Bit pada Enkripsi Data Encryption Standard”, yang ditulis oleh Zamzamiah, NIM 103094029748 telah diujikan dan dinyatakan lulus dalam siding Munaqosyah Fakultas Sains dan Teknologi, Universitas Islam Negeri Syarif Hidayatullah Jakarta, pada tanggal 30 Agustus 2010. Skripsi ini telah diterima sebagai salah satu syarat untuk memperoleh gelar strata satu (S1) pada Program Studi Matematika.
Menyetujui : Penguji I,
Penguji II,
Taufik Edy S, M.ScTech NIP. 19790530 200604 1002
Suma’innah NIP. 150 408 699
Pembimbing I,
Pembimbing II,
Hermawan S, M.Kom NIP. 19740623 1993121 001
Yanne Irene, M.Si NIP. 19741231 2005012 018 Mengetahui :
Dekan Fakultas Sains dan Teknoligi, Matematika,
Ketua
Dr.Syopiansyah Jaya Putra, M.Sis NIP. 19680117 2001121 001
Program
Studi
Yanne Irene, M.Si NIP. 19741231 200501 2018
iii
PERNYATAAN
DENGAN INI SAYA MENYATAKAN BAHWA SKRIPSI INI BENARBENAR HASIL KARYA SENDIRI YANG BELUM PERNAH DIAJUKAN SEBAGAI SKRIPSI ATAU SKRIPSI PADA PERGURUAN TINGGI ATAU LEMBAGA MANAPUN.
Jakarta, Agustus 2010
Zamzamiah 103094029748
iv
Sesungguhnya perjalanan menuntut ilmu Tidaklah sunyi dari rasa lelah Karena bahwasanya menuntut ilmu itu Perkara yang lebih besar dan lebih utama Dari peperangan menurut para ulama Barang siapa yang sabar di dalam menuntut ilmu Maka ia akan memperoleh kelezatan ilmu Yang mengalahkan Semua kelezatan-kelezatan dunia (Dikutip dari perkataan Nabi Musa AS.)
Skripsi ini kupersembahkan Untuk Aku beserta keluargaku Semoga Allah menjadikan kami orang-orang yang selalu haus akan ilmu Amin….
v
ABSTRAK
Aspek keamanan data telah menjadi aspek yang sangat penting dari suatu sistem informasi. Salah satu cara menjaga keamanan dan kerahasiaan data tersebut yaitu dengan digunakannya algoritma kriptografi untuk melakukan penyandian data. Salah satu jenis algoritma kriptografi yang paling popular adalah algoritma DES (Data Encrytion Standard). Untuk mengetahui tingkat kerandoman barisan binari pada ciperteks algoritma DES dapat dilakukan dengan menggunakan deretan uji NIST . Deretan uji NIST tersebut merupakan sebuah paket uji statistik yang mengandung 16 uji. Diantaranya adalah uji frekuensi monobit, uji frekuensi dengan sebuah blok, uji run, uji kumulatif sums (cumsum), dan sebagainya. Kata Kunci: random, bit, DES, enkripsi
vi
ABSTRACK
The security aspect data becoming an important aspect from one system information. Another one is to take savety and keep secret the data with used algorithm cryptographic to share data. Another kind of algorithm cryptographic the most popular is algoritm DES (Data Encryption Standard). To know level of randomness binary formation in ciphertext algoritm DES can do with use test line of NIST. The line formation of NIST is one packet statistical test than include 16 test. Between that is frequency test (monobit), frequency test within a block, run test, cumulative sums test (cumsum), and etc .
Key word: random, bit, DES, encryption
vii
KATA PENGANTAR
Alhamdulillah, penulis panjatkan rasa syukur pada Allah swt. yang senantiasa memberikan rahmat dan hidayah-Nya sehingga penulis dapat menyelesikan skripsi ini. Skripsi ini berjudul “Uji Kerandoman Bit Pada Enkripsi DES (Data Enkription Standard)”. Pada kesempatan ini penulis ingin mengucapkan terima kasih yang tak terhingga dan memberikan penghargaan yang sebesar-besarnya kepada: 1. Dr. Syopiansyah Jaya Putra, M.Sis, Dekan Fakultsa Sains dan Teknologi. 2. Yanne Irene, M.Si., Ketua Program Studi Matematika, Suma’inna, M.Si., Sekretaris Ketua Program Studi Matematika yang senantiasa memberikan nasehat dan bimbingan selama penulis kuliah di prodi Matematika. 3. Hermawan Setiawan, M.Si. selaku pembimbing I dan Yanne Irene, M.Si selaku pembimbing II yang memberikan banyak ilmu, waktu, pengarahan dan bimbingan, serta dorongan semangatkepada penulis. 4. Kelurga besar dosen Program Studi Matematika yang telah memberikan banyak ilmu yang sangat bermanfaatkepada penulis. 5. Ayah dan ibu serta kakak-kakakku yang telah memberikan dorongan kepada penulis dalam menyelesaikan skipsi ini. 6. Teman-teman serta semua pihak yang secara langsung maupun tidak langsung membantu penulisan skipsi ini.
viii
Penulis menyadari , masih banyak kekurangan pada penulisan skripsi ini. Oleh karena itu, penulis mengharapkan kritik dan saran yang membangun dari para pembaca. Penulis berharap semoga skripsi ini dapat bermanfaat khususnya bagi penulis dan pembaca pada umumnya.
Jakarta, Agustus 2010
Penulis
ix
DAFTAR ISI
Halaman HALAMAN JUDUL
...................................................................................
i
PENGESAHAN PENGUJI ...........................................................................
ii
PERNYATAAN ...........................................................................................
iii
PERSEMBAHAN DAN MOTTO ................................................................
iv
ABSTRAK ....................................................................................................
v
ABSTRACK .................................................................................................
vi
KATA PENGANTAR ..................................................................................
vii
DAFTAR ISI .................................................................................................
ix
DAFTAR LAMPIRAN .................................................................................
xi
BAB I
PENDAHULUAN ......................................................................
1
1.1 Latar Belakang ....................................................................
1
1.2 Rumusan Masalah ...............................................................
2
1.3 Tujuan Penelitian ................................................................
2
1.4 Batasan Masalah .................................................................
3
1.5 Manfaat Penelitian ..............................................................
3
LANDASAN TEORI ..................................................................
4
2.1 Kriptografi dan Algoritma Kriptografi ...............................
4
2.2 Data Encryption Standard (DES) .........................................
6
2.3 Bentuk-bentuk Uji Statistik .................................................
11
2.4 Hipotesis, Nilai Kritikal dan Level Signifikan ...................
14
2.5 Deskripsi Teknisi dari Uji-uji ............................................
15
2.5.1 Uji Frekuensi (Monobit) .........................................
16
BAB II
x
BAB III
BAB IV
2.5.2 Uji Frekuensi Within a Block ..................................
16
2.5.3 Uji Run ....................................................................
17
PENGUMPULAN DAN PENGOLAHAN DATA ....................
19
3.1 Kerandoman (Randomnes) .................................................
19
3.2 Pengambilan Data ...............................................................
19
3.3 Pengolahan Data .................................................................
20
3.3.1 Uji Frekuensi (Monobit) .........................................
20
3.3.2
Uji Frekuensi dalam Sebuah Blok .........................
21
3.3.3 Uji Run ....................................................................
23
UJI KERANDOMAN BIT PADA DES .....................................
26
4.1 Analisis Hasil ......................................................................
26
4.1.1 Uji Kerandoman Bit dengan Uji Statistik Monobit
27
4.1.2 Uji Kerandoman Bit dengan Uji Statistik Frekuensi dalam Sebuah Blok ...................................................
28
4.1.3 Uji Kerandoman Bit dengan Uji Statistik Run .......
29
KESIMPULAN DAN SARAN ...................................................
31
5.1 Kesimpulan .........................................................................
31
5.2 Saran ...................................................................................
32
REFERENSI .................................................................................................
33
LAMPIRAN.....................................................................................................
34
BAB V
xi
DAFTAR LAMPIRAN
Halaman
Lampiran 1 : Plainteks dan Chiperteks dengan Menggunakan Kunci yang Sama ......................................................................................
35
Lampiran 2 : Program Enkripsi dan Dekripsi Algoritma DES ...................
42
Lampiran 3 : Tabel ASCII (American Standard Code for Information Interchange) .........................................................................
56
Lampiran 4 : Tabel P-value Barisan Binari pada Plainteks dan Ciperteks… 64
xii
BAB I PENDAHULUAN
1.1 Latar Belakang Masalah Perkembangan teknologi komputer dan telekomunikasi yang cukup pesat saat ini cukup berpengaruh pada penggunaan informasi. Kemampuan untuk mengakses dan menyediakan informasi secara cepat dan akurat menjadi sangat penting bagi sebuah organisasi komersial (perusahaan), perguruan tinggi (akademis), lembaga pemerintah (birokrasi), maupun individual (pribadi). Seiring dengan perkembangan teknologi komunikasi dan penyimpanan data dengan menggunakan komputer, memungkinkan pengiriman data jarak jauh yang relatif murah dan cepat. Salah satunya yaitu dengan menggunakan internet, jaringan tersebut menyediakan berbagai macam layanan komunikasi. Saat ini penggunaan internet sangat marak digunakan oleh masyarakat, hal ini disebabkan oleh berbagai macam layanan yang ditawarkan oleh internet tersebut salah satunya yaitu dalam pengiriman pesan, namun seiring dengan itu semua masalah pun bermunculan. Salah satunya dalam bidang keamanan dan kerahasiaan data atau pesan yang disampaikan melalui media komunikasi. Hal itu menjadi faktor pendorong bagaimana kita dapat menjaga agar pesan atau informasi yang dikirim tetap terjaga kerahasiaannya. Banyak orang yang kemudian menyiasatinya dengan cara mengubah bentuk pesan atau informasi yang disampaikan ke dalam sebuah pesan yang tidak dapat dibaca oleh orang yang tidak
1
berhak. Saat ini lebih dikenal dengan proses enkripsi. Enkripsi adalah Suatu teknik untuk membuat pesan menjadi tidak dapat dibaca dan proses yang merupakan kebalikan dari enkripsi disebut sebagai dekripsi[9]. Pada proses enkripsi atau deskripsi tersebut pesan yang dikirim akan ditransformasikan ke dalam bentuk barisan binari dan akan menghasilkan pesan yang berupa cipherteks yang mengandung barisan binari pula. Dalam ilmu kriptografi kerandoman pada barisan binari juga berpengaruh terhadap keamanan dan kerahasian sebuah data atau pesan. Maka pada penulisan skripsi ini penulis ingin mengetahui apakah barisan binari pada cipherteks yang dihasilkan oleh hasil enkripsi pada algoritma DES merupakan barisan yang random.
1.2 Rumusan Masalah Masalah yang akan dibahas pada penelitian ini adalah menguji tingkat kerandoman bit atau tingkat keacakan pada hasil enkripsi DES.
1.3 Tujuan Penelitian Tujuan penelitian ini adalah melakukan pengujian tingkat kerandoman bit atau tingkat keacakan pada barisan binari ciperteks hasil enkripsi pada algoritma DES.
2
1.4 Batasan Masalah Penelitian tugas akhir ini dibatasi hanya pada ciperteks hasil enkripsi pada algoritma DES dengan menggunakan beberapa uji statistik yang telah ditetapkan oleh NIST.
1.5 Manfaat Penelitian Manfaat dari penelitian ini, kita dapat mengetahui bahwa jika barisan binari pada ciperteks hasil enkripsi tersebut random maka data atau informasi yang kita informasikan tetap terjaga keamanan dan kerahasiannya. Sehingga algoritma DES tersebut masih dapat digunakan baik oleh organisasi komersial, akademis ataupun secara individual.
3
BAB II LANDASAN TEORI
2.1 Kriptografi dan Algoritma Kriptografi Kriptografi berasal dari bahasa yunani, menurut bahasa kriptografi dibagi menjadi dua yaitu kripto dan graphia, kripto berarti secret (rahasia) dan graphia berarti writing (tulisan). Menurut terminologinya kriptografi adalah ilmu dan seni untuk menjaga keamanan pesan ketika pesan dikirim dari satu tempat ke tempat yang lain[1]. Algoritma ditinjau dari asal usul kata, Algoritma muncul di dalam kamus Webster sampai akhir tahun 1957 hanya menemukan kata algorism yang mempunyai arti proses perhitungan dengan bahasa Arab. Algoritma berasal dari nama penulis buku Arab yang terkenal yaitu Abu Ja’far Muhammad ibnu Musa alKhuarizmi. Kata algorism lambat laut menjadi algorithm. Dalam terminologinya Algoritma adalah urutan langkah-langkah logis untuk menyelesaikan masalah yang disusun secara sistematis[3]. Algoritma kriptografi merupakan langkah-langkah logis bagaimana menyembunyikan pesan dari orangorang yang tidak berhak atas tersebut. Algoritma kriptografi terdiri dari tiga fungsi dasar yaitu:
a. Enkripsi: Enkripsi dapat diartikan cipher atau kode. Enkripsi juga dapat diartikan dengan proses untuk merubah plainteks menjadi cipherteks.
4
b. Dekripsi: Dekripsi merupakan kebalikan dari enkripsi, pesan yang telah dienkripsi dikembalikan kebentuk asalnya (plaintext). c. Kunci: Kunci yang dimaksud adalah kunci yang dipakai untuk melakukan enkripsi dan dekripsi, kunci terbagi menjadi dua bagian kunci pribadi (Private key) dan kunci umum (public key). Algoritma kriptografi dibagi menjadi tiga bagian berdasarkan dari kunci yang dipakainya[4]: 1. Algoritma Simetri Algoritma ini sering disebut dengan algoritma klasik, karena memakai kunci yang sama untuk kegiatan enkripsi dan dekripsinya. Algoritma yang menggunakan kunci simetri diantaranya; Data Encryption Standard (DES), RC2, RC4, RC5, RC6, International Data Encryption Algorithm (IDEA), Advanced Encryption Standard (AES), One Time Pad (OTP), A5, dan lain sebagainya. 2. Algoritma Asimetri Algoritma Asimetri sering disebut dengan algoritma kunci _inary. Pada algoritma asimetri kunci terbagi menjadi dua bagian: a. Kunci umum (public key): kunci yang semua orang boleh tahu (dipublikasikan).
Algoritma
yang
menggunakan
kunci
_inary
diantaranya: Digital Signature Algorithm (DSA), RSA, Diffie-Hellman (DH), Elliptic Curve Cryptography (ECC), dan lain sebagainya.
5
b. Kunci pribadi (Private key): kunci yang dirahasiakan (hanya boleh diketahui satu orang). 3. Hash Function (Fungsi Hash) Fungsi hash sering disebut dengan fungsi hash satu arah (one-way function), message digest, fingerprint, fungsi kompresi dan message authentication code (MAC), hal ini merupakan suatu input matematika yang mengambil input panjang _inary_e dan mengubahnya ke dalam urutan panjang _inary yang tetap. Fungsi hash biasanya digunakan untuk membuat sidik jari dari suatu pesan.
2.2 Data Encryption Standard (DES) Data Encryption Standard (DES) ditetapkan oleh FIPS sebagai suatu algoritma kriptografi yang telah disetujui dan digunakan oleh FIPS 140-1. DES dipublikasikan dalam rangka menyediakan sebuah gambaran komplit dari sebuah algoritma matematika untuk mengenkrip dan mendekrip informasi kode biner. Data Encryption Standard (DES) diadopsi tahun 1977 oleh National Bureau of Standard, sekarang National Institute of Standards and Technology (NIST) sebagai Federal Information Processing Standard 46 (FIPS PUB 46). Algoritma itu sendiri ditujukan sebagai Data Encryption Algorithm (DEA). Pada DES, data dienkripsi dalam 64-bit blok-blok dengan menggunakan sebuah kunci 56-bit. Algoritma perubahan input 64-bit dalam sebuah deretan langkah sampai
6
keluaran 64-bit. Dengan langkah dan kunci yang sama digunakan sebagai proses kebalikan dari enkripsi (dekripsi). Pada awal tahun 1960-an, IBM mengadakan sebuah projek penelitian yang memegang peranan penting dalam kriptografi komputer oleh Horst Feistel. Projek tersebut telah ditandatangani pada tahun 1971, pada perkembangan terakhir algoritma tersebut ditandai dengan LUCIFER, yang telah dijual kepada L1oyd’s of London untuk digunakan dalam sistem penarikan uang . LUCIFER adalah chiper blok Feistel yang beroperasi pada blok-blok 64-bit menggunakan kunci berukuran 128-bit. Karena hasil yang diciptakan oleh projek LUCIFER memberikan harapan , IBM telah memulai sebuah usaha untuk mengembangkan sebuah produk enkripsi komersial yang dapat dipasarkan yang lebih ideal yang dapat dilaksanakan pada single chip. Usaha tersebut dikepalai oleh Walter Tuchman dan Carl Meyer, usaha itu tidak hanya meliputi para peneliti dari IBM saja tapi juga konsultan dari pihak luar serta penasehat teknikal dari NSA. Hasil dari usaha ini merupakan penghalusan dari versi LUCIFER yang lebih resisten terhadap kriptanalisis dengan meredusi ukuran kunci menjadi 56-bit yang sesuai dengan single chip. Pada tahun1973, National Bureau of Standard memerlukan chipper standar nasional. IBM telah mengajukkan hasil dari projek Tuchman-Mayer. Algoritma yang ditujukkan ini jauh lebih baik dan telah diadopsi pada tahun 1977 sebagai Data Encryption Standard.
7
Operasi Mode-mode pada Blok Chiper Algoritma DES adalah dasar pembentukan blok untuk memberikan keamanan data. Empat mode operasi yang telah dikembangkan untuk DES. Empat mode ini sebenarnya diperuntukkan untuk melindungi semua kemungkinan aplikasi-aplikasi yang digunakan untuk mengenkripsi dengan menggunakan model DES. Akan tetapi, NIST telah mengembangkan daftar mode-mode yang telah direkomendasikan menjadi lima mode. Mode-mode tersebut adalah[7]: 1. Mode Electronic Code Book (ECB) Mode ECB suatu blok cipher yang panjang dibagi dalam bentuk sequence binary menjadi satu blok tanpa mempengaruhi blok-blok yang lain, tiap blok terdiri dari 64 bit atau 128 bit, setiap blok dienkripsi dengan menggunakan kunci yang sama. Pada mode ini untuk pesan yang lebih panjang dari 64 bit prosedur yang digunakan adalah dengan membagi pesan menjadi blok-blok dengan panjang 64 bit dan menambahkannya pada blok terakhir jika dibutuhkan. Sifat yang paling mendasar pada mode ECB adalah blok plainteks yang sama akan dikodekan menjadi cipherteks yang sama. Sehingga kelemahan pada mode ini yaitu penukaran pesan yang sedang dikirim sudah bisa diterka apa kira-kira isi pesan tersebut. 2. Mode Cipher Blok Chaining (CBC) Sistem dari mode CBC adalah plaintext yang sama akan dienkripsi ke dalam bentuk cipher yang berbeda, disebabkan blok cipher yang satu tidak 8
berhubungan dengan blok cipher yang lain. Melainkan tergantung pada cipher sebelumnya. Pada mode CBC, input untuk enkripsi merupakan hasil dari XOR antara plainteks dengan cipherteks sebelumnya dan menggunakan kunci yang sama pada setiap blok. Bentuk formal dari mode CBC yaitu: C1 = Ek (IV ⊕ P1) P1 = IV ⊕ Dk+ (C1) dengan
C1 = cipherteks ke-1 Ek= enkripsi Dk= dekripsi P1 = plainteks ke-1 IV = initialization vector
3. Mode Cipher Feed Back (CFB) Metode ini digunakan untuk melakukan enkripsi pada stream cipher, mode ini tidak memerlukan padding bit (tambahan bit) karena jumlah panjang blok sama dengan panjang plainteks yang ada. Mode ini bekerja pada sistem waktu nyata. Pada metode ini, input diproses 8 bit setiap kali enkripsi dilakukan. Cipherteks sebelumnya digunakan sebagai bagian input dari algoritma enkripsi untuk menghasilkan keluaran acak. Keluaran ini diambil 8 bit paling kirinya untuk di-XOR-kan dengan plainteks sepanjang 8 bit untuk menghasilkan cipherteks berikutnya.
9
Enkripsi terdiri dari input yang lama digeser ke kiri sejauh 8 bit. Kekosongan 8 bit ini akan diisi oleh text cipher sebelumnya. Input enkripsi mula-mula adalah Initialization Vector (IV). Salah satu kerugian mode CFB adalah perambatan kesalahan. Jika satu blok cipher mengalami kesalahan ketika di saluran, maka blok-blok berikutnya akan terpengaruh. Secara matematis, CFB dapat dinyatakan sebagai berikut: Ci = Pi ⊕ Ek ( Ci-1) Pi = Ci ⊕ Ek (Ci-1) dengan
Ci = cipherteks ke-i Ek = enkripsi Dk = dekripsi Pi = plainteks ke-i
4. Mode Output Feed Back (OFB) Mode OFB tidak mempengaruhi blok yang lain jika terjadi error, satu bit yang error pada cipherteks hanya akan mempengaruhi satu bit plainteks pada terjadinya proses dekripsi. Mode OFB sring digunakan untuk mengenkripsi pengiriman satelit.
10
5. Mode Counter (CTR) Nilai counter dalam proses enkripsi harus berbeda untuk setiap blok plainteks. Counter adalah beberapa nilai awal lalu ditambahkan dengan 1 untuk setiap subbarisan blok (modulo 2b, dimana b merupakan ukuran blok). Untuk proses enkripsi, counter dienkripsi lalu di XOR-kan blok plainteks untuk memperoleh blok cipherteks. Untuk proses dekripsi digunakan barisan nilai counter yang sama, stiap counter yang telah dienkripsi dan di-XOR-kan dengan blok cipherteks untuk memperoleh kembali blok plainteks yang sesuai.
2.3
Bentuk-bentuk Uji Statistik Pada proses pengujian kerandoman pada barisan binari bentuk–bentuk uji statistik yang digunakan antara lain sebagai berikut[5]:
a. Fungsi Standar Normal (Distribusi Kumulatif) Fungsi standar normal (distribusi kumulatif) merupakan fungsi normal untuk mean μ = 0 dan varian σ2 = 1, secara matematis dapat dituliskan sebagai berikut:
Φ( z ) =
1 2π
z
−u ∫e
2
/2
du
−∞
11
π = 3.14159
di mana
z = Variabel random Z dengan N(0,1) (Z memilki distribusi normal dengan mean μ = 0 dan varian σ2 = 1) u = Variabel pengintegrasi ( dengan u =( x – μ) / σ)
Φ(z ) = Fungsi distributif kumulatif normal standar dari z
b. Fungsi Gamma ∞
Γ( z ) = ∫ z z −1e −t dt 0
di mana
t
= variabel random
z
= parameter (merupakan bilangan bulat positif)
Γ (z) = Fungsi gamma pada z
c. Fungsi Gamma Tidak Komplit
P ( a, x ) ≡ dengan di mana
γ (a, x ) Γ(a )
≡
1 x −t a −1 e t dt Γ(a) ∫0
P(a,0) = 0 dan P(a,∞) = 1
P(a,x) = fungsi gamma tidak komplit a
= nilai parameter
x
= nilai parameter
12
d. Distribusi Chi-Square
χ 2 = ∑ ((oi − ei ) / ei ) oi = frekuensi kejadian
di mana:
ei = frequensi observasi dalam satu waktu tertentu secara berturut-turut
e. Distribusi Normal Standar
z = (x – μ)/σ2 di mana: x = sampel nilai uji statistik. μ = nilai mean pada uji statistik σ2= nilai varian pada uji statistic
f. Teorema Central Limit
Definisi Teorema Central Limit adalah jika X1, X2, …, Xn adalah contoh random dari sebuah distribusi normal dengan mean μ dan varian σ2, variabel random, lim P n→∞
{
X 1 + Λ + X n − nμ
σ n
}
≤a =∫
a
−∞
1 2π
e −x
2
/2
dx
Jika S n = ∑i =1 X i , di mana X1, X2, …, Xn adalah distribusi yang n
independent dan identik dengan probabilitas 1, Sn /n akan konvergen ke
13
E[Xi], di mana teorema central limit menyatakan bahwa Sn mempunyai asimtotik distribusi normal sebagai n→∞
2.4
Hipotesis, Nilai Kritikal, dan Level Signifikan
Analisis hipotesis uji statistik kerandoman bit pada DES adalah: Hipotesis null (H0) adalah bentuk barisan yang di ujikan random Hipotesis alternatif (Ha ) adalah bentuk barisan yang di ujikan tidak random Untuk setiap uji yang digunakan akan menghasilkan sebuah keputusan atau kesimpulan dimana apakah hipotesis null tersebut diterima atau ditolak, artinya apakah generator itu menghasilkan nilai yang random atau tidak dari input barisan yang telah dihasilkan. Nilai kritikal adalah nilai yang terdapat pada daerah penolakan pada hipotesis. Jika data yang di ujikan random maka kesimpulan untuk menolak H0 atau presentase terjadinya bahwa data tersebut tidak random kecil disebut tipe error I. Probabilitas dari tipe error I disebut level signifikan. Nilai level signifikan (α) yang lazim digunakan adalah 0.01. Level signifikan (α) pada uji statistik hipotesis H0 adalah probabilitas H0 di tolak pada hal H0 tersebut bernilai benar[9].
14
2.5
Deskripsi Teknis dari Uji-uji
Deretan uji NIST yaitu sebuah paket statistik yang mengandung 16 uji. Di mana uji-uji tersebut dikembangkan untuk menguji kerandoman barisan binari (panjang berubah-ubah) yang dihasilkan oleh hardware dan software dengan input dari hasil kerandoman pada kriptografi atau pseudorandom number generator. [5] menyatakan ada16 uji: 1. The Frequency (Monobit) Test 2. Frequency Test within a Block 3. The Runs Test 4. Test for Longest-Run-of-Ones in a Block 5. The Binary Matrix Rank Test 6. The Discrete Fourier Transform (Spectral) Test 7. The Non-Overlapping Tempate Matching Test 8. The Overlapping Tempate Matching Test 9. Maurer’s “Universal Statistical” Test 10. The Lempel-Ziv Copression Test 11. The Linear Complexity Test 12. The Serial Test 13. The Aproximate Entropy Test 14. The Cumulative Sums (Cumsums) Test 15. The Random Excurtions Test 16. The Random Excurtions Variant Test 15
2.5.1
Uji Frekuensi (Monobit)
Uji ini diperoleh dari teorema Central Limit untuk random walk, S n = X 1 + Λ + X n . Berdasarkan teorema Central Limit: z
lim P ( S nn ≤ z ) = Φ ( z ) ≡
1 2π
n→ ∞
∫e
−u 2 / 2
du
−∞
Secara tidak langsung menyatakan bahwa, untuk z positif: ⎛| S | P⎜⎜ n ≤ ⎝ n
⎞ z ⎟⎟ = 2Φ( z ) − 1 ⎠
Berdasarkan dasar pengujian pada statistik s =
Sn n
, menaksir
nilai observnya s (obs) = X 1 + Κ + X n / n , dan maka dapat dihitung
(
)
P-value adalah 2[1 − Φ ( s(obs) )] = erfc s(obs) / 2 , di mana erfc adalah komplemen dari fungsi error. erfc( z ) =
2.5.2
2
π
∞
−u ∫ e du …………………………(1) 2
z
Uji Frequensi Within a Block
Parameter pada uji ini adalah M dan N, jadi bahwa n = MN, n adalah original string yang dipartisi menjadi N substring, setiap panjang M. untuk setiap substring ini, probabilitas satu(1) diuji dengan frekuensi relatif observ 1, π i , i = 1, . . . , N. Sum
16
N
2
χ2 (obs) = 4M ∑ [π i − 12 ] 1
2
di bawah hipotesis kerandoman yang memiliki distribusi χ dengan derajat kebebasan N. Didapat P-value yaitu ∞
−u / 2 N / 2 −1 ∫ e u du
Χ 2 ( obs )
Γ( N / 2)2
N /2
∞
=
∫e
−u
u N / 2−1 du
Χ 2 ( obs )
Γ( N / 2)
⎛ N χ 2 (obs ) ⎞ ⎟⎟.....................................(2) = igamc⎜⎜ , 2 ⎝2 ⎠
2.5.3
Uji Runs ( Runs Test)
Uji runs merupakan salah satu uji nonparametrik. Runs didefinisikan sebagai substring yang angka 1-nya berturut-turut dan angka 0-nya berturut-turut dan untuk menentukan apakah pergerakan (osilasi) antara setiap substring yang bersifat homogen tersebut bersifat cepat atau lambat. Uji spesifik di sini didasarkan pada distribusi total bilangan runs. Di mana
π = ∑j ε
j
n (dengan π mendekati 0.5: π −
1 2
≤
2 n
).
⎛ V − 2n(1 − π ) ⎞ lim P⎜⎜ n ≤ z ⎟⎟ = Φ ( z ) n→∞ (1 − π ) ⎝ ⎠
17
Untuk menaksir Vn, didefinisikan untuk k = 1, . . . , n-1, r(k) = 0 jika ∈k =∈k +1 dan r(k) = 1 jika ∈k ≠∈k +1 . Maka Vn = ∑k =1 r (k ) + 1 . n −1
Didapat P-value adalah
⎛ Vn (obs) − 2nπ (1 − π ) erfc⎜⎜ 2 2nπ (1 − π ) ⎝
⎞ ⎟ …………………….(3) ⎟ ⎠
Jika nilai dari Vn besar mengindikasikan bahwa proses osilasi pada string ∈juga besar. Jika nilai Vn kecil maka proses osilasi juga kecil.
18
BAB III PENGUMPULAN DAN PENGOLAHAN DATA
3.1
Kerandoman (Randomnes)
Sebuah barisan binari random dengan panjang k akan menghasilkan sebuah barisan binari dengan panjang l >> k yang merupakan barisan yang random pula. Barisan input yang dibangkitkan disebut dengan bibit sedangkan outputnya disebut dengan barisan pseudorandom bit. Sebuah mekanisme pokok untuk menghasilkan data yang benar-benar random disebut dengan Random Number Generator (RNG). Barisan random binari merupakan sebuah barisan bit dimana untuk setiap bit “ 0 ” atau “ 1 ” memiliki probabilitas ½ dan nilai untuk setiap bit adalah saling bebas antara bit yang satu dengan bit-bit yang lain dalam sebuah barisan dengan kata lain bahwa untuk setiap bitnya tidak dapat diprediksikan[5].
3.2 Pengambilan Data
Data yang diujikan merupakan data plainteks dan chiperteks hasil enkripsi pada algoritma DES (Data Encryption Standard) yang diambil dari surat kabar “Berita Kota, hal. 3 dan 4, Senin, 23-02- 2009”. .
19
3.3
Pengolahan Data 3.3.1
Uji Frekuensi (Monobit)
Tujuaan dari uji frequensi (monobit) adalah menentukan apakah barisan bilangan jumlah antara binari 0 dan 1 sama atau benar-benar merupakan deretan yang random. Frequensi(n), di mana: n : adalah panjang bit string.
ε : adalah barisan bit-bit yang telah dibangkitkan oleh uji RNG atau PRNG, ε = ε 1 , ε 2 , Κ , ε n Sobs : Jumlah nilai absolut pada Xi (dimana Xi = 2εi -1 = ± 1) dalam suatu barisan dibagi dengan akar dari panjang suatu barisan.
Langkah-langkah pengujian a. Ubah ke ± 1: 0 dan 1 pada input barisan (ε) diubah ke nilai -1 dan +1 dan keduanya dijumlahkan bersama sehingga menghasilkan Sn = X1 + X2 + …+ Xn, dimana Xi = 2εi – 1 Contoh: Jika ε = 1011010101, maka n = 10 Sn = 1 + (-1) + 1 + 1 + (-1) + 1 + (-1) + 1 + (-1) + 1 = 2 b. Menghitung uji statistik Sobs = |Sn| / Sobs =
|2| 10
n.
= 0.632455532
20
⎛S ⎞ c. Menghitung P-value = erfc ⎜ obs ⎟ , dimana erfc adalah ⎝ 2⎠ fungsi error yang melengkapi. ⎛ 0.632455532 ⎞ P-value = erfc ⎜ ⎟ = 0.527089 2 ⎝ ⎠ d. Kaidah keputusan (pada level 1%), jika P-value yang dihitung kurang dari 0.01 maka disimpulkan bahwa barisan tersebut tidak random. Sebaliknya, disimpulkan bahwa barisan itu random[5]. Kesimpulan: karena P-value ≥ 0.01 yaitu 0.527089 ≥ 0.01, maka disimpulkan bahwa barisan tersebut adalah random.
3.3.2
Uji Frekuensi dalam Sebuah Blok
Tujuan dari pengujian ini adalah untuk menentukan apakah frekuensi 1 dalam sebuah M-bit blok adalah kira-kira M/2, yang diharapkan dibawah sebuah asumsi kerandoman. Blok frequensi (M,n), di mana: M : adalah merupakan panjang sebuah blok. n : adalah panjang bit string. ε : adalah barisan bit-bit yang telah dibangkitkan oleh uji
RNG atau PRNG, ε = ε 1 , ε 2 , Λ , ε n .
21
χ 2 : sebuah ukuran bagaimana satu bagian diobservasi dengan baik dengan diberikan M-bit blok pada bagian yang diharapkan (1/2). Distribusi yang digunakan pada uji ini adalah distribusi
χ2 Langkah-langkah pengujian: a. Partisi barisan input menjadi N = [n / M] blok-blok yang tidak overlapping, buang bit yang tidak terpakai. Contoh: jika n = 10, M = 3 dan ε = 0110011010 ⎡ n ⎤ ⎡10 ⎤ N = ⎢ ⎥ = ⎢ ⎥ = 3 , dimana 3 bloknya ( N = 3) adalah ⎣M ⎦ ⎣ 3 ⎦ 011, 001, 101, dan sisa bit terakhir pada barisan dihilangkan. b. Tentukan proporsi πi pada setiap M-bit blok menggunakan persamaan: M
πi =
∑ ε (i − 1)M + j j =1
3
π1 =
∑ε j =1
3
(1−1)3+ j
3
=
3
π2 =
untuk , 1 ≤ i ≤ N
M
∑ε j =1
∑ε j =1
j
3
=
ε1 + ε 2 + ε 3 3
=
0 +1+1 2 = 3 3
3
(2 −1)3+ j
3
=
∑ε j =1
3
3+ j
=
ε4 + ε5 + ε6 3
=
0 + 0 +1 1 = 3 3
22
3
π3 =
∑ ε (3−1)3+ j j =1
3
3
=
∑ε j =1
6+ j
=
3
ε 7 + ε8 + ε9 3
=
1+ 0 +1 2 = 3 3
N
Hitung statistik χ 2 : χ 2 (obs) = 4M ∑ (π i − 1 2 ) 2 t =1
χ 2 (obs ) = 4 × 3 ×
((
2
)
− 1 2 ) + ( 1 3 − 1 2 ) + (2 3 − 1 2 ) = 1 2
3
2
2
c. Hitung P-value =igamc(N/2, χ 2 (obs)/2), dimana igamc adalah fungsi gamma tidak lengkap untuk Q(a, x). P-value = igamc ( 32 , 12 ) = 0.801252 d. Kaidah keputusan (pada level 1%), jika P-value yang dihitung < 0.01 maka disimpulkan bahwa barisan tersebut tidak random. Sebaliknya , disimpulkan bahwa barisan itu random. Karena P-value ≥ 0.01, yaitu 0.801252 ≥ 0.01, maka disimpulkan bahwa barisan tersebut adalah random.
3.3.3
Uji Runs
Uji ini merupakan total bilangan runs dalam sebuah barisan, dimana sebuah run adalah sebuah barisan bit-bit yang identik yang tidak terputus-putus. Panjang k sebuah run terdiri dari tepat k bit-bit yang identik dan sebelum dan sesudahnya dibatasi dengan sebuah bit dengan nilai yang berlawanan. Tujuan dari uji ini adalah untuk
23
menentukan apakah panjang dari variasi satu dan nol pada bilangan runs merupakan barisan yang random. Runs(n), di mana: n : panjang bit string
ε : adalah barisan bit-bit yang telah dibangkitkan oleh uji RNG atau PRNG, ini ada sebagai struktur global pada waktu pemanggilan fungsi; ε = ε 1 , ε 2 , Λ , ε n . Vn(obs) : total bilangan runs (yaitu total bilangan nol runs ditambah dengan total bilangan satu-runs) jarak lintasan semua n bit-bit. Uji statistik pada uji ini menggunakan distribusi χ 2 Langkah-langkah pengujian a. Hitung pre-tes bagian π satu dalam barisan input:
π=
∑ε j
j
n
Contoh: jika ε = 1001101011, maka n= 10
π=
π=
∑ε j
j
n
ε1 + ε 2 + ε 3 + ε 4 + ε 5 + ε 6 + ε 7 + ε 8 + ε 9 + ε10
n 1+ 0 + 0 +1+1+ 0 +1+ 0 +1+1 6 3 = = = 10 10 5
24
b. Tentukan jika prasyarat uji frequensi telah dilalui: jika dapat ditunjukan |π – 1/2| ≥ τ , maka uji runs tidak dapat dilakukan (yaitu uji harus tidak run). Jika uji tidak aplikabel, maka P-value adalah hinpunan 0.0000, di mana τ = 2 /
τ= 2
10
n.
≈ 0.63246 , maka | π -1/2| = |3/5 –1/2| =
0.1, karena 0.1< τ , dan uji adalah tidak run. c. Hitung uji statistik Vn (obs ) = ∑k =1 r (k ) + 1 , di mana n −1
r(k) = 0 jika ε k = ε k +1 dan r(k) = 1 jika sebaliknya. Karena ε = 1001101011, maka V10(obs ) = (1+0+1+0+1+1+1+1+0)+1=7 ⎛ Vn (obs ) − 2nπ (1 − π ) d. Hitung P-value = erfc ⎜⎜ 2 2n π (1 − π ) ⎝
⎞ ⎟ ⎟ ⎠
⎛ 7 − (2 • 10 • 53 (1 − 53 )) ⎞ ⎟ = 0.147232 P-Value =erfc ⎜ ⎜ 2 • 2 • 10 • 3 • (1 − 3 ) ⎟ 5 5 ⎠ ⎝ e. Kaidah keputusan (pada level 1%), jika P-value < 0,01 maka barisan adalah tidak random, dan sebaliknya. Karena P-value ≥ 0.01, yaitu 0.147232 ≥ 0.01, maka disimpulkan
bahwa
barisan
adalah
random.
25
BAB IV UJI KERANDOMAN BIT PADA DES
Pada bab ini akan dijelaskan analisis data yang dihasilkan setelah proses enkripsi. Analisis ini dilakukan untuk mengetahui kerandoman dari suatu barisan bit pada barisan input dan output pada DES. Barisan bit yang digunakan terdiri dari beberapa kata, satu kalimat, dan satu paragraf dengan jumlah bilangan binar yang berbeda akan tetapi menggunakan kunci yang sama. Pengujian pertama yang dilakukan adalah uji monobit, kemudian uji frequensi within a block, uji run, dan uji cumulative sum (cumsum).
4.1 Analisis Hasil
Untuk mengetahui kerandoman bit pada input dan output proses enkripsi algoritma DES, plainteks maupun chiperteks ditransformasikan ke dalam bentuk hexadesimal kemudian ditransformasikan kembali ke dalam bentuk bilangan binari. Plainteks yang akan digunakan untuk proses enkripsi diberikan pada lampiran 1.
26
4.1.1
Uji kerandoman Bit dengan Uji Statistik Monobit
Nilai Probabilitas (P-value) pada uji statistik kerandoman bit dengan menggunakan uji monobit dapat dilihat pada lamp. 4. Dalam pengambilan keputusan kriteria yang digunakan adalah sebagai berikut: Jika P-value < α (0.01), maka Ho ditolak Jika P-value ≥ α(0.01), maka Ho diterima Berdasarkan tabel P-value pada uji monobit untuk data input (plainteks) 81.67% barisan binarinya merupakan barisan yang random. Sedangkan untuk data output (chiperteks) 98.33% barisan binarinya merupakan barisan yang random. Dari data hasil yang didapat bahwa rata-rata untuk barisan binari pada data input (plainteks) dan output (chiperteks) yang merupakan hasil enkripsi pada DES dengan panjang barisan bit 64 memiliki P-value yang cukup besar dan
mendekati 1. Hal ini menunjukkan bahwa tingkat
kesamaan antara barisan binari 1 dan 0 cukup besar. Sedangkan untuk data dengan input satu kalimat dan satu paragraf sebagian besar juga memiliki tingkat kesamaan antara binari 1 dan 0-nya dan sebagian memiliki tingkat kesamaan yang kecil antara binari 1 dan 0-nya. Pada data input tingkat kesamaan terbesar terjadi pada barisan input yang memiliki nilai P-value 1 yang berarti bahwa jumlah barisan binari 1 dan 0 sama. Sedangkan tingkat kesamaan terkecil untuk data input yaitu 27
pada barisan binari dengan P-value 0.0002 yang menandakan bahwa terjadinya perbedaan yang cukup besar antara jumlah barisan binari 1 dan 0, hal ini memungkinkan terjadinya lebih besarnya jumlah binari 1 daripada 0 dalam suatu barisan bit ataupun sebaliknya. Untuk barisan bit yang merupakan hasil output proses enkripsi pada DES terlihat bahwa tingkat kesamaan tertinggi terjadi pada barisan bit dengan P-value 0.8700. Pada hasil output enkripsi tingkat kesamaan terkecil antara barisan binari 1 dan 0 terjadi pada P-value 0.0016, hal ini menunjukkan bahwa pada chiperteks hasil enkripsi pada DES terdapat ketidaksamaan pada barisan binari antara binari 1 dan binari 0. Pada hasil output enkripsi tidak terjadi perbedaan jumlah antara binari 1 dan 0 yang cukup besar.
4.1.2
Uji Kerandoman Bit dengan Frekuensi dengan Sebuah Blok
Nilai Probabilitas (P-value) pada uji statistik kerandoman bit dengan uji frekuensi within a block dapat dilihat pada lamp. 4. Dalam pengambilan keputusan kriteria yang digunakan adalah sebagai berikut: Jika P-value < α (0.01), maka Ho ditolak Jika P-value ≥ α(0.01), maka Ho diterima
28
Berdasarkan tabel P-value pada uji frekuensi dengan sebuah blok untuk data input (plainteks) maupun data output (chiperteks) 100% barisan binarinya merupakan barisan yang random. Dari data hasil yang didapat pada lampiran 4 untuk data input (plainteks) P-value terbesar adalah 0.9988 dengan nilai uji statistik 210. tingkat P-value terkecil adalah 0.0173 dengan nilai uji statistik adalah 30. Untuk hasil output enkripsi (chiperteks) DES didapat nilai terbesar Pvalue adalah 0.9876 dengan nilai uji statistik terkecil adalah 8. Nilai Pvalue terkecil adalah 0.0110 dengan nilai statistik 167.
4.1.3
UJi Kerandoman Bit dengan Uji Statistik Run
Nilai Probabilitas (P-value) pada uji statistik kerandoman bit dengan uji run dapat dilihat pada lamp. 4. Dalam pengambilan keputusan kriteria yang digunakan adalah sebagai berikut: Jika P-value < α (0.01), maka Ho ditolak Jika P-value ≥ α(0.01), maka Ho diterima Berdasarkan tabel P-value pada uji run untuk data input (plainteks) 80% barisan binarinya merupakan barisan yang random sedangkan data output (chiperteks) 100% barisan binarinya merupakan barisan yang random.
29
Berdasarkan data hail yang didapat pada lamp. 4 diketahui bahwa untuk data input (plainteks) terdapat ketidak randoman yang terbesar terjadi pada data input (plainteks) satu paragraf dengan nilai uji statistik 636 dan 612 dan P-value 0.0003. Untuk data hasil output (chiperteks) proses enkripsi DES berdasarkan nilai P-value untuk barisan binari yang diujikan adalah random. Kerandoman terbesar terjadi pada P-value 0.9750 dengan nilai uji statistik 32 dengan jumlah data 64. .
30
BAB V KESIMPULAN DAN SARAN 5.1 Kesimpulan
Analisis kerandoman yang dilakukan pada barisan binari input (plainteks) dan output (chiperteks) pada proses enkripsi kriptografi dengan menggunakan algoritma DES (Data Encryption Standard) . Dapat disimpulkan bahwa nilai pvalue untuk uji monobit pada barisan binari pada input (plainteks) merupakan barisan yang random. Untuk output hasil enkripsi pada algoritma DES berdasarkan nilai p-value didapat bahwa barisan binari yang dihasilkan merupakan barisan yang random, dengan tingkat kesamaan antara binari 1 dan 0 lebih besar dari barisan binari pada data input . Pada uji frekuensi within a block didapat bahwa barisan binari input (plainteks) dan output yang diujikan merupakan barisan yang random. Dimana, pada barisan binari output frekuensi binari 1 lebih sedikit dibandingkan dengan frekuensi 1 pada barisan binari input. Nilai p-value untuk uji run pada barisan input (plainteks) pada sebagian data merupakan barisan yang random untuk data yang kecil, sedangkan untuk data yang besar barisan binarinya merupakan barisan yang tidak random. Untuk output hasil enkripsi pada algoritma DES berdasarkan nilai p-value didapat bahwa barisan binari yang dihasilkan merupakan barisan yang random.
31
5.2 Saran
Penulis mengharapakan hasil analisis yang diperoleh dapat dijadikan argument yang cukup bagi pengguna algoritma DES, bahawa algoritma DES layak digunakan sebagai media di dalam mengamankan data atau informasi jika dipandang dari segi kerandoman bit pada output hasil enkripsi (chiperteks). Terdapat 16 deretan uji NIST untuk melakukan pengujian terhadap kerandoman suatu barisan bit, sebaiknya dilakukan uji-uji yang lain dan uji kerandoman narisan bit pada algoritma selain DES seperti RSA dan lain-lain untuk penelitian penelitian lebih lanjut.
32
REFERENSI
[1]
Ariyus, Dony. Kriptografi Keamanan Data dan Komunikasi. Graha
Ilmu: September 2005. [2]
Hogg, Robert V. and Allen T. Craig. Introduction to Mathematical
Statistics. New Jersey: Prentice-Hall, inc. 1995. [3]
Komputer, Wahana. Memahami Model Enkripsi dan Security Data.
Yogyakarta: ANDI OFFSET. 2003. [4]
Munir, Rinaldi. Kriptografi. Bandung: Penerbit Informatika.2005.
[5]
NIST. A Statistical Test Suite for Random and Pseudorandom Number
Generators for Cryptographic Application. United State of America: 2001. [6]
Raharjo, Budi. Keamanan Sistem Informasi Berbasis Internet.
Jakarta-Bandung: PT.INDOCISC-PT. Insan Infonesia. 1998-2002. [7]
Wagstaff, Samuel S. Crytanalysis of Number Theoretic Chiper. New
York: Champman & Hall/CRC. 2003. [8]
http://www.google.com/dosen/aji/computer_security/bab_2. html, [11/03/07 01:14:35 AM]
[9]
http://www.google.com/kriptografi. pdf, [01/15/08 11:27:10 AM]
33
LAMPIRAN
34
Lampiran 1
Plainteks dan Chiperteks dengan Menggunakan Kunci yang Sama
Kunci (Teks)
Browser Kunci (Heksadesimal)
42726F77736572 Plainteks Delapan Huruf dalam Bentuk Teks
1.
resolusi
2.
Marcella
3.
dilansir
4.
memasang
5.
berpesan
Plainteks Satu Kalimat dalam Bentuk Teks
1. Puluhan aset milik Pemprov DkI Jakarta terancam lepas. 2. Manfaat ASI sangat luar biasa. 3. Manusia tak boleh dikotak-kotakkan. 4. Penetapan perolehan kursi dilkukan antara 19-20 Mei. 5. Pemerintah Bekasi Alokasikan Rp 3 miliar untuk pasien gakin.
Plainteks Satu Paragrap dalam Bentuk Teks
1. Pasien gakin tinggal masuk.Biaya rumah sakitnya ditanggung APBD. Satu oaring pasien mendapat subsidi Rp 4 juta. 35
2. Dalam rangka memperingati Hari Kartini pada 21 April 2009, polisi wanita (polwan) yang bertugas di Samsat Kota Depok mengenakan kebaya. Para polwan tersebut ditempatkan dipintu masuk kantor Samsat Kota Depok. 3. Menurut Maswadi, SBY akan lebih nyaman jika berkoalisi dengan Partai Golkar. Jika Partai Golkar dan Demokrat berkoalisi maka akan berat bagi capres lain. 4. Persijap Jepara mengklaim menderita kerugian Rp 600 juta. Jumlah ini muncul akibat siaran lamgsung televisi dari tiga pertandingan home terarikhir. 5. Toyota F1 membuat keputusan mengejutkan. Tim bermarkas di cologne, Jerman, itu menyatakan mundur dari ajang balap jet darat tahun depan.
Plainteks
Delapan
Huruf
yang
Dikonfirmasi
ke
dalam
Bentuk
Heksadesimal
1. 7265736F6C757369 2. 4D617263656C6C61 3. 64696C616E736972 4. 6D656D6173616E67 5. 626572706573616E Plainteks Satu Kalimat yang Dikonfirmasi ke dalam Bentuk Heksadesimal
1. 4D616E66616174004153490773616E676174086C7561720A62696173612E
36
2. 4D616E757369610074616B07626F6C65680864696B6F74616B2D6B6F74 616B6B616E2E 3. 50656E65746170616E007065726F6C6568616E076B757273690864696C61 6B756B616E0A616E746172610D31392D3230204D65692E 4. 50656D6572696E7461680042656B61736907616C6F6B73696B616E08527 00A330D6D696C69617220756E74756B0070617369656E0767616B696E2 E 5. 496E766573746F72006D61736968076D656E616E74696B616E0870656E6
7756D756D616E0A5468650D46656420736F616C0073756B750762756E6 7612E Plainteks Satu Paragraf yang Dikonfirmasi ke dalam Bentuk Heksadesimal
1. 50617369656E0067616B696E0774696E6767616C086D6173756B2E0A426 96179610D72756D61682073616B69746E796100646974616E67677566E67 0741425042442E08536174750A6F72616E670D70617369656E206D656E6 461706174007375627369646907527008340A6A7574612E 2. 44616C616D0072616E676B61076D656D706572696E67617469084861726 90A4B617274696E690D7061646120323100417072696C07323030392C08 706F6C6973690A77616E6974610D28706F6C77616E292079616E6700626 57274756761730764690853616D7361740A4B6F74610D4465706F6B206D 656E67656E616B616E006B65626179612E075061726108706F6C77616E0 A74657273656275740D646974656D7061746B616E2064690070696E7475
37
076D6173756B084B616E746F720A53616D7361740D4B6F746120446570 6F6B2E 3. 4D656E757274004D6173776164692C0753425908616B616E0A6C6562696 80D6E79616D616E206A696B61006265726B6F616C6973690764656E676 16E085061727461690A476F6C6B61722E0D4A696B612050617274616900 44656D6F6B7261740764616E085061727461690A476F6C6B61720D62657 26B6F616C697369206D616B6100616B616E07626572617408626167690A 6361707265730D6C61696E2E 4. 50657273696A6170004A6570617261076D656E676B6C61696D086D656E 6465726974610A6B6572756769616E0D527020363030006A7574612E074 A756D6C616808696E690A6D756E63756C0D616B6962617420736961726 16E006C616E6773756E670774656C657669736908646172690A746967610 D70657274616E64696E67616E20686F6D6500746572616B6869722E 5. 546F796F7461004631076D656D62756174086B657075747573616E0A6D6
56E67656A75746B616E2E0D54696D206265726D61726B6173006469074 36F6C6F676E652C084A65726D616E2C0A6974750D6D656E796174616B 616E206D756E647572006461726907616A616E670862616C61700A6A657 40D646172617420746168756E00646570616E2E Chiperteks Delapan Huruf dalam Bentuk Heksadesimal
1. 0783EE6182FF646B 2. 80879566A3618EF4 3. 0E131A132F0CE08F 38
4. 41007C4E13F43FAC 5. D0E6A963CFE8E7AE
Chiperteks Satu Kalimat dalam Bentuk Heksadesimal
1. 9A3112F8B5148A58F077679402C55320544AB5D4CCA81755387452A56 5D996E5D5E0ABAB2F8FDDFA335B81B0780A02187BBBD9C724285E6 8 2. 16A0162DDE5D164E88FAA32F52364627D71C279A6E67C20B88650BD 70763FB0C 3. 733C580CE6B3ECC48B34B1CDB3E53990E04E49FC80F34B96E529F850 5E7B03F5 4. 084BD7CFD7F23C09CFF80EB3CF7912A996A7639CBF06052D41FE983 EC0DBEE75F10C29B124BC390F6ACA9E951EE2DB0229A3D09D8E62 A857 5. A053258314DFD28AFCF364F9B2577C0C98BA8DA41203EC00E65008D 16B3EF62F4FB27914FD30EA5F37B2B46BF2CA6143833F0120DB25DD 6C01BC5E9EEDB0 Ciperteks Satu Paragraf dalam Bentuk Heksadesimal
1. 8C54492A84AB1977DB792FF2A6BF5FB2D09D2FC7D86DAEF69F0E8F 9F199EA6B5BB26C1A0B7D954E99F9A7715BC7D221462DACCBD2FB 800CC0CF9E6626FC59503CB348FABA2435CBF2EF9D0DBE4871F8245
39
257BCCEC27D895061CC288D7C62A2A67209A421DC8D42AED1BAE0 2E3D3E5FC 2. 45F14E17E27732F95E32381AEA6447257319F78CAB30B078CC7F78C0F C5FBB0190D2DD26438A7A553159D58C1524C0DD57DE00236E002E91 EFCB58CFFA8F1877F822BB6AEF1A13242C899EA9630801100E049B01 1BC5CF70C9DE855936C4036914EE2DB9675D8F7178D5B309ED00C91 66370C47A1861D19C2110D97E5D888989B032CAD06803F72024E0B9E 99BE231C9D296392F9BC2EEB15BF87C1C06B92A5252B54A70E2F6080 03E8A4FDDCE3A5D7B229F93A7A94DC73417C13AD6D95B1E13F1A0 B0FD25F0A8DDA4702AC8721F4F66140E1E5421BAB23CB 3. F75D0AF9047D669182631E02A6793B0A9E0CC2843D1B9AE8A807E0A AAB0C5F432A6B0C67C76D0C84A714339CEC2B68D3B7217A9FFC617 1710E7667394C92BBD57F7DF271A1082C421E2F88EE5A223CA1C3CF0 7BE370C397994E83F630716F7C000A0D1B099584DC47F7DF271A1082 C4222AC476049E54F500A5F0E9A368FEDDB406DF1EF4045741F85217 0211B177E08C7F853EF3C78FC722E7965ACF4CA568A 4. EE0777C99D3E6747EF18351BEB31450C19CBB1D07D7649AE6D8A76B B1B9A4180644BBF3DC83934F9BBE2A084B88D3BCE17B8F98DB2385 5C38689B774FDF10E9B0564C234F17E102AAFA5BC42C34DA0E09377 AE404E7DD18C0D9BD5B2D4868B2F4C311C7D5C87EA1B4C3226E498 35CC3DE7D8E4CFE27773405D410E2156C0AAC1E8F7B6CF1699581E5 3803E7440B4CC140E1E5421BAB23CB 40
5. 7B529DBD4D7EF7BB0DD2E8E044FA6B99CD12B4BADD0EAB7229ED 441C04FE8F3E93516E572558D6F955D33F37E3B01CFC036EEF8AA396 C3D99D44EDE50CC566D4312E00A1D1A5EC2A0E98298840DF9BFC38 285E434F6F532F33EB51CD86B4AA85C3A498F9E2E134744E3D1AD4B 97B80778513F3C31E3AB9C47F764C9BBFC7D95F10CC1432A793EB31 F
41
Lampiran 2
Program Enkripsi dan Dekripsi Algoritma DES
/********************************************** *********************************************** DES Encrypt 0.0.2 by Sean Kane - http://celtickane.com Coder's note: the concept and general instructions to construct this program were taken from http://www.aci.net/kalliste/des.htm. All the DES encryption used is based off this website. Additionally, the general coding design of des_round was modeled after the a DES Javascript example (http://www.cs.eku.edu/faculty/styer/460/Encrypt/JS-DES.html) ********************************************** *********************************************/ //todo: check goto's on interface #define debug_mode 0 #define super_debug 0 #define TRUE 1 #define FALSE 0 //Header file includes #include <stdio.h> #include
#include <stdlib.h> //exit() #include <string.h> //strlen() #include //getch() #include <math.h> //pow() //Primary function prototypes (directly relate to DES) void des_encrypt (int bufMsgBin[ ],int bufKeyBin[ ],char do_encrypt,int buffer_out[ ] ); void des_round(int bufferL[ ], int prev_bufferL[ ], int bufferR[ ], int prev_bufferR[ ], int bufferK[ ], int round); void permutate(int buffer[ ], int pt_list[ ], int pt_list_count, int outbits, int buffer_out[ ]); void leftshift(int buffer[ ], int num_shifts, int buffer_out[ ]); //Supplementary function prototypes void verifylength(char buffer[ ], int length); void chr2bin(char buffer_ascii[ ], int buffer_bin[ ]); void hex2bin(char buffer_hex[ ], int buffer_bin[ ]); void print_binary(char title[ ], int buffer[ ], int size, int spacing, char sameline); //Permutation tables int pt_pc1[ ] = {57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,51,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,4 6,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4}; #define pt_pc1_count 56 int pt_pc2[ ] = {14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56 ,34,53,46,42,50,36,29,32}; #define pt_pc2_count 48
42
int pt_ip[ ] = {58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17, 9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7}; #define pt_ip_count 64 int pt_ebit[ ] = {32,1,2,3,4,5,4,5,6,7,8,9,8,9,10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29 ,28,29,30,31,32,1}; #define pt_ebit_count 48 int pt_p[ ] = {16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,2,8,24,14,32,27,3,9,19,13,30,6,22,11,4,25}; #define pt_p_count 32 int pt_ip_1[ ] = {40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,6 0,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25}; #define pt_ip_1_count 64 //s transformation tables int pt_s[8][4][16] = { //S1 14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7, 0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8, 4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0, 15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13, //S2 15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10, 3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5, 0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15, 13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9, //S3 10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8, 13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1, 13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7, 1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12, //S4 7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15, 13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9, 10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4, 3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14, //S5 2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9, 14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6, 4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14, 11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3, //S6 12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11, 10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8, 9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6, 4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13, //S7 4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1, 13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6, 1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2, 6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12,
43
//S8 13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7, 1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2, 7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8, 2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11 }; int main() { char bufMsgHex[16], bufMsgAscii[8]; //Message variables int bufMsgBin[64], bufKeyBin[64]; //Binary variables char bufKeyHex[16], bufKeyAscii[8]; //Key variables int bufOutputBin[64], bufOutputHex[16], bufOutputAscii[8]; char chrPrompt, chrSecPrompt; int i,j; //The first thing we're concerned about is getting the user input //All the main() function does is process the initial input, parse it //into the data that we want, then call a function that will encrypt for(;;) { printf("(E)ncrypt, (D)ecrypt, (Q)uit: "); chrPrompt = getchar(); switch( chrPrompt ) { //********************************************** //Interface for encryption //********************************************** case 'e': case 'E': //Get the message from the user fflush(stdin); //clear the garbage out of the input buffer printf("Is the message in (H)exidecimal or (A)scii? "); gReevalEMsg: //If they didn't type in H or A...make them do it again chrSecPrompt = getchar(); switch( chrSecPrompt ) { case 'h': case 'H': gEReenterMsgHex: printf("Enter 16-digit hexidecimal message: "); scanf("%16s", bufMsgHex); verifylength(bufMsgHex,16); //Let's verify all the digits are hexidecimal... for(i=0;i<16;i++) { if( !(((bufMsgHex[i]>47) && (bufMsgHex[i]<58)) || ((bufMsgHex[i]>64) && (bufMsgHex[i]<71)) || ((bufMsgHex[i]>96) && (bufMsgHex[i]<103)))) { printf("Hexidecimal numbers may only contain numbers 0-9 and letters A-F\n"); goto gReenterKeyHex; } } hex2bin(bufKeyHex,bufKeyBin); break; case 'a': case 'A': printf("Enter 8-digit ascii message: "); scanf("%8s", bufKeyAscii);
44
verifylength(bufKeyAscii,8); chr2bin(bufMsgAscii,bufMsgBin); break; default: printf("Please type H or A:"); fflush(stdin); goto gReevalEMsg; break; } if(debug_mode) { print_binary("Message binary: ",bufMsgBin,64,8, FALSE); } //Get the key from the user fflush(stdin); //clear the garbage out of the input buffer printf("Is the key in (H)exidecimal or (A)scii? "); gReevalEKey: //If they didn't type in H or A...make them do it again chrSecPrompt = getchar(); switch( chrSecPrompt ) { case 'h': case 'H': gReenterKeyHex: printf("Enter 16-digit hexidecimal key: "); scanf("%16s", bufKeyHex); verifylength(bufKeyHex,16); //Let's verify all the digits are hexidecimal... for(i=0;i<16;i++) { if( !(((bufKeyHex[i]>47) && (bufKeyHex[i]<58)) || ((bufKeyHex[i]>64) && (bufKeyHex[i]<71)) || ((bufKeyHex[i]>96) && (bufKeyHex[i]<103)))) { printf("Hexidecimal numbers may only contain numbers 0-9 and letters A-F\n"); goto gReenterKeyHex; } } hex2bin(bufKeyHex,bufKeyBin); break; case 'a': case 'A': printf("Enter 8-digit ascii key: "); scanf("%8s", bufKeyAscii); verifylength(bufKeyAscii,8); chr2bin(bufKeyAscii,bufKeyBin); break; default: printf("Please type H or A:"); fflush(stdin); goto gReevalEKey; break; } if(debug_mode) { print_binary("Key binary: ",bufKeyBin,64,8, FALSE); } des_encrypt(bufMsgBin,bufKeyBin,TRUE,bufOutputBin); //Convert bufEncrypted to hex and ascii printf("Hexidecimal output: "); for(i=0;i<16;i++) { j = bufOutputBin[i*4] * 8 + bufOutputBin[i*4+1] * 4 + bufOutputBin[i*4+2] * 2 + bufOutputBin[i*4+3]; bufOutputHex[i] = j; printf("%x",bufOutputHex[i]); }
45
printf("\n"); break; //********************************************** //Interface for decryption //********************************************** case 'd': case 'D': //Get the message from the user fflush(stdin); //clear the garbage out of the input buffer printf("Is the ciphertext in (H)exidecimal or (A)scii? "); gReevalDMsg: //If they didn't type in H or A...make them do it again chrSecPrompt = getchar(); switch( chrSecPrompt ) { case 'h': case 'H': gDReenterMsgHex: printf("Enter 16-digit hexidecimal ciphertext: "); scanf("%16s", bufMsgHex); verifylength(bufMsgHex,16); //Let's verify all the digits are hexidecimal... for(i=0;i<16;i++) { if( !(((bufMsgHex[i]>47) && (bufMsgHex[i]<58)) || ((bufMsgHex[i]>64) && (bufMsgHex[i]<71)) || ((bufMsgHex[i]>96) && (bufMsgHex[i]<103)))) { printf("Hexidecimal numbers may only contain numbers 0-9 and letters A-F\n"); goto gDReenterMsgHex; } } hex2bin(bufMsgHex,bufMsgBin); break; case 'a': case 'A': printf("Enter 8-digit ascii ciphertext: "); scanf("%8s", bufMsgAscii); verifylength(bufMsgAscii,8); chr2bin(bufMsgAscii,bufMsgBin); break; default: printf("Please type H or A:"); fflush(stdin); goto gReevalDMsg; break; } if(debug_mode) { print_binary("Ciphertext binary: ",bufMsgBin,64,8, FALSE); } //Get the key from the user fflush(stdin); //clear the garbage out of the input buffer printf("Is the key in (H)exidecimal or (A)scii? "); gReevalDKey: //If they didn't type in H or A...make them do it again chrSecPrompt = getchar(); switch( chrSecPrompt ) { case 'h': case 'H': gDReenterKeyHex: printf("Enter 16-digit hexidecimal key: "); scanf("%16s", bufKeyHex); verifylength(bufKeyHex,16); //Let's verify all the digits are hexidecimal...
46
for(i=0;i<16;i++) { if( !(((bufKeyHex[i]>47) && (bufKeyHex[i]<58)) || ((bufKeyHex[i]>64) && (bufKeyHex[i]<71)) || ((bufKeyHex[i]>96) && (bufKeyHex[i]<103)))) { printf("Hexidecimal numbers may only contain numbers 0-9 and letters A-F\n"); goto gDReenterKeyHex; } } hex2bin(bufKeyHex,bufKeyBin); break; case 'a': case 'A': printf("Enter 8-digit ascii key: "); scanf("%8s", bufKeyAscii); verifylength(bufKeyAscii,8); chr2bin(bufKeyAscii,bufKeyBin); break; default: printf("Please type H or A:"); fflush(stdin); goto gReevalDKey; break; } if(debug_mode) { print_binary("Key binary: ",bufKeyBin,64,8, FALSE); } des_encrypt(bufMsgBin,bufKeyBin,FALSE,bufOutputBin); //Output as hex and ascii printf("Hexidecimal output: "); for(i=0;i<16;i++) { j = bufOutputBin[i*4] * 8 + bufOutputBin[i*4+1] * 4 + bufOutputBin[i*4+2] * 2 + bufOutputBin[i*4+3]; bufOutputHex[i] = j; printf("%x",bufOutputHex[i]); } printf("\nAscii output: "); for(i=0;i<8;i++) { j = bufOutputBin[i*8] * 128 + bufOutputBin[i*8+1] * 64 + bufOutputBin[i*8+2] * 32 + bufOutputBin[i*8+3] * 16 + bufOutputBin[i*8+4] * 8 + bufOutputBin[i*8+5] * 4 + bufOutputBin[i*8+6] * 2 + bufOutputBin[i*8+7]; bufOutputAscii[i] = j; printf("%c",bufOutputAscii[i]); } printf("\n"); break; case 'q': case 'Q': exit(1); break; default: fflush(stdin); //clear the garbage out of the input buffer printf("Please type E, D, or Q\n"); break; } //end select fflush(stdin); } //end for getch(); return 0; }
47
//********************************************** //Primary functions -- directly relate to DES encryption //********************************************** void des_encrypt(int bufMsgBin, int bufKeyBin, char do_encrypt, int buffer_out) { //buffer_out will contain the encrypted phrase int bufKeyBin56[56], bufKeyC16[17][28], bufKeyD16[17][28], bufKeyCD56[17][56], bufKeyCD48[17][48]; //Key variables int bufMsgBinIP[64], bufMsgBinL[17][32], bufMsgBinR[17][32], bufMsgBinRL[17][64]; int i,j; //********************************************** //Step 1: Encode the 64-bit key //********************************************** //*********************** //Step 1.1: permutate the 64-bit key into a 56-bit key using table pc_1 [verified] //*********************** permutate(bufKeyBin,pt_pc1,pt_pc1_count,56,bufKeyBin56); if(debug_mode) { print_binary("After permutating the key with table pc_1: ",bufKeyBin56,56,7, FALSE); } //*********************** //Step 1.2: split the 64-bit key into 2, 28-bit keys //*********************** for(i=0;i<28;i++) { bufKeyC16[0][i] = bufKeyBin56[i]; } for(i=28;i<56;i++) { bufKeyD16[0][i-28] = bufKeyBin56[i]; } if(debug_mode) { printf("After splitting the key from 56-bit to 2, 28-bits:\n"); print_binary("C[0]: ",bufKeyC16[0],28,7,FALSE); print_binary("D[0]: ",bufKeyD16[0],28,7,FALSE); } //*********************** //Step 1.3: make 16 CD subkeys, each left shift 1 or 2, then concatenate CD //*********************** if(debug_mode) { printf("\nAfter left-shifting the key and concatenation: \n"); } for(i=0;i<=16;i++) { if ( i==0 ) { //don't do stuff to it... for(j=0;j<28;j++) { //Concatenate half of it bufKeyCD56[i][j] = bufKeyC16[i][j]; } for(j=0;j<28;j++) { //Concatenate the other half bufKeyCD56[i][j+28] = bufKeyD16[i][j]; } goto skipshifts; } if( (i==1) || (i==2) || (i==9) || (i==16) ) { leftshift(bufKeyC16[i-1],1,bufKeyC16[i]); for(j=0;j<28;j++) { //Concatenate half of it bufKeyCD56[i][j] = bufKeyC16[i][j]; } leftshift(bufKeyD16[i-1],1,bufKeyD16[i]); for(j=0;j<28;j++) { //Concatenate the other half bufKeyCD56[i][j+28] = bufKeyD16[i][j];
48
} } else { leftshift(bufKeyC16[i-1],2,bufKeyC16[i]); for(j=0;j<28;j++) { //Concatenate half of it bufKeyCD56[i][j] = bufKeyC16[i][j]; } leftshift(bufKeyD16[i-1],2,bufKeyD16[i]); for(j=0;j<28;j++) { //Concatenate the other half bufKeyCD56[i][j+28] = bufKeyD16[i][j]; } } skipshifts: if(debug_mode) { printf("CD[%2d] - ",i); for(j=0;j<56;j++) { printf("%d",bufKeyCD56[i][j]); if(((j+1) % 7) == 0) { printf(" "); } } printf("\n"); } } //*********************** //Step 1.4: permutate CD[1-16] using table pc_2 //*********************** if(debug_mode) { printf("\nAfter permutating the key with table pc_2: \n"); } for(i=1;i<=16;i++) { permutate(bufKeyCD56[i],pt_pc2,pt_pc2_count,48,bufKeyCD48[i]); if(debug_mode) { printf("CD[%2d] - ",i); for(j=0;j<48;j++) { printf("%d",bufKeyCD48[i][j]); if(((j+1) % 6) == 0) { printf(" "); } } printf("\n"); } } //*********************** //End of Step 1 //We've completed all the changes to the key that we need to. //In step 2, we'll deal with the plaintext message //*********************** //********************************************** //Step 2: Encode the 64-bit plaintext data //********************************************** //*********************** //Step 2.1: permutate the 64-bit plaintext message into //an encrypted 64-bit data message using table IP //*********************** permutate(bufMsgBin,pt_ip,pt_ip_count,64,bufMsgBinIP); if(debug_mode) { print_binary("After permutating the message with table IP: ",bufMsgBinIP,64,8,FALSE);} //*********************** //Step 2.3: split up the permutated message into a 32-bit left and right section
49
//*********************** for(i=0;i<32;i++) { (do_encrypt) ? bufMsgBinL[0][i] = bufMsgBinIP[i] : bufMsgBinL[17][i] = bufMsgBinIP[i]; //We do 17 for decryption } for(i=32;i<64;i++) { (do_encrypt) ? bufMsgBinR[0][i-32] = bufMsgBinIP[i] : bufMsgBinR[17][i-32] = bufMsgBinIP[i]; //Decryption } if(debug_mode) { printf("After splitting the message into L and R: \n"); print_binary("L[0]",bufMsgBinL[0],32,8,FALSE); print_binary("R[0]",bufMsgBinR[0],32,8,FALSE); } //*********************** //Step 2.4: Run through 16 des rounds //Note: This is the ONLY place where decryption is different than encryption //*********************** //Encrypting or decrypting? if (do_encrypt) { //Encrypting... for(i=1;i<=16;i++) { des_round(bufMsgBinL[i],bufMsgBinL[i-1],bufMsgBinR[i],bufMsgBinR[i1],bufKeyCD48[i],i); } } else { //Decrypting...just do the reverse of encrypting for(i=16;i>=1;i--) { des_round(bufMsgBinL[i],bufMsgBinL[i+1],bufMsgBinR[i],bufMsgBinR[i+1],bufKeyCD48[i],(17-i)); } } //*********************** //Step 2.5: Concatenate L and R...but reverse the order, so it's RL instead of LR //*********************** for(i=0;i<17;i++) { for(j=0;j<32;j++) { bufMsgBinRL[i][j] = bufMsgBinR[i][j]; } for(j=0;j<32;j++) { bufMsgBinRL[i][j+32] = bufMsgBinL[i][j]; } } if(debug_mode) { printf("After concatenation of L and R in reverse order: \n"); print_binary("RL[16]",bufMsgBinRL[16],64,8,FALSE); } //*********************** //Step 2.6: permutate RL[16] using table ip_1 //*********************** (do_encrypt) ? permutate(bufMsgBinRL[16],pt_ip_1,pt_ip_1_count,64,buffer_out) : permutate(bufMsgBinRL[1],pt_ip_1,pt_ip_1_count,64,buffer_out); if(debug_mode) {
50
print_binary("Final output",buffer_out,64,8,FALSE); } //The function that called this function should use buffer_out and parse it itself... //The output (buffer_out) is a 64-bit, binary variable } void des_round(int bufferL, int prev_bufferL, int bufferR, int prev_bufferR, int bufferK, int round) { //We should be accepting L[i], R[i-1], and key[i] -- if we're decrypting, we'll taken R[i+1] int bufferR48[48], bufferXOR48[48], bufferS32[32], bufferP32[32]; int intRows, intCols, tempDec; //Variables for the s-tables int i; //*********************** //Step 3.1: L[i] = R[i-1] //*********************** for(i=0;i<32;i++) { bufferL[i] = prev_bufferR[i]; } //*********************** //Step 3.2: permutate R from 32-bits to 48-bits (matches key) using table ebit //*********************** permutate(prev_bufferR,pt_ebit,pt_ebit_count,48,bufferR48); //*********************** //Step 3.3: XOR bufferR48 and the key //*********************** for(i=0;i<48;i++) { bufferXOR48[i] = bufferR48[i] ^ bufferK[i]; } if(super_debug) { printf("After permutating R with ebit and XORing it with the key:"); print_binary("R[*]",bufferR48,48,6,FALSE); print_binary("K[*]",bufferK,48,6,FALSE); print_binary("R XOR K",bufferXOR48,48,6,FALSE); printf("\n"); } //************ //Substep 3.4 - Split the current 48-bit message into 6-bits, which uses tables S1 through S8 to convert into 8, 4-bit message //************ //Grab the first and sixth bits, convert them to decimal, then add them -- this equals our rows for(i=0;i<8;i++) { //Figure out the row and column of the s-box we'll use intRows = (bufferXOR48[6*i] *2) + bufferXOR48[6*i+5]; intCols = (bufferXOR48[6*i+1]*8) + (bufferXOR48[6*i+2]*4) + (bufferXOR48[6*i+3]*2) + (bufferXOR48[6*i+4]*1); //Find the new values and place them into tempDec, mess with them, then put them into bufMsgS32 tempDec = pt_s[i][intRows][intCols]; //Convert tempDec into binary and place it into bufMsgS32, four bits at a time //1st bit if (tempDec < 8) { (bufferS32[4*i] = 0); }
51
else { bufferS32[4*i] = 1; tempDec = tempDec-8;} //2nd bit if (tempDec < 4) { (bufferS32[4*i+1] = 0); } else { bufferS32[4*i+1] = 1; tempDec = tempDec-4; //3rd bit if (tempDec < 2) { (bufferS32[4*i+2] = 0); } else { bufferS32[4*i+2] = 1; tempDec = tempDec-2; //4th bit if (tempDec == 1) { (bufferS32[4*i+3] = 1); } else { bufferS32[4*i+3] = 0;}
} }
} if(super_debug) { printf("After permutating with X boxes into 32-bits:"); print_binary("R[32-bit]",bufferS32,32,4,FALSE); printf("\n"); } //************ //Substep 3.5 - Permutate the 32-bit message using table P //************ permutate(bufferS32,pt_p,pt_p_count,32,bufferP32); if(super_debug) { printf("After permutating with table P:"); print_binary("R=",bufferP32,32,8,TRUE); printf("\n"); } //************ //Substep 3.6 - XOR bufferP32 with prev_bufferL to return the bufferR value //************ for(i=0;i<32;i++) { bufferR[i] = prev_bufferL[i] ^ bufferP32[i]; } if(super_debug) { printf("After XORing bufferP32 with bufferL[i-1]"); print_binary("R=",bufferR,32,8,TRUE); printf("\n"); } if(debug_mode) { printf("\nRound %d Summary",round); print_binary("L[i] = ",bufferL,32,8,TRUE); print_binary("R[i] = ",bufferR,32,8,TRUE); } } void permutate(int buffer, int pt_list, int pt_list_count, int outbits, int buffer_out) { int i, newpos; //reset all bits of buffer_out to 0's for(i=0;i
52
newpos = pt_list[i] -1; buffer_out[i] = buffer[newpos]; } } void leftshift(int buffer, int num_shifts, int buffer_out) { int i, j; j = num_shifts; //shift buffer for(i=0;i<28;i++) { buffer_out[i] = buffer[j]; j++; if(j == 28) { j=0; } } }
53
//********************************************** //Supplementary functions -- not essential to DES, but used //********************************************** void verifylength(char buffer, int length) { //If a string is too short, buffer it with 0's int i; if( strlen(buffer) != length) { for(i=(strlen(buffer));i47) && (digit<58) ) { //it's a number...convert it to 0-9 rather than 48-57 (ascii) digit = digit - 48; } //Turn A-F into 10-15 switch ( digit) { case 'A': case 'a': digit = 10; break; case 'B': case 'b': digit = 11; break; case 'C': case 'c': digit = 12; break; case 'D': case 'd': digit = 13; break; case 'E': case 'e': digit = 14; break; case 'F': case 'f': digit = 15; break; } //All that's left is to convert the hex numbers into binary digits (4 binary per 1 hex) //First bit if (digit >= 8) { buffer_bin[curarray] = 1; digit = digit -8; } else { buffer_bin[curarray] = 0; } curarray++; //Second bit if (digit >= 4) { buffer_bin[curarray] = 1; digit = digit -4; } else { buffer_bin[curarray] = 0; } curarray++; //Third bit if (digit >= 2) { buffer_bin[curarray] = 1; digit = digit -2; } else { buffer_bin[curarray] = 0; } curarray++; //Fourth bit if (digit == 1) { buffer_bin[curarray] = 1; }
54
else { buffer_bin[curarray] = 0; } curarray++; } //next j } void chr2bin(char buffer_ascii, int buffer_bin) { int i, j, k, temp[8], highpower, leading0, curarray=0; char letter; for(j=0;j<8;j++) { //cycle through buffer_ascii k=0; letter = buffer_ascii[j]; //we'll work on 'letter' for a while //find the highest possible power for(i=0;;i++) { if(pow(2,i) > letter) { highpower = i; break; } } for(i=highpower;i!=-1;i--) { if(letter>=pow(2,i)) { letter = letter - pow(2,i); temp[k] = 1; } else { temp[k] = 0; } k++; } leading0 = 8 - k; //Put on the number of leading zeros we need to... for(k=0;k
55
Lampiran 3.
Tabel ASCII (American Standard Code for Information Interchange)
TABEL ASCII
Desimal
Karakter
Binary
Heksadesimal
00000000
00
00000001
01
00000010
02
00000011
03
00000100
04
00000101
05
00000110
06
007
00000111
07
008
00001000
08
00001001
09
00001010
0A
00001011
0B
00001100
0C
00001101
0D
00001110
0E
00001111
0F
00010000
10
00010001
11
00010010
12
00010011
13
00010100
14
00010101 00010110
15 16
00010111
17
00011000
18
00011001
19
00011010
1A
00011011
1B
00011100
1C
00011101
1D
000 001 002 003 004 005 006
009
☺ ☻ ♥ ♦ ♣ ♠
○
010 011 012
♂ ♀
013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029
♫ ☼ ► ◄ ↕ ‼ ¶ § ▬ ↕ ↑ ↓ → ← ∟ ↔
56
030 031
▲ ▼
032 033 034 035 036 037 038
! " # $ % &
039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066
( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B
00011110
1E
00011111
1F
00100000
20
00100001
21
00100010
22
00100011
23
00100100
24
00100101
25
00100110
26
00100111
27
00101000
28
00101001
29
00101010
2A
00101011
2B
00101100
2C
00101101
2D
00101110
2E
00101111
2F
00110000
30
00110001
31
00110010
32
00110011
33
00110100
34
00110101
35
00110110
36
00110111
37
00111000
38
00111001
39
00111010
3A
00111011
3B
00111100
3C
00111101
3D
00111110
3E
00111111
3F
01000000
40
01000001
41
01000010
42
57
067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 089 090 091 092 093 094 095 096 097 098 099 100 101 102
C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f
01000011
43
01000100
44
01000101
45
01000110
46
01000111
47
01001000
48
01001001
49
01001010
4A
01001011
4B
01001100
4C
01001101
4D
01001110
4E
01001111
4F
01010000
50
01010001
51
01010010
52
01010011
53
01010100
54
01010101
55
01010110
56
01010111
57
01011000
58
01011001
59
01011010
5A
01011011
5B
01011100
5C
01011101
5D
01011110
5E
01011111
5F
01100000
60
01100001
61
01100010
62
01100011
63
01100100
64
01100101
65
01100110
66
58
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
g h i j k l m n o p q r s t u v w x y z { | } ~ ⌂ Ç ü é â ä á å ç ê ë è
01100111
67
01101000
68
01101001
69
01101010
6A
01101011
6B
01101100
6C
01101101
6D
01101110
6E
01101111
6F
01110000
70
01110001
71
01110010
72
01110011
73
01110100
74
01110101
75
01110110
76
01110111
77
01111000
78
01111001
79
01111010
7A
01111011
7B
01111100
7C
01111101
7D
01111110
7E
01111111
7F
10000000
80
10000001
81
10000010
82
10000011
83
10000100
84
10000101
85
10000110
86
10000111
87
10001000
88
10001001
89
10001010
8A
59
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
ï î ì Ä Å É æ Æ ô ö ò û ù ÿ Ö Ü ¢ £ ¥ ₧ ƒ á í ó ú ñ Ñ ª º ¿ ⌐ ¬ ½ ¼ ¡ «
10001011
8B
10001100
8C
10001101
8D
10001110
8E
10001111
8F
10010000
90
10010001
91
10010010
92
10010011
93
10010100
94
10010101
95
10010110
96
10010111
97
10011000
98
10011001
99
10011010
9A
10011011
9B
10011100
9C
10011101
9D
10011110
9E
10011111
9F
10100000
A0
10100001
A1
10100010
A2
10100011
A3
10100100
A4
10100101
A5
10100110
A6
10100111
A7
10101000
A8
10101001
A9
10101010
AA
10101011
AB
10101100
AC
10101101
AD
10101110
AE
60
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210
» ░ ▒ ▓ │ ┤ ╡ ╢ ╖ ╕ ╣ ║ ╗ ╝ ╜ ╛ ┐ └ ┴ ┬ ├ ─ ┼ ╞ ╟ ╚ ╔ ╩ ╦ ╠ ═ ╬ ╧ ╨ ╤ ╥
10101111
AF
10110000
B0
10110001
B1
10110010
B2
10110011
B3
10110100
B4
10110101
B5
10110110
B6
10110111
B7
10111000
B8
10111001
B9
10111010
BA
10111011
BB
10111100
BC
10111101
BD
10111110
BE
10111111
BF
11000000
C0
11000001
C1
11000010
C2
11000011
C3
11000100
C4
11000101
C5
11000110
C6
11000111
C7
11001000
C8
11001001
C9
11001010
CA
11001011
CB
11001100
CC
11001101
CD
11001110
CE
11001111
CF
11010000
D0
11010001
D1
11010010
D2
61
211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246
╙ ╘ ╒ ╓ ╫ ╪ ┘ ┌ █ ▄ ▌ ▐ ▀ α β Γ π ∑ σ μ τ Ф Θ Ω δ ∞ φ ε ∩ ≡ ± ≥ ≤ ⌠ ⌡ ÷
11010011
D3
11010100
D4
11010101
D5
11010110
D6
11010111
D7
11011000
D8
11011001
D9
11011010
DA
11011011
DB
11011100
DC
11011101
DD
11011110
DE
11011111
DF
11100000
E0
11100001
E1
11100010
E2
11100011
E3
11100100
E4
11100101
E5
11100110
E6
11100111
E7
11101000
E8
11101001
E9
11101010
EA
11101011
EB
11101100
EC
11101101
ED
11101110
EE
11101111
EF
11110000
F0
11110001
F1
11110010
F2
11110011
F3
11110100
F4
11110101
F5
11110110
F6
62
247 248 249 250 251 252 253 254 255
≈ ° · · √ ⁿ ² ■
11110111
F7
11111000
F8
11111001
F9
11111010
FA
11111011
FB
11111100
FC
11111101
FD
11111110
FE
11111111
FF
63
Lampiran 4. Tabel Nilai P-value Input (Plainteks ) dan Output (Cipherteks ) Hasil Enkripsi Algoritma DES
Tabel P-value Input (Plainteks) dan Output (Chiperteks) Uji Monobit
No.
Jumlah Bit Input
Uji Statistik
P-value Input
Ket
Jumlah Bit Output
Uji Statistik
P-value Otput
Ket
1
64
1.2500
0.2113
Random
64
0.2500
0.8026
Random
2
64
0.5000
0.6171
Random
64
0.7500
0.4533
Random
No.
Jumlah Bit Input
Uji Statistik
P-value Input
Ket
1
432
2.0269
0.0269
Random
Jumlah Bit Output 448
2
240
2.0656
0.0389
Random
3
280
0.1195
0.9049
Random
4
424
1.8454
0.0650
5
472
1.2888
6
488
7
536
Uji Statistik
P-value Otput
Ket
0.9449
0.3447
Random
256
0.5000
0.6171
Random
280
0.2390
0.8111
Random
Random
448
0.4725
0.6366
Random
0.1975
Random
512
0.5303
0.5959
Random
0.4527
0.6508
Random
512
0.6187
0.5361
Random
0.2592
0.7955
Random
576
1.2500
0.2113
Random
3
64
0.0000
1.0000
Random
64
1.2500
0.2113
Random
4
64
0.7500
0.4533
Random
64
0.7500
0.4533
Random
5
64
0.2500
0.8026
Random
64
1.2500
0.2113
Random
6
64
0.5000
0.6171
Random
64
1.7500
0.0801
Random
7
64
1.2500
0.2113
Random
64
1.7500
0.0801
Random
8
352
1.1726
0.2410
Random
384
2.0412
0.0412
Random
8
64
0.0000
1.0000
Random
64
0.5000
0.6171
Random
9
560
1.6903
0.0910
576
0.6667
0.5050
Random
9
64
0.0000
1.0000
Random
64
1.7500
0.0801
Random
10
504
2.9399
0.0033
512
0.3536
0.7237
Random
10
64
1.5000
0.1336
Random
64
1.2500
0.2113
Random
11
64
Random
64
Random
464
2.2283
0.0259
512
0.7071
0.4795
Random
0.2500
0.8026
11
0.7500
0.4533
Random Tdk random Random
12
488
2.5350
0.0112
Random
512
0.2652
0.7909
Random
12
64
0.7500
0.4533
Random
64
0.0000
1.0000
Random
13
480
2.0996
0.0358
Random
512
1.3258
0.1849
Random
13
64
0.5000
0.6171
Random
64
0.7500
0.4533
Random
14
560
0.8452
0.3980
Random
576
0.6667
0.5050
Random
14
64
0.0000
1.0000
Random
64
0.2500
0.8026
Random
15
472
0.1841
0.8539
Random
512
0.4419
0.6585
Random
15
64
0.5000
0.6171
Random
64
1.2500
0.2113
Random
16
368
0.8341
0.4042
Random
384
1.2247
0.2207
Random
16
64
0.7500
0.4533
Random
64
0.2500
0.8026
Random
17
320
1.1180
0.2636
Random
320
1.0062
0.3143
17
64
0.0000
1.0000
Random
64
1.0000
0.3173
Random
18
384
1.2207
0.2207
Random
384
3.1639
0.0016
18
64
2.0000
0.0455
Random
64
1.0000
0.3173
Random
19
64
Random
64
Random
0.7000
0.4839
0.4725
0.6366
20
64
0.8026
Random
64
1.0000
0.3173
Random
20
712
2.7733
0.0055
768
1.5877
0.1124
Random
0.2500
Random Tdk random
448
0.7500
0.4533
400
0.2500
0.8026
19
Random Tdk random Random
64
No.
Jumlah Bit Input
Uji Statistik
P-value Input
1
1280
3.4100
0.0006
2
1672
3.6195
0.0003
3
888
2.5504
0.0108
4
1160
2.7012
0.0069
5
1088
2.3647
0.0180
Ket. Tdk random Tdk random Tdk random
Jumlah Bit Output
Uji Statistik
P-value Otput
Ket.
1280
0.8944
0.3711
Random
1728
1.7802
0.0750
Random
896
1.1359
0.2560
Random
1216
0.6190
0.5281
Random
1088
1.3946
0.1631
Random
1408
0.9061
0.3649
Random
6
1384
2.6343
0.0084
7
1112
2.5190
0.0118
Tdk random Random
1152
0.7660
0.4437
Random
8
744
2.4197
0.0155
Random
768
1.0825
0.2790
Random
1152
1.6499
0.0990
Random
1152
0.4125
0.6800
Random
1344
0.5455
0.5854
Random
1216
0.2294
0.8185
Random
1344
0.1637
0.8700
Random
1152
2.2392
0.0251
Random
1280
0.8944
0.3711
Random
1024
1.6875
0.0915
Random
9
1112
2.3990
0.0164
Random
10
1040
1.8605
0.0628
Random
11
1328
3.6771
0.0002
12
1168
3.2186
0.0013
13
1336
3.5566
0.0004
14
1104
3.1300
0.0017
15
1232
2.1653
0.0304
16
976
2.7528
0.0059
17
1056
2.2156
0.0267
Tdk random Tdk random Tdk random Tdk random Random Tdk random Random
1088
0.7276
0.4669
Random
18
1152
1.7678
0.0771
Random
1152
0.7660
0.4437
Random
19
1040
1.7365
0.0825
Random
1088
0.3638
0.7160
Random
20
872
2.0996
0.0358
Random
896
2.5390
0.0111
Random
65
Tabel P-value Input (Plainteks) dan Output (Chiperteks) Uji Frequency Within a Block
Jumlah Bit Input
Uji Statistik
P-value Input
Ket.
Jumlah Bit Output
Uji Statistik
P-value Otput
Ket.
No.
Jumlah Bit Input
Uji Statistik
P-value Input
Ket.
Jumlah Bit Output
Uji Statistik
P-value Otput
Ket.
1
64
9
0.9331
Random
64
18
0.4075
Random
1
432
103
0.6514
Random
448
106
0.6737
Random
2
64
30
0.0173
Random
64
15
0.6179
Random
2
240
50
0.8428
Random
256
66
0.4532
Random
0.9862
Random
0.0471
Random
0.7989
Random
280
76
0.3279
Random
64
23
0.1447
Random
4
424
93
0.8316
Random
448
127
0.1739
Random
64
15
0.6179
Random
5
472
102
0.8671
Random
512
162
0.0226
Random
0.8589
Random
0.8903
Random
512
127
0.5416
Random
7
536
105
0.9704
Random
576
157
0.2367
Random
8
352
75
0.8553
Random
384
94
0.5767
Random
576
122
0.9152
Random
No.
3
64
6
64
27
3
280
61
4
64
7
0.9749
Random
5
64
11
0.8589
Random
0.9876
Random
64
15
0.6179
Random
64
14
0.6866
Random
0.4762
Random
9
560
122
0.8733
Random
10
504
109
0.8731
Random
512
144
0.8252
Random
11
464
102
0.8376
Random
512
108
0.9082
Random
512
127
0.5416
Random
6
64
8
64
11
6
488
104
7
64
19
0.3427
Random
8
64
8
0.9876
Random
0.6866
Random
64
19
0.3427
Random
64
21
0.2303
Random
0.1841
Random
12
488
106
0.8629
Random
9
64
14
64
10
64
6
0.9862
Random
11
64
9
0.9331
Random
0.9331
Random
64
17
12
64
9
22
13
64
10
0.9004
Random
64
9
0.9331
Random
13
480
113
0.6916
Random
512
167
0.0110
Random
14
64
6
0.9862
Random
64
11
0.8589
Random
14
560
128
0.7791
Random
576
138
0.6540
Random
64
21
0.2303
Random
15
472
96
0.9367
Random
512
133
0.3938
Random
15
64
6
0.9862
Random
16
64
17
0.4762
Random
64
9
0.9331
Random
16
368
80
0.8307
Random
384
94
0.5767
Random
17
64
10
0.9004
Random
64
8
0.9876
Random
17
320
64
0.9145
Random
320
89
0.2584
Random
10
0.9004
Random
64
16
0.5470
Random
18
384
82
0.8617
Random
384
121
0.0455
Random
18
64
19
64
9
0.9331
Random
64
13
0.7509
Random
19
400
79
0.9445
Random
448
103
0.7440
Random
20
64
15
0.6179
Random
64
10
0.9004
Random
20
712
148
0.9532
Random
768
172
0.8588
Random
66
No.
Jumlah Bit Input
Uji Statistik
P-value Input
Ket.
1
1280
283
0.9357
Random
Jumlah Bit Output 1280
2
1672
418
0.5092
Random
1728
3
888
202
0.8406
Random
4
1160
242
0.9813
5
1088
243
0.9026
6
1384
297
7
1112
8
744
Uji Statistik
P-value Otput
Ket.
370
0.0285
Random
459
0.1875
Random
896
229
0.4191
Random
Random
1216
299
0.5912
Random
Random
1088
267
0.5963
Random
0.9736
Random
1408
345
0.5625
Random
215
0.9976
Random
1152
265
0.8414
Random
165
0.8742
Random
768
193
0.4932
Random
9
1112
210
0.9988
Random
1152
317
0.1226
Random
10
1040
208
0.9917
Random
1152
292
0.4449
Random
11
1328
277
0.9870
Random
1344
331
0.5868
Random
12
1168
270
0.8291
Random
1216
278
0.8639
Random
13
1336
307
0.8612
Random
1344
327
0.6461
Random
14
1104
240
0.9449
Random
1152
270
0.7842
Random
15
1232
266
0.9609
Random
1280
334
0.3003
Random
16
976
217
0.8993
Random
1024
260
0.4415
Random
17
1056
219
0.9798
Random
1088
242
0.9100
Random
18
1152
231
0.9936
Random
1152
279
0.6573
Random
19
1040
216
0.9783
Random
1088
262
0.6774
Random
20
872
197
0.8545
Random
896
236
0.2977
Random
67
Tabel P-value Input (Plainteks) dan Output (Chiperteks) Uji Run
1
Jumlah Bit Input 64
38
0.0823
Random
Jumlah Bit Output 64
24
0.0461
Random
1
Jumlah Bit Input 432
231
0.0895
Random
Jumlah Bit Output 448
240
0.1194
Random
2
64
36
0.3005
Random
64
33
0.7466
Random
2
240
122
0.5869
Random
256
124
0.6278
Random
3
64
37
0.2113
Random
64
26
0.1811
Random
3
280
154
0.0728
Random
280
119
0.0122
Random
4
64
38
0.1131
Random
64
23
0.0279
Random
4
424
225
0.1500
Random
448
212
0.2611
Random
5
64
34
0.6112
Random
64
32
0.8413
Random
5
472
259
0.0277
Random
512
248
0.4870
Random
6
64
40
0.0414
Random
64
34
0.3538
Random
6
488
267
0.0364
Random
512
276
0.0741
Random
7
64
31
0.9553
Random
64
30
0.9020
Random
7
536
297
0.0121
Random
576
286
0.9189
Random
8
64
37
0.2113
Random
64
32
0.9750
Random
8
352
190
0.1160
Random
384
199
0.3486
Random
9
64
37
0.2113
64
26
0.2407
Random
9
560
301
0.0567
Random
576
315
0.0232
Random
10
64
42
0.0039
64
27
0.2797
Random
10
504
263
0.1649
Random
512
264
0.4760
Random
11
64
38
0.1131
Random Tdk random Random
64
29
0.4575
Random
11
464
247
0.1008
Random
512
280
0.0319
Random
Random
12
488
246
0.6325
Random
512
263
0.5340
Random
480
250
0.2608
Random
512
237
0.1080
Random
576
302
0.2356
Random
512
245
0.3350
Random
No.
12
64
Uji Statistik
P-value Input
Ket.
35
0.4079
Random
64
Uji Statistik
P-value Otput
Ket.
29
0.4533
No.
Uji Statistik
P-value Input
Ket.
Uji Statistik
P-value Otput
Ket.
13
64
39
0.0737
Random
64
35
0.4079
Random
13
14
64
38
0.1336
Random
64
41
0.0238
Random
14
560
299
0.1014
15
64
39
0.0737
Random
64
28
0.4095
Random
15
472
267
0.0043
16
64
34
0.5650
Random
64
31
0.8085
Random
16
368
199
0.1089
Random Tdk random Random
384
190
0.8981
Random
17
64
37
0.2113
64
38
0.0988
Random
17
320
173
0.1262
Random
320
148
0.1974
Random
18
64
41
0.0034
64
32
0.8990
Random
18
384
212
0.0335
Random
384
177
0.2949
Random
64
30
0.6647
Random
19
400
213
0.1848
Random
448
225
0.9163
Random
64
28
0.3741
Random
20
712
372
0.1327
Random
768
411
0.0407
Random
19
64
36
0.3131
Random Tdk random Random
20
64
36
0.3131
Random
68
No.
Jumlah Bit Input
Uji Statistik
P-value Input
1
1280
685
0.0041
2 3
1672 888
863 465
0.0981 0.1011
4
1160
627
0.0028
5
1088
585
0.0076
6
1384
725
0.0488
7
1112
605
0.0016
8
744
395
0.0553
9
1112
612
0.0003
10
1040
550
0.0483
11
1328
716
0.0011
12 13 14
1168 1336 1104
607 687 589
0.0961 0.1618 0.0109
15
1232
667
0.0023
16
976
515
0.0470
17
1056
581
0.0006
18
1152
636
0.0003
19
1040
573
0.0007
20
872
459
0.0862
Ket. Tdk random Random Random Tdk random Tdk random Random Tdk random Random Tdk random Random Tdk random Random Random Random Tdk random Random Tdk random Tdk random Tdk random Random
Jumlah Bit Output
Uji Statistik
1280
1.685
0.0172
Random
1728 896
829 448
0.1073 0.9656
Random Random
1216
583
0.1548
Random
1088
541
0.9020
Random
1408
709
0.7729
Random
1152
593
0.3079
Random
P-value Otput
Ket.
768
372
0.4094
Random
1152
576
0.9359
Random
1152
580
0.8097
Random
1344
669
0.8764
Random
1216 1344 1152
606 680 589
0.9099 0.6620 0.3587
Random Random Random
1280
614
0.1521
Random
1024
521
0.5136
Random
1088
552
0.6161
Random
1152
554
0.2006
Random
1088
519
0.1305
Random
896
458
0.3735
Random
69