Uji tingkat kerandoman Bit pada enkripsi data encryption standard

(1)

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


(2)

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


(3)

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


(4)

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


(5)

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….


(6)

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.


(7)

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 .


(8)

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.


(9)

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


(10)

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


(11)

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


(12)

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


(13)

1

BAB I PENDAHULUAN

1.1Latar 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


(14)

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.2Rumusan Masalah

Masalah yang akan dibahas pada penelitian ini adalah menguji tingkat kerandoman bit atau tingkat keacakan pada hasil enkripsi DES.

1.3Tujuan Penelitian

Tujuan penelitian ini adalah melakukan pengujian tingkat kerandoman bit atau tingkat keacakan pada barisan binari ciperteks hasil enkripsi pada algoritma DES.


(15)

3

1.4Batasan 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.5Manfaat 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.


(16)

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.


(17)

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.


(18)

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


(19)

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.


(20)

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


(21)

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.


(22)

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.


(23)

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

du e

z 2/2

2 1 ) (


(24)

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

dt e z

z

z t

∞ − − = Γ 0 1 ) (

di mana t = variabel random

z = parameter (merupakan bilangan bulat positif) Γ(z) = Fungsi gamma pada z

c. Fungsi Gamma Tidak Komplit

− − Γ

≡ Γ

x t a

dt t e a a x a x a P 0 1 ) ( 1 ) ( ) , ( ) , ( γ

dengan P(a,0) = 0 dan P(a,) = 1

di mana P(a,x) = fungsi gamma tidak komplit a = nilai parameter


(25)

13

d. Distribusi Chi-Square

= (( )/ )

2

i i i e e

o χ

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,

{

a

}

e dx

P a x

n n X X n

n /2

2 1 2 1 lim − ∞ − − + + ∞

→ σ ≤ =

π

μ Λ

Jika =

n=

i i

n X

S

1 , di mana X1, X2, …, Xn adalah distribusi yang


(26)

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].


(27)

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


(28)

16

2.5.1 Uji Frekuensi (Monobit)

Uji ini diperoleh dari teorema Central Limit untuk random walk, n

n X X

S = 1 +Λ + . Berdasarkan teorema Central Limit:

∞ −

− ∞

→ ≤ =Φ ≡

z u n

S

n P z z e du

n /2

2 1 2 ) ( ) ( lim π

Secara tidak langsung menyatakan bahwa, untuk z positif: 1 ) ( 2 | | − Φ = ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛

z z

n S P n

Berdasarkan dasar pengujian pada statistik

n S

s= n , menaksir nilai observnya s(obs) = X1 +Κ +Xn / 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 e du z

u

= 2 2

) (

π ………(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


(29)

17

χ

2

[

]

2

1 2 1 4 ) ( =

N i M obs π

di bawah hipotesis kerandoman yang memiliki distribusi

χ

2 dengan derajat kebebasan N.

Didapat P-value yaitu

) 2 ...( ... ... ... 2 ) ( , 2 ) 2 / ( 2 ) 2 / ( 2 ) ( 1 2 / 2 / ) ( 1 2 / 2 / 2 2 ⎟⎟ ⎠ ⎞ ⎜⎜ ⎝ ⎛ = Γ = Γ

∞ Χ − − ∞ Χ − − obs N igamc N du u e N du u e obs N u N obs N u χ

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 n

j ε

π

(dengan π mendekati 0.5:

n 2 2 1 ≤ − π ). ) ( ) 1 ( ) 1 ( 2

limP Vn n z z

n ⎟⎟⎠=Φ

⎞ ⎜⎜ ⎝ ⎛ ≤ − − − ∞ → π π


(30)

18 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 =

=1 +

1 ( ) 1

n k

n r k

V .

Didapat P-value adalah

⎟⎟ ⎠ ⎞ ⎜⎜

⎝ ⎛

− − −

) 1 ( 2 2

) 1 ( 2 ) (

π π

π π n

n obs V

erfc n ……….(3)

Jika nilai dari Vn besar mengindikasikan bahwa proses osilasi pada


(31)

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”. .


(32)

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, ε =ε12,Κ,ε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| / n. Sobs =

10 | 2 |


(33)

21 c. Menghitung P-value = erfc

⎠ ⎞ ⎜ ⎝ ⎛

2 obs S

, 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, ε =ε12,Λ ,εn.


(34)

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 = 3

3 10 = ⎥⎦ ⎤ ⎢⎣ ⎡ = ⎥⎦ ⎤ ⎢⎣ ⎡ M n

, 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: N i untuk M j M i M j

i ≤ ≤

+ − =

= 1 , ) 1 ( 1 ε π 3 3 (1 1)3

1 1 1 2 3

1

0 1 1 2

3 3 3 3 3

j j

j j

ε ε

ε ε ε

π =

= − + =

= = + + = + + =

3 3

(2 1)3 3

1 1 4 5 6

2

0 0 1 1

3 3 3 3 3

j j

j j

ε ε

ε ε ε


(35)

23

3 3

(3 1)3 6

1 1 7 8 9

3

1 0 1 2

3 3 3 3 3

j j

j j

ε ε

ε ε ε

π =

= − + =

= + = + + = + + =

Hitung statistikχ2: χ2(obs) = 4M

= − N t i 1 2 2 1 )

(

) (

) (

)

(

)

1

3 4 )

