Post on 12-Jan-2017
i
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
ii
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
iii
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 Suma’innah NIP. 19790530 200604 1002 NIP. 150 408 699 Pembimbing I, Pembimbing II, Hermawan S, M.Kom Yanne Irene, M.Si NIP. 19740623 1993121 001 NIP. 19741231 2005012 018
Mengetahui :
Dekan Fakultas Sains dan Teknoligi, Ketua Program Studi Matematika, Dr.Syopiansyah Jaya Putra, M.Sis Yanne Irene, M.Si NIP. 19680117 2001121 001 NIP. 19741231 200501 2018
iv
PERNYATAAN
DENGAN INI SAYA MENYATAKAN BAHWA SKRIPSI INI BENAR-
BENAR HASIL KARYA SENDIRI YANG BELUM PERNAH DIAJUKAN
SEBAGAI SKRIPSI ATAU SKRIPSI PADA PERGURUAN TINGGI ATAU
LEMBAGA MANAPUN.
Jakarta, Agustus 2010 Zamzamiah 103094029748
v
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….
vi
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
vii
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
viii
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.
ix
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
x
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
BAB II 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
xi
2.5.2 Uji Frekuensi Within a Block .................................. 16
2.5.3 Uji Run .................................................................... 17
BAB III 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
BAB IV 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
BAB V KESIMPULAN DAN SARAN ................................................... 31
5.1 Kesimpulan ......................................................................... 31
5.2 Saran ................................................................................... 32
REFERENSI ................................................................................................. 33
LAMPIRAN..................................................................................................... 34
xii
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
1
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
2
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.
3
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.
4
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 al-
Khuarizmi. 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 orang-
orang 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.
5
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.
6
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
7
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.
8
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
9
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.
10
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.
11
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
u duez 2/2
21)(π
12
di mana π = 3.14159
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
dtezz tz∫∞
−−=Γ0
1)(
di mana t = variabel random
z = parameter (merupakan bilangan bulat positif)
Γ (z) = Fungsi gamma pada z
c. Fungsi Gamma Tidak Komplit
∫ −−
Γ≡
Γ≡
x at dtteaa
xaxaP0
1
)(1
)(),(),( γ
dengan P(a,0) = 0 dan P(a,∞) = 1
di mana P(a,x) = fungsi gamma tidak komplit
a = nilai parameter
x = nilai parameter
13
d. Distribusi Chi-Square
∑ −= )/)((2iii eeoχ
di mana: oi = frekuensi kejadian
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,
dxeaP xa
nnXX
nn 2/
21 2
1lim −
∞−
−++
∞→ ∫=≤πσ
μΛ
Jika ∑ ==
n
i in XS1
, di mana X1, X2, …, Xn adalah distribusi yang
independent dan identik dengan probabilitas 1, Sn /n akan konvergen ke
14
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].
15
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
16
2.5.1 Uji Frekuensi (Monobit)
Uji ini diperoleh dari teorema Central Limit untuk random walk,
nn XXS ++= Λ1 . Berdasarkan teorema Central Limit:
∫∞−
−
∞→≡Φ=≤
zu
nS
nduezzP n 2/
21 2
)()(limπ
Secara tidak langsung menyatakan bahwa, untuk z positif:
1)(2||
−Φ=⎟⎟⎠
⎞⎜⎜⎝
⎛≤ zz
nS
P n
Berdasarkan dasar pengujian pada statistik n
Ss n= , menaksir
nilai observnya nXXobss n /)( 1 ++= Κ , dan maka dapat dihitung
P-value adalah ( )[ ] ( )2/)()(12 obsserfcobss =Φ− , di mana erfc
adalah komplemen dari fungsi error.
duezerfcz
u∫∞
−=22)(
π …………………………(1)
2.5.2 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
17
χ2 [ ]2
1214)( ∑ −=
N
iMobs π
di bawah hipotesis kerandoman yang memiliki distribusi χ2
dengan derajat kebebasan N.
Didapat P-value yaitu
)2.......(..............................2
)(,2
)2/(2)2/(2
)(
12/
2/)(
12/2/
22
⎟⎟⎠
⎞⎜⎜⎝
⎛=
Γ=
Γ
∫∫∞
Χ
−−∞
Χ
−−
obsNigamc
N
duue
N
duueobs
Nu
Nobs
Nu
χ
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 njεπ (dengan π mendekati 0.5:
n2
21 ≤−π ).
)()1(
)1(2lim zz
nVP n
nΦ=⎟⎟
⎠
⎞⎜⎜⎝
⎛≤
−−−
∞→ ππ
18
Untuk menaksir Vn, didefinisikan untuk k = 1, . . . , n-1, r(k) = 0
jika 1+=∈∈ kk dan r(k) = 1 jika 1+≠∈∈ kk . Maka ∑ −
=+=
1
11)(n
kn krV .
Didapat P-value adalah
⎟⎟⎠
⎞⎜⎜⎝
⎛
−
−−
)1(22)1(2)(
ππ
ππ
nnobsV
erfc n …………………….(3)
Jika nilai dari Vn besar mengindikasikan bahwa proses osilasi pada
string ∈juga besar. Jika nilai Vn kecil maka proses osilasi juga kecil.
19
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”. .
20
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, nεεεε ,,, 21 Κ=
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| / n .
Sobs = 10
|2| = 0.632455532
21
c. Menghitung P-value = erfc ⎟⎠
⎞⎜⎝
⎛2
obsS, dimana erfc adalah
fungsi error yang melengkapi.
P-value = erfc ⎟⎠
⎞⎜⎝
⎛2
632455532.0 = 0.527089
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, nεεεε ,,, 21 Λ= .
22
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 = 33
10=⎥⎦
⎤⎢⎣⎡=⎥⎦
⎤⎢⎣⎡
Mn , dimana 3 bloknya ( N = 3) adalah
011, 001, 101, dan sisa bit terakhir pada barisan
dihilangkan.
b. Tentukan proporsi πi pada setiap M-bit blok menggunakan
persamaan:
NiuntukM
jMiM
ji ≤≤
+−=∑= 1,
)1(1ε
π
3 3
(1 1)31 1 1 2 3
10 1 1 2
3 3 3 3 3
j jj jε ε
ε ε επ− +
= = + + + += = = = =∑ ∑
3 3
(2 1)3 31 1 4 5 6
20 0 1 1
3 3 3 3 3
j jj jε ε
ε ε επ− + +
= = + + + += = = = =∑ ∑
23
3 3
(3 1)3 61 1 7 8 9
31 0 1 2
3 3 3 3 3
j jj jε ε
ε ε επ− + +
= = + + + += = = = =∑ ∑
Hitung statistik 2χ : 2χ (obs) = 4M∑=
−N
ti
1
22
1 )(π
( ) ( ) ( )( ) 134)( 22
13
222
13
122
13
22 =−+−+−××=obsχ
c. Hitung P-value =igamc(N/2, 2χ (obs)/2), dimana igamc
adalah fungsi gamma tidak lengkap untuk Q(a, x).
P-value = igamc ( ) 801252.0, 21
23 =
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
24
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; nεεεε ,,, 21 Λ= .
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:
nj j∑
=ε
π
Contoh: jika ε = 1001101011, maka n= 10
nj j∑
=ε
π
1 2 3 4 5 6 7 8 9 10
1 0 0 1 1 0 1 0 1 1 6 310 10 5
nε ε ε ε ε ε ε ε ε επ + + + + + + + + +
=
+ + + + + + + + += = =
25
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 / n .
63246.010
2 ≈=τ , maka |π -1/2| = |3/5 –1/2| =
0.1, karena 0.1< τ , dan uji adalah tidak run.
c. Hitung uji statistik ∑ −
=+=
1
11)()( n
kn krobsV , di mana
r(k) = 0 jika 1+= kk εε dan r(k) = 1 jika sebaliknya.
Karena ε = 1001101011, maka
V10(obs ) = (1+0+1+0+1+1+1+1+0)+1=7
d. Hitung P-value = erfc ⎟⎟⎠
⎞⎜⎜⎝
⎛
−
−−
)1(22)1(2)(
ππ
ππ
nnobsVn
P-Value =erfc( )( )( )⎟
⎟⎠
⎞⎜⎜⎝
⎛
−••••
−••−
53
53
53
53
11022
11027= 0.147232
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.
26
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.
27
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
28
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
29
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 P-
value adalah 0.9876 dengan nilai uji statistik terkecil adalah 8. Nilai P-
value 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.
30
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.
.
31
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 p-
value 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.
32
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.
33
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]
34
LAMPIRAN
35
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.
36
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
37
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
38
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
39
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
40
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
41
5. 7B529DBD4D7EF7BB0DD2E8E044FA6B99CD12B4BADD0EAB7229ED
441C04FE8F3E93516E572558D6F955D33F37E3B01CFC036EEF8AA396
C3D99D44EDE50CC566D4312E00A1D1A5EC2A0E98298840DF9BFC38
285E434F6F532F33EB51CD86B4AA85C3A498F9E2E134744E3D1AD4B
97B80778513F3C31E3AB9C47F764C9BBFC7D95F10CC1432A793EB31
F
42
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 <iostream.h> #include <stdlib.h> //exit() #include <string.h> //strlen() #include <conio.h> //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,46,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
43
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,60,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,
44
//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);
45
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]);
46
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...
47
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;
48
//********************************************** //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];
49
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
50
//*********************** 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[i-1],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)
51
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);
52
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<outbits;i++) buffer_out[i] = 0; //permutate for(i=0;i<pt_list_count;i++)
53
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;
54
//********************************************** //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));i<length;i++) buffer[i] = '0'; buffer[length] = '\0'; //terminating character void hex2bin(char buffer_hex, int buffer_bin) int j, digit, curarray=0; for(j=0;j<16;j++) //cycle through buffer_hex digit = buffer_hex[j]; //We'll work on one 'digit' at a time //Now, if it's a number, it will be between 48 and 57 (0 to 9 respectively) if( (digit>47) && (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;
55
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<leading0;k++) buffer_bin[curarray] = 0; curarray++; //Add in the read of the array to buffer_bin for(k=0;k<(8-leading0);k++) buffer_bin[curarray] = temp[k]; curarray++; //next j void print_binary(char title[ ], int buffer, int size, int spacing, char sameline) int i; printf("\n%s",title); if(sameline != TRUE) printf("\n"); for(i=0;i<size;i++) printf("%d",buffer[i]); if (((i+1)%spacing)==0) printf(" "); printf("\n");
56
Lampiran 3. Tabel ASCII (American Standard Code for Information Interchange)
TABEL ASCII
Desimal Karakter Binary Heksadesimal
000 00000000 00 001 00000001 01 002 00000010 02 003 ♥ 00000011 03 004 ♦ 00000100 04 005 ♣ 00000101 05 006 ♠ 00000110 06 007 00000111 07 008 00001000 08 009 00001001 09 010 00001010 0A 011 00001011 0B 012 00001100 0C 013 00001101 0D 014 00001110 0E 015 00001111 0F 016 00010000 10 017 00010001 11 018 00010010 12 019 ‼ 00010011 13 020 ¶ 00010100 14 021 § 00010101 15 022 00010110 16 023 00010111 17 024 ↑ 00011000 18 025 ↓ 00011001 19 026 → 00011010 1A 027 ← 00011011 1B 028 ∟ 00011100 1C 029 ↔ 00011101 1D
57
030 00011110 1E 031 00011111 1F 032 00100000 20 033 ! 00100001 21 034 " 00100010 22 035 # 00100011 23 036 $ 00100100 24 037 % 00100101 25 038 & 00100110 26 039 00100111 27 040 ( 00101000 28 041 ) 00101001 29 042 * 00101010 2A 043 + 00101011 2B 044 , 00101100 2C 045 - 00101101 2D 046 . 00101110 2E 047 / 00101111 2F 048 0 00110000 30 049 1 00110001 31 050 2 00110010 32 051 3 00110011 33 052 4 00110100 34 053 5 00110101 35 054 6 00110110 36 055 7 00110111 37 056 8 00111000 38 057 9 00111001 39 058 : 00111010 3A 059 ; 00111011 3B 060 < 00111100 3C 061 = 00111101 3D 062 > 00111110 3E 063 ? 00111111 3F 064 @ 01000000 40 065 A 01000001 41 066 B 01000010 42
58
067 C 01000011 43 068 D 01000100 44 069 E 01000101 45 070 F 01000110 46 071 G 01000111 47 072 H 01001000 48 073 I 01001001 49 074 J 01001010 4A 075 K 01001011 4B 076 L 01001100 4C 077 M 01001101 4D 078 N 01001110 4E 079 O 01001111 4F 080 P 01010000 50 081 Q 01010001 51 082 R 01010010 52 083 S 01010011 53 084 T 01010100 54 085 U 01010101 55 086 V 01010110 56 087 W 01010111 57 088 X 01011000 58 089 Y 01011001 59 090 Z 01011010 5A 091 [ 01011011 5B 092 \ 01011100 5C 093 ] 01011101 5D 094 ^ 01011110 5E 095 _ 01011111 5F 096 ` 01100000 60 097 a 01100001 61 098 b 01100010 62 099 c 01100011 63 100 d 01100100 64 101 e 01100101 65 102 f 01100110 66
59
103 g 01100111 67 104 h 01101000 68 105 i 01101001 69 106 j 01101010 6A 107 k 01101011 6B 108 l 01101100 6C 109 m 01101101 6D 110 n 01101110 6E 111 o 01101111 6F 112 p 01110000 70 113 q 01110001 71 114 r 01110010 72 115 s 01110011 73 116 t 01110100 74 117 u 01110101 75 118 v 01110110 76 119 w 01110111 77 120 x 01111000 78 121 y 01111001 79 122 z 01111010 7A 123 01111011 7B 124 | 01111100 7C 125 01111101 7D 126 ~ 01111110 7E 127 01111111 7F 128 Ç 10000000 80 129 ü 10000001 81 130 é 10000010 82 131 â 10000011 83 132 ä 10000100 84 133 á 10000101 85 134 å 10000110 86 135 ç 10000111 87 136 ê 10001000 88 137 ë 10001001 89 138 è 10001010 8A
60
139 ï 10001011 8B 140 î 10001100 8C 141 ì 10001101 8D 142 Ä 10001110 8E 143 Å 10001111 8F 144 É 10010000 90 145 æ 10010001 91 146 Æ 10010010 92 147 ô 10010011 93 148 ö 10010100 94 149 ò 10010101 95 150 û 10010110 96 151 ù 10010111 97 152 ÿ 10011000 98 153 Ö 10011001 99 154 Ü 10011010 9A 155 ¢ 10011011 9B 156 £ 10011100 9C 157 ¥ 10011101 9D 158 ₧ 10011110 9E 159 ƒ 10011111 9F 160 á 10100000 A0 161 í 10100001 A1 162 ó 10100010 A2 163 ú 10100011 A3 164 ñ 10100100 A4 165 Ñ 10100101 A5 166 ª 10100110 A6 167 º 10100111 A7 168 ¿ 10101000 A8 169 10101001 A9 170 ¬ 10101010 AA 171 ½ 10101011 AB 172 ¼ 10101100 AC 173 ¡ 10101101 AD 174 « 10101110 AE
61
175 » 10101111 AF 176 10110000 B0 177 10110001 B1 178 10110010 B2 179 10110011 B3 180 10110100 B4 181 10110101 B5 182 10110110 B6 183 10110111 B7 184 10111000 B8 185 10111001 B9 186 10111010 BA 187 10111011 BB 188 10111100 BC 189 10111101 BD 190 10111110 BE 191 10111111 BF 192 11000000 C0 193 11000001 C1 194 11000010 C2 195 11000011 C3 196 11000100 C4 197 11000101 C5 198 11000110 C6 199 11000111 C7 200 11001000 C8 201 11001001 C9 202 11001010 CA 203 11001011 CB 204 11001100 CC 205 11001101 CD 206 11001110 CE 207 11001111 CF 208 11010000 D0 209 11010001 D1 210 11010010 D2
62
211 11010011 D3 212 11010100 D4 213 11010101 D5 214 11010110 D6 215 11010111 D7 216 11011000 D8 217 11011001 D9 218 11011010 DA 219 11011011 DB 220 11011100 DC 221 11011101 DD 222 11011110 DE 223 11011111 DF 224 α 11100000 E0 225 β 11100001 E1 226 Γ 11100010 E2 227 π 11100011 E3 228 ∑ 11100100 E4 229 σ 11100101 E5 230 μ 11100110 E6 231 τ 11100111 E7 232 Ф 11101000 E8 233 Θ 11101001 E9 234 Ω 11101010 EA 235 δ 11101011 EB 236 ∞ 11101100 EC 237 φ 11101101 ED 238 ε 11101110 EE 239 ∩ 11101111 EF 240 ≡ 11110000 F0 241 ± 11110001 F1 242 ≥ 11110010 F2 243 ≤ 11110011 F3 244 ⌠ 11110100 F4 245 ⌡ 11110101 F5 246 ÷ 11110110 F6
63
247 ≈ 11110111 F7 248 ° 11111000 F8 249 · 11111001 F9 250 · 11111010 FA 251 √ 11111011 FB 252 ⁿ 11111100 FC 253 ² 11111101 FD 254 11111110 FE 255 11111111 FF
64
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 432 2.0269 0.0269 Random 448 0.9449 0.3447 Random 2 240 2.0656 0.0389 Random 256 0.5000 0.6171 Random 3 280 0.1195 0.9049 Random 280 0.2390 0.8111 Random 4 424 1.8454 0.0650 Random 448 0.4725 0.6366 Random 5 472 1.2888 0.1975 Random 512 0.5303 0.5959 Random 6 488 0.4527 0.6508 Random 512 0.6187 0.5361 Random 7 536 0.2592 0.7955 Random 576 1.2500 0.2113 Random 8 352 1.1726 0.2410 Random 384 2.0412 0.0412 Random 9 560 1.6903 0.0910 Random 576 0.6667 0.5050 Random
10 504 2.9399 0.0033 Tdk random 512 0.3536 0.7237 Random
11 464 2.2283 0.0259 Random 512 0.7071 0.4795 Random 12 488 2.5350 0.0112 Random 512 0.2652 0.7909 Random 13 480 2.0996 0.0358 Random 512 1.3258 0.1849 Random 14 560 0.8452 0.3980 Random 576 0.6667 0.5050 Random 15 472 0.1841 0.8539 Random 512 0.4419 0.6585 Random 16 368 0.8341 0.4042 Random 384 1.2247 0.2207 Random 17 320 1.1180 0.2636 Random 320 1.0062 0.3143 Random 18 384 1.2207 0.2207 Random 384 3.1639 0.0016 Tdk
random 19 400 0.7000 0.4839 Random 448 0.4725 0.6366 Random 20 712 2.7733 0.0055 Tdk
random 768 1.5877 0.1124 Random
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 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 64 0.0000 1.0000 Random 64 0.5000 0.6171 Random 9 64 0.0000 1.0000 Random 64 1.7500 0.0801 Random
10 64 1.5000 0.1336 Random 64 1.2500 0.2113 Random 11 64 0.7500 0.4533 Random 64 0.2500 0.8026 Random 12 64 0.7500 0.4533 Random 64 0.0000 1.0000 Random 13 64 0.5000 0.6171 Random 64 0.7500 0.4533 Random 14 64 0.0000 1.0000 Random 64 0.2500 0.8026 Random 15 64 0.5000 0.6171 Random 64 1.2500 0.2113 Random 16 64 0.7500 0.4533 Random 64 0.2500 0.8026 Random 17 64 0.0000 1.0000 Random 64 1.0000 0.3173 Random 18 64 2.0000 0.0455 Random 64 1.0000 0.3173 Random 19 64 0.2500 0.8026 Random 64 0.7500 0.4533 Random 20 64 0.2500 0.8026 Random 64 1.0000 0.3173 Random
65
No.
Jumlah Bit Input
Uji Statistik
P-value Input Ket.
Jumlah Bit
Output
Uji Statistik
P-value Otput Ket.
1 1280 3.4100 0.0006 Tdk random 1280 0.8944 0.3711 Random
2 1672 3.6195 0.0003 Tdk random 1728 1.7802 0.0750 Random
3 888 2.5504 0.0108 896 1.1359 0.2560 Random 4 1160 2.7012 0.0069 Tdk
random 1216 0.6190 0.5281 Random 5 1088 2.3647 0.0180 1088 1.3946 0.1631 Random 6 1384 2.6343 0.0084 Tdk
random 1408 0.9061 0.3649 Random 7 1112 2.5190 0.0118 Random 1152 0.7660 0.4437 Random 8 744 2.4197 0.0155 Random 768 1.0825 0.2790 Random 9 1112 2.3990 0.0164 Random 1152 1.6499 0.0990 Random
10 1040 1.8605 0.0628 Random 1152 0.4125 0.6800 Random 11 1328 3.6771 0.0002 Tdk
random 1344 0.5455 0.5854 Random 12 1168 3.2186 0.0013 Tdk
random 1216 0.2294 0.8185 Random 13 1336 3.5566 0.0004 Tdk
random 1344 0.1637 0.8700 Random 14 1104 3.1300 0.0017 Tdk
random 1152 2.2392 0.0251 Random 15 1232 2.1653 0.0304 Random 1280 0.8944 0.3711 Random 16 976 2.7528 0.0059 Tdk
random 1024 1.6875 0.0915 Random 17 1056 2.2156 0.0267 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
66
Tabel P-value Input (Plainteks) dan Output (Chiperteks) Uji Frequency Within a Block
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
2 64 30 0.0173 Random 64 15 0.6179 Random 3 64 6 0.9862 Random 64 27 0.0471 Random 4 64 7 0.9749 Random 64 23 0.1447 Random 5 64 11 0.8589 Random 64 15 0.6179 Random 6 64 8 0.9876 Random 64 11 0.8589 Random 7 64 19 0.3427 Random 64 15 0.6179 Random 8 64 8 0.9876 Random 64 14 0.6866 Random 9 64 14 0.6866 Random 64 17 0.4762 Random
10 64 6 0.9862 Random 64 19 0.3427 Random 11 64 9 0.9331 Random 64 21 0.2303 Random 12 64 9 0.9331 Random 64 22 0.1841 Random 13 64 10 0.9004 Random 64 9 0.9331 Random 14 64 6 0.9862 Random 64 11 0.8589 Random 15 64 6 0.9862 Random 64 21 0.2303 Random 16 64 17 0.4762 Random 64 9 0.9331 Random 17 64 10 0.9004 Random 64 8 0.9876 Random 18 64 10 0.9004 Random 64 16 0.5470 Random 19 64 9 0.9331 Random 64 13 0.7509 Random 20 64 15 0.6179 Random 64 10 0.9004 Random
No.
Jumlah Bit Input
Uji Statistik
P-value Input Ket.
Jumlah Bit
Output
Uji Statistik
P-value Otput Ket.
1 432 103 0.6514 Random 448 106 0.6737 Random 2 240 50 0.8428 Random 256 66 0.4532 Random 3 280 61 0.7989 Random 280 76 0.3279 Random 4 424 93 0.8316 Random 448 127 0.1739 Random 5 472 102 0.8671 Random 512 162 0.0226 Random 6 488 104 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 9 560 122 0.8733 Random 576 122 0.9152 Random
10 504 109 0.8731 Random 512 144 0.8252 Random 11 464 102 0.8376 Random 512 108 0.9082 Random 12 488 106 0.8629 Random 512 127 0.5416 Random 13 480 113 0.6916 Random 512 167 0.0110 Random 14 560 128 0.7791 Random 576 138 0.6540 Random 15 472 96 0.9367 Random 512 133 0.3938 Random 16 368 80 0.8307 Random 384 94 0.5767 Random 17 320 64 0.9145 Random 320 89 0.2584 Random 18 384 82 0.8617 Random 384 121 0.0455 Random 19 400 79 0.9445 Random 448 103 0.7440 Random 20 712 148 0.9532 Random 768 172 0.8588 Random
67
No.
Jumlah Bit Input
Uji Statistik
P-value Input Ket.
Jumlah Bit
Output
Uji Statistik
P-value Otput Ket.
1 1280 283 0.9357 Random 1280 370 0.0285 Random 2 1672 418 0.5092 Random 1728 459 0.1875 Random 3 888 202 0.8406 Random 896 229 0.4191 Random 4 1160 242 0.9813 Random 1216 299 0.5912 Random 5 1088 243 0.9026 Random 1088 267 0.5963 Random 6 1384 297 0.9736 Random 1408 345 0.5625 Random 7 1112 215 0.9976 Random 1152 265 0.8414 Random 8 744 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
68
Tabel P-value Input (Plainteks) dan Output (Chiperteks) Uji Run
No.
Jumlah Bit
Input
Uji Statistik
P-value Input
Ket.
Jumlah Bit
Output
Uji Statistik
P-value Otput
Ket.
1 64 38 0.0823 Random 64 24 0.0461 Random2 64 36 0.3005 Random 64 33 0.7466 Random3 64 37 0.2113 Random 64 26 0.1811 Random4 64 38 0.1131 Random 64 23 0.0279 Random5 64 34 0.6112 Random 64 32 0.8413 Random6 64 40 0.0414 Random 64 34 0.3538 Random7 64 31 0.9553 Random 64 30 0.9020 Random8 64 37 0.2113 Random 64 32 0.9750 Random9 64 37 0.2113 Random 64 26 0.2407 Random
10 64 42 0.0039 Tdk random 64 27 0.2797 Random
11 64 38 0.1131 Random 64 29 0.4575 Random12 64 35 0.4079 Random 64 29 0.4533 Random13 64 39 0.0737 Random 64 35 0.4079 Random14 64 38 0.1336 Random 64 41 0.0238 Random15 64 39 0.0737 Random 64 28 0.4095 Random16 64 34 0.5650 Random 64 31 0.8085 Random17 64 37 0.2113 Random 64 38 0.0988 Random
18 64 41 0.0034 Tdk random 64 32 0.8990 Random
19 64 36 0.3131 Random 64 30 0.6647 Random20 64 36 0.3131 Random 64 28 0.3741 Random
No.
Jumlah Bit
Input
Uji Statistik
P-value Input
Ket.
Jumlah Bit
Output
Uji Statistik
P-value Otput
Ket.
1 432 231 0.0895 Random 448 240 0.1194 Random 2 240 122 0.5869 Random 256 124 0.6278 Random 3 280 154 0.0728 Random 280 119 0.0122 Random 4 424 225 0.1500 Random 448 212 0.2611 Random 5 472 259 0.0277 Random 512 248 0.4870 Random 6 488 267 0.0364 Random 512 276 0.0741 Random 7 536 297 0.0121 Random 576 286 0.9189 Random 8 352 190 0.1160 Random 384 199 0.3486 Random 9 560 301 0.0567 Random 576 315 0.0232 Random
10 504 263 0.1649 Random 512 264 0.4760 Random 11 464 247 0.1008 Random 512 280 0.0319 Random 12 488 246 0.6325 Random 512 263 0.5340 Random 13 480 250 0.2608 Random 512 237 0.1080 Random 14 560 299 0.1014 Random 576 302 0.2356 Random 15 472 267 0.0043 Tdk
random 512 245 0.3350 Random 16 368 199 0.1089 Random 384 190 0.8981 Random 17 320 173 0.1262 Random 320 148 0.1974 Random 18 384 212 0.0335 Random 384 177 0.2949 Random 19 400 213 0.1848 Random 448 225 0.9163 Random 20 712 372 0.1327 Random 768 411 0.0407 Random
69
No.
Jumlah Bit Input
Uji Statistik
P-value Input Ket. Jumlah
Bit Output Uji
Statistik P-value Otput Ket.
1 1280 685 0.0041 Tdk random 1280 1.685 0.0172 Random
2 1672 863 0.0981 Random 1728 829 0.1073 Random 3 888 465 0.1011 Random 896 448 0.9656 Random 4 1160 627 0.0028 Tdk
random 1216 583 0.1548 Random 5 1088 585 0.0076 Tdk
random 1088 541 0.9020 Random 6 1384 725 0.0488 Random 1408 709 0.7729 Random 7 1112 605 0.0016 Tdk
random 1152 593 0.3079 Random 8 744 395 0.0553 Random 768 372 0.4094 Random 9 1112 612 0.0003 Tdk
random 1152 576 0.9359 Random 10 1040 550 0.0483 Random 1152 580 0.8097 Random 11 1328 716 0.0011 Tdk
random 1344 669 0.8764 Random 12 1168 607 0.0961 Random 1216 606 0.9099 Random 13 1336 687 0.1618 Random 1344 680 0.6620 Random 14 1104 589 0.0109 Random 1152 589 0.3587 Random 15 1232 667 0.0023 Tdk
random 1280 614 0.1521 Random 16 976 515 0.0470 Random 1024 521 0.5136 Random 17 1056 581 0.0006 Tdk
random 1088 552 0.6161 Random 18 1152 636 0.0003 Tdk
random 1152 554 0.2006 Random 19 1040 573 0.0007 Tdk
random 1088 519 0.1305 Random 20 872 459 0.0862 Random 896 458 0.3735 Random