Selasa, 14 Desember 2010

(Cryptography) Pengenalan Enskripsi Kode Hill

Pendahuluan
Kode Hill ditemukan oleh Lester S. Hill pada tahun 1929. Kode Hill termasuk salah satu system kripto polialfabetik, yang berarti setiap karakter alphabet bisa dipetakan ke lebih dari satu macam karakter.
Pembahasan
Misalkan m adalah bilangan bulat positif, dan Plaintext = Chiper = (Z26)m. Ide dari kode Hill adalah dengan mengambil m kombinasi linear dari m karakter alphabet dalam satu elemen teks-asli sehingga dihasilkan m alphabet karakter dalam satu elemen teks-asli.
Misalkan m=2 maka dapat ditulis suatu elemen teks-asli sebagai x = (x1, x2) dan suatu elemen teks kode sebagai y = (y1, y2). Di sini y1, y2 adalah kombinasi linear dari x1 dan x2. Misalkan:
y1 = 11×1 + 3×2
y2 = 8×1 + 7×2
dapat ditulis dalam notasi matrix sbb:
(y1,y2)=(x1,x2)
K:
|11 8|
|3 7|

<span class="fullpost">
Secara umum dengan menggunakan matriks K m x m sebagai kunci.
Mungkin agak kurang paham ya? Ok supaya lebih paham langsung kasih contoh enkripsinya.
Kita gunakan Key yang diatas yaitu:
|11 8|
|3 7|

Dan dengan plain text g4pt3k, maka menjadi G=6, 4=4, P=15, T=19, 3=3, K=10. (A=0,B=1,… Z=25)
Maka lakukan operasi perkalian matriks, yaitu baris * kolom.
Dengan menggunakan matriks 2 x 2, maka:
G4 -> (6, 4)|11 8|
• |3 7|
= ((6*11)+(4*3) , (6*8)+(4*7)) = (66+12 , 48+28)
= (78 , 76) mod 26 = (0 , 24) => AY

PT -> (15, 19)|11 8|
• |3 7|
= (165+57 , 120+133) = (222 , 253) mod 26 = (14 , 19) => OT
3K -> (3, 10)|11 8|
• |3 7|
= (33+30 , 24+70) = (63 , 94) mod 26 = (11 , 16) => LQ
Dengan demikian, hasil enkripsi G4PT3K menggunakan K |11 8| adalah AYOTLQ
• |3 7|
Plain Text : G4PT3K
Chiper Text : AYOTLQ
Key : |11 8|
• |3 7|
——– Dekripsi ——–
Untuk dekripsinya, hanya bisa dilakukan jika matriks dari Key memiliki inversi, dengan catatan suatu matriks memiliki inversi hanya jika determinannya tidak nol. Contoh untuk mendapatkan inversnya, maka:
|11 8| |a1 a2| = |1 0|
|3 7| |a3 a4| = |0 1|
11*a1 + 8*a3 , 11*a2 + 8*a4 = 1 0
3*a1 + 7*a3 , 3*a2 + 7*a4 = 0 1
dari perhitungan diatas, menghasilkan invers dari matriks Key:
|7 18|
|23 11|
jadi untuk dekripsinya:
AY => 0, 24
(0, 24)|7 18|
• |23 11|
= (0*7 + 24*23 , 0*18 + 24*11) = (552 , 264) mod 26 = (6 , 4) => G4
OT => 14, 19
(14, 19)|7 18|
• |23 11|
= (14*7 + 19*23 , 14*18 + 19*11) = (535, 461) mod 26 = (15 , 19) => PT
LQ => 11, 16
(11, 16)|7 18|
• |23 11|
= (11*7 + 16*23 , 11*18 + 16*11) = (445 , 374) mod 26 = (3 , 10) => 3K
Sebagai tambahan, berikut source code untuk enkripsi kode hill dengan bahasa python:
#!/usr/bin/python
# hill c0de encryption algorithm
# by:5ynL0rd
# thanks to g4pt3k
import string
text = string.ascii_lowercase
numeric = string.digits
cchar = 0
cmatrix = 0
listplain = []
result = []
plaintext = raw_input(“plain text:”)
print ”’
format key = [a b]
[c d]
”’
key11 = input(“a = “)
key12 = input(“b = “)
key21 = input(“c = “)
key22 = input(“d = “)
while cchar < len(plaintext):
num = plaintext[cchar]
try:
listplain.append(text.index(num))
except:
listplain.append(numeric.index(num))
cchar += 1
while cmatrix < len(plaintext):
try:
res1 = listplain[cmatrix] * key11
res2 = listplain[cmatrix+1] * key21
res3 = listplain[cmatrix] * key12
res4 = listplain[cmatrix+1] * key22
result.append(text[(res1+res2)%26])
result.append(text[(res3+res4)%26])
except:
pass
cmatrix += 2
print “plain text : %s”%plaintext
print “cipher text : %s”%string.join(result,”")
Contoh output:
plain text:g4pt3k
format key = [a b]
[c d]
a = 11
b = 8
c = 3
d = 7
plain text : g4pt3k
cipher text : ayotlq
Nah kembali lagi kan plain-textnya..
Sekian dulu, semoga bisa dipahami dan menambah curiosity to learn about cryptography.. ;)
Credit n reference:
Pengantar Ilmu Kriptografi by Dony Ariyus
</span> 

0 komentar:

Posting Komentar

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
ReDesign by Cumi++ | Affiliate Network Reviews