( 23 12 2

2 2 1 3 1 2 2 1 3 2

2 = × × − + − + − =

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

( )

,21 0.801252

2

3 =

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


(36)

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; ε =ε12,Λ ,ε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:

n j j

= ε

π

Contoh: jika ε = 1001101011, maka n= 10

n j j

= ε

π

1 2 3 4 5 6 7 8 9 10

1 0 0 1 1 0 1 0 1 1 6 3

10 10 5

n

ε ε ε ε ε ε ε ε ε ε

π = + + + + + + + + +

+ + + + + + + + +

= = =


(37)

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 . 0 10 2 =

τ , maka |π-1/2| = |3/5 –1/2| = 0.1, karena 0.1< , dan uji adalah tidak run.

c. Hitung uji statistik =

=1 +

1 ( ) 1

) ( n

k n obs r k

V , di mana

r(k) = 0 jika εkk+1 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 ( 2 2 ) 1 ( 2 ) ( π π π π n n obs Vn

P-Value =erfc

(

(

)

)

(

)

⎟⎟ ⎠ ⎞ ⎜ ⎜ ⎝ ⎛ − • • • • − • • − 5 3 5 3 5 3 5 3 1 10 2 2 1 10 2 7 = 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.


(38)

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.


(39)

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


(40)

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


(41)

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 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.


(42)

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.


(43)

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.


(44)

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.


(45)

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]

[11/03/07 01:14:35 AM]

[9]


(46)

34


(47)

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.


(48)

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


(49)

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


(50)

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


(51)

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


(52)

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


(53)

41 5. 7B529DBD4D7EF7BB0DD2E8E044FA6B99CD12B4BADD0EAB7229ED

441C04FE8F3E93516E572558D6F955D33F37E3B01CFC036EEF8AA396 C3D99D44EDE50CC566D4312E00A1D1A5EC2A0E98298840DF9BFC38 285E434F6F532F33EB51CD86B4AA85C3A498F9E2E134744E3D1AD4B 97B80778513F3C31E3AB9C47F764C9BBFC7D95F10CC1432A793EB31 F


(54)

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,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};


(55)

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,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,


(56)

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);


(57)

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]);


(58)

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);


(59)

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; }


(60)

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


(61)

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);}

//***********************


(62)

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);


(63)

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


(64)

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


(65)

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;

}

} }


(1)

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

randomTdk

19 400 0.7000

0.4839

Random

448 0.4725

0.6366

Random

20 712 2.7733

0.0055

randomTdk

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


(2)

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 random Tdk 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 random Tdk 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


(3)

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


(4)

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


(5)

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 Random 2 64 36 0.3005 Random 64 33 0.7466 Random 3 64 37 0.2113 Random 64 26 0.1811 Random 4 64 38 0.1131 Random 64 23 0.0279 Random 5 64 34 0.6112 Random 64 32 0.8413 Random 6 64 40 0.0414 Random 64 34 0.3538 Random 7 64 31 0.9553 Random 64 30 0.9020 Random 8 64 37 0.2113 Random 64 32 0.9750 Random 9 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 Random 12 64 35 0.4079 Random 64 29 0.4533 Random 13 64 39 0.0737 Random 64 35 0.4079 Random 14 64 38 0.1336 Random 64 41 0.0238 Random 15 64 39 0.0737 Random 64 28 0.4095 Random 16 64 34 0.5650 Random 64 31 0.8085 Random 17 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 Random 20 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


(6)

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 randomTdk 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