Algoritma
Algoritma yang digunakan untuk merancang perangkat lunak one-way
4.1.1
Algoritma Fungsi F
Fungsi F dipakai pada putaran pertama fungsi hash HAVAL. Fungsi ini
memiliki 7 buah input parameter dengan simbol: A6, A5, A4, A3, A2, A1 dan A0.
Masing-masing variabel A berisi 32 bit biner. Fungsi F mengembalikan nilai fungsi
dengan panjang 32 bit biner.
70
71
72
4.1.2
memiliki 7 buah input parameter dengan simbol: A6, A5, A4, A3, A2, A1 dan A0.
Masing-masing variabel A berisi 32 bit biner. Fungsi F_Phi mengembalikan nilai
fungsi dengan panjang 32 bit biner. Dalam proses kerjanya, fungsi F_Phi
menggunakan fungsi F.
Proses kerja di dalam fungsi F_Phi adalah:
F_phi(A6, A5, A4, A3, A2, A1, A0) = F(A1, A0, A3, A5, A6, A2, A4).
Prosedur kerja dari algoritma fungsi F_Phi dapat dilihat pada flowchart berikut ini.
4.1.3
Algoritma Fungsi G
Fungsi G dipakai pada putaran kedua fungsi hash HAVAL. Fungsi ini
memiliki 7 buah input parameter dengan simbol: A6, A5, A4, A3, A2, A1 dan A0.
73
74
4.1.4
memiliki 7 buah input parameter dengan simbol: A6, A5, A4, A3, A2, A1 dan A0.
Masing-masing variabel A berisi 32 bit biner. Fungsi G_Phi mengembalikan nilai
fungsi dengan panjang 32 bit biner. Dalam proses kerjanya, fungsi G_Phi
menggunakan fungsi G.
Proses kerja di dalam fungsi G_Phi adalah:
G_phi(A6, A5, A4, A3, A2, A1, A0) = G(A4, A2, A1, A0, A5, A3, A6).
Prosedur kerja dari algoritma fungsi G_Phi dapat dilihat pada flowchart berikut ini.
4.1.5
Algoritma Fungsi H
Fungsi G dipakai pada putaran ketiga fungsi hash HAVAL. Fungsi ini
memiliki 7 buah input parameter dengan simbol: A6, A5, A4, A3, A2, A1 dan A0.
75
76
4.1.6
memiliki 7 buah input parameter dengan simbol: A6, A5, A4, A3, A2, A1 dan A0.
Masing-masing variabel A berisi 32 bit biner. Fungsi H_Phi mengembalikan nilai
fungsi dengan panjang 32 bit biner. Dalam proses kerjanya, fungsi H_Phi
menggunakan fungsi H.
Proses kerja di dalam fungsi H_Phi adalah:
H_phi(A6, A5, A4, A3, A2, A1, A0) = H(A6, A1, A2, A3, A4, A5, A0)..
Prosedur kerja dari algoritma fungsi H_Phi dapat dilihat pada flowchart berikut ini.
4.1.7
Algoritma Prosedur FF
Prosedur FF dipakai pada putaran pertama fungsi hash HAVAL. Prosedur ini
memiliki 9 buah input parameter dengan simbol: A7, A6, A5, A4, A3, A2, A1, A0 dan w.
77
4.1.8
Algoritma Prosedur GG
Prosedur GG dipakai pada putaran kedua fungsi hash HAVAL. Prosedur ini
memiliki 10 buah input parameter dengan simbol: A7, A6, A5, A4, A3, A2, A1, A0, w
dan c. Masing-masing variabel A, w dan c berisi 32 bit biner. Prosedur GG meng-
78
update atau mengubah nilai variabel pada parameter pertamanya (A 7). Dalam proses
kerjanya, prosedur GG menggunakan fungsi G_Phi.
Proses kerja di dalam prosedur GG(A7, A6, A5, A4, A3, A2, A1, A0, w, c) adalah:
temp = G_phi(A6, A5, A4, A3, A2, A1, A0).
A7 = (temp >>> 7) + (A7 >>> 11) + w + c.
Prosedur kerja dari algoritma prosedur GG dapat dilihat pada flowchart berikut ini.
4.1.9
Algoritma Prosedur HH
Prosedur HH dipakai pada putaran ketiga fungsi hash HAVAL. Prosedur ini
memiliki 10 buah input parameter dengan simbol: A7, A6, A5, A4, A3, A2, A1, A0, w
dan c. Masing-masing variabel A, w dan c berisi 32 bit biner. Prosedur HH meng-
79
update atau mengubah nilai variabel pada parameter pertamanya (A 7). Dalam proses
kerjanya, prosedur HH menggunakan fungsi H_Phi.
Proses kerja di dalam prosedur HH(A7, A6, A5, A4, A3, A2, A1, A0, w, c) adalah:
temp = H_phi(A6, A5, A4, A3, A2, A1, A0).
A7 = (temp >>> 7) + (A7 >>> 11) + w + c.
Prosedur kerja dari algoritma prosedur HH dapat dilihat pada flowchart berikut ini.
80
variabel w dengan dimensi array 0 sampai 31. Selanjutnya, variabel x dan K diberi
nilai awal sebagai berikut:
K0 = x0 = 243F6A88
K1 = x1 = 85A308D3
K2 = x2 = 13198A2E
K3 = x3 = 03707344
K4 = x4 = A4093822
K5 = x5 = 299F31D0
K6 = x6 = 082EFA98
K7 = x7 = EC4E6C89
Setelah itu, nilai-nilai variabel x dimasukkan ke putaran proses fungsi
HAVAL. Setiap putaran HAVAL telah diatur sedemikian rupa dengan memanggil
prosedur FF sebanyak 32 kali (putaran 1), prosedur GG sebanyak 32 kali (putaran 2),
dan prosedur HH sebanyak 32 kali (putaran 3). Putaran ini dimaksudkan untuk
mengacak nilai variabel x dengan rumus-rumus yang ada.
Setelah proses putaran, fungsi hash HAVAL diteruskan dengan proses output,
sebagai berikut:
1. Tambahkan setiap nilai variabel x dari hasil proses dengan konstanta yang
bersesuaian.
Untuk nilai i = 0 sampai 7, lakukan xi = xi + Ki.
2. Proses tailor output, sebagai berikut:
81
82
83
84
85
86
87
4.2
4.2.1
2.
Memory 256 MB dan Harddisk dengan free space minimal 300 MB.
88
3.
4.
5.
4.2.2
Pengujian Program
Sebagai contoh, input message adalah: HAVAL adalah salah satu fungsi hash
satu arah (one-way hash function) yang diciptakan oleh Yuliang Zheng, Pieprzky dan
JenniferS.
89
90
Temp = (13198A2E AND 03707344) XOR (082EFA98 AND 243F6A88) XOR (299F31D0 AND
85A308D3) XOR (A4093822 AND 13198A2E) XOR A4093822
Temp = A6BD585C
(2) A7 = (Temp >>> 7) + (A7 >>> 11) + w
A7 = (A6BD585C >>> 7) + (EC4E6C89 >>> 11) + 48415641
A7 = 92CC5ABE
FF(X6, X5, X4, X3, X2, X1, X0, X7, W1)
FF(082EFA98,299F31D0,A4093822,03707344,13198A2E,85A308D3,243F6A88,92CC5ABE,4C2061
64)
(1) Temp = F_Phi(299F31D0,A4093822,03707344,13198A2E,85A308D3,243F6A88,92CC5ABE)
Temp = F(243F6A88,92CC5ABE,13198A2E,A4093822,299F31D0,85A308D3,03707344)
Temp = (85A308D3 AND 13198A2E) XOR (299F31D0 AND 92CC5ABE) XOR (A4093822 AND
243F6A88) XOR (03707344 AND 85A308D3) XOR 03707344
Temp = 27D44396
(2) A7 = (Temp >>> 7) + (A7 >>> 11) + w
A7 = (27D44396 >>> 7) + (082EFA98 >>> 11) + 4C206164
A7 = CB710FCA
FF(X5, X4, X3, X2, X1, X0, X7, X6, W2)
FF(299F31D0,A4093822,03707344,13198A2E,85A308D3,243F6A88,92CC5ABE,CB710FCA,616C61
68)
(1) Temp = F_Phi(A4093822,03707344,13198A2E,85A308D3,243F6A88,92CC5ABE,CB710FCA)
Temp = F(92CC5ABE,CB710FCA,85A308D3,03707344,A4093822,243F6A88,13198A2E)
Temp = (243F6A88 AND 85A308D3) XOR (A4093822 AND CB710FCA) XOR (03707344 AND
92CC5ABE) XOR (13198A2E AND 243F6A88) XOR 13198A2E
Temp = 9562D2A0
(2) A7 = (Temp >>> 7) + (A7 >>> 11) + w
A7 = (9562D2A0 >>> 7) + (299F31D0 >>> 11) + 616C6168
A7 = DC9C5AF3
FF(X4, X3, X2, X1, X0, X7, X6, X5, W3)
FF(A4093822,03707344,13198A2E,85A308D3,243F6A88,92CC5ABE,CB710FCA,DC9C5AF3,207361
6C)
(1) Temp = F_Phi(03707344,13198A2E,85A308D3,243F6A88,92CC5ABE,CB710FCA,DC9C5AF3)
Temp = F(CB710FCA,DC9C5AF3,243F6A88,13198A2E,03707344,92CC5ABE,85A308D3)
Temp = (92CC5ABE AND 243F6A88) XOR (03707344 AND DC9C5AF3) XOR (13198A2E AND
CB710FCA) XOR (85A308D3 AND 92CC5ABE) XOR 85A308D3
Temp = 062E1283
(2) A7 = (Temp >>> 7) + (A7 >>> 11) + w
A7 = (062E1283 >>> 7) + (A4093822 >>> 11) + 2073616C
A7 = 2AD43EB8
FF(X3, X2, X1, X0, X7, X6, X5, X4, W4)
FF(03707344,13198A2E,85A308D3,243F6A88,92CC5ABE,CB710FCA,DC9C5AF3,2AD43EB8,616820
73)
(1) Temp = F_Phi(13198A2E,85A308D3,243F6A88,92CC5ABE,CB710FCA,DC9C5AF3,2AD43EB8)
Temp = F(DC9C5AF3,2AD43EB8,92CC5ABE,85A308D3,13198A2E,CB710FCA,243F6A88)
Temp = (CB710FCA AND 92CC5ABE) XOR (13198A2E AND 2AD43EB8) XOR (85A308D3 AND
DC9C5AF3) XOR (243F6A88 AND CB710FCA) XOR 243F6A88
Temp = 20DE6871
(2) A7 = (Temp >>> 7) + (A7 >>> 11) + w
A7 = (20DE6871 >>> 7) + (03707344 >>> 11) + 61682073
A7 = AC2A4B51
FF(X2, X1, X0, X7, X6, X5, X4, X3, W5)
FF(13198A2E,85A308D3,243F6A88,92CC5ABE,CB710FCA,DC9C5AF3,2AD43EB8,AC2A4B51,617475
20)
(1) Temp = F_Phi(85A308D3,243F6A88,92CC5ABE,CB710FCA,DC9C5AF3,2AD43EB8,AC2A4B51)
Temp = F(2AD43EB8,AC2A4B51,CB710FCA,243F6A88,85A308D3,DC9C5AF3,92CC5ABE)
Temp = (DC9C5AF3 AND CB710FCA) XOR (85A308D3 AND AC2A4B51) XOR (243F6A88 AND
91
Temp
(2) A7 =
A7 =
A7 =
92
Temp
(2) A7 =
A7 =
A7 =
= CFDB3E0A
(Temp >>> 7) + (A7 >>> 11) + w
(CFDB3E0A >>> 7) + (DC9C5AF3 >>> 11) + 20617261
947CBC68
93
94
95
A7 = 7398993B
FF(X5, X4, X3, X2, X1, X0, X7, X6, W26)
FF(D9134013,B38F34E8,43EA34BD,9CC91B96,98DFD3D7,48EE212B,1FA49091,7398993B,2C2050
69)
(1) Temp = F_Phi(B38F34E8,43EA34BD,9CC91B96,98DFD3D7,48EE212B,1FA49091,7398993B)
Temp = F(1FA49091,7398993B,98DFD3D7,43EA34BD,B38F34E8,48EE212B,9CC91B96)
Temp = (48EE212B AND 98DFD3D7) XOR (B38F34E8 AND 7398993B) XOR (43EA34BD AND
1FA49091) XOR (9CC91B96 AND 48EE212B) XOR 9CC91B96
Temp = ACE71B2E
(2) A7 = (Temp >>> 7) + (A7 >>> 11) + w
A7 = (ACE71B2E >>> 7) + (D9134013 >>> 11) + 2C205069
A7 = 8BF54107
FF(X4, X3, X2, X1, X0, X7, X6, X5, W27)
FF(B38F34E8,43EA34BD,9CC91B96,98DFD3D7,48EE212B,1FA49091,7398993B,8BF54107,657072
7A)
(1) Temp = F_Phi(43EA34BD,9CC91B96,98DFD3D7,48EE212B,1FA49091,7398993B,8BF54107)
Temp = F(7398993B,8BF54107,48EE212B,9CC91B96,43EA34BD,1FA49091,98DFD3D7)
Temp = (1FA49091 AND 48EE212B) XOR (43EA34BD AND 8BF54107) XOR (9CC91B96 AND
7398993B) XOR (98DFD3D7 AND 1FA49091) XOR 98DFD3D7
Temp = 9B975A50
(2) A7 = (Temp >>> 7) + (A7 >>> 11) + w
A7 = (9B975A50 >>> 7) + (B38F34E8 >>> 11) + 6570727A
A7 = A3BE1314
FF(X3, X2, X1, X0, X7, X6, X5, X4, W28)
FF(43EA34BD,9CC91B96,98DFD3D7,48EE212B,1FA49091,7398993B,8BF54107,A3BE1314,6B7920
64)
(1) Temp = F_Phi(9CC91B96,98DFD3D7,48EE212B,1FA49091,7398993B,8BF54107,A3BE1314)
Temp = F(8BF54107,A3BE1314,1FA49091,98DFD3D7,9CC91B96,7398993B,48EE212B)
Temp = (7398993B AND 1FA49091) XOR (9CC91B96 AND A3BE1314) XOR (98DFD3D7 AND
8BF54107) XOR (48EE212B AND 7398993B) XOR 48EE212B
Temp = 13BBE202
(2) A7 = (Temp >>> 7) + (A7 >>> 11) + w
A7 = (13BBE202 >>> 7) + (43EA34BD >>> 11) + 6B792064
A7 = 0749156E
FF(X2, X1, X0, X7, X6, X5, X4, X3, W29)
FF(9CC91B96,98DFD3D7,48EE212B,1FA49091,7398993B,8BF54107,A3BE1314,0749156E,616E20
4A)
(1) Temp = F_Phi(98DFD3D7,48EE212B,1FA49091,7398993B,8BF54107,A3BE1314,0749156E)
Temp = F(A3BE1314,0749156E,7398993B,48EE212B,98DFD3D7,8BF54107,1FA49091)
Temp = (8BF54107 AND 7398993B) XOR (98DFD3D7 AND 0749156E) XOR (48EE212B AND
A3BE1314) XOR (1FA49091 AND 8BF54107) XOR 1FA49091
Temp = 177781D5
(2) A7 = (Temp >>> 7) + (A7 >>> 11) + w
A7 = (177781D5 >>> 7) + (9CC91B96 >>> 11) + 616E204A
A7 = 7E70A870
FF(X1, X0, X7, X6, X5, X4, X3, X2, W30)
FF(98DFD3D7,48EE212B,1FA49091,7398993B,8BF54107,A3BE1314,0749156E,7E70A870,656E6E
69)
(1) Temp = F_Phi(48EE212B,1FA49091,7398993B,8BF54107,A3BE1314,0749156E,7E70A870)
Temp = F(0749156E,7E70A870,8BF54107,1FA49091,48EE212B,A3BE1314,7398993B)
Temp = (A3BE1314 AND 8BF54107) XOR (48EE212B AND 7E70A870) XOR (1FA49091 AND
0749156E) XOR (7398993B AND A3BE1314) XOR 7398993B
Temp = 9CD4B90F
(2) A7 = (Temp >>> 7) + (A7 >>> 11) + w
A7 = (9CD4B90F >>> 7) + (98DFD3D7 >>> 11) + 656E6E69
A7 = FF9B33D5
96
97
temp = (X7 AND 000000FF) OR (X6 AND FF000000) OR (X5 AND 00FF0000) OR (X4 AND
0000FF00)
temp = (B2A4576D AND 000000FF) OR (9B86FB9C AND FF000000) OR (521D4DA8 AND
00FF0000) OR (559F7DD8 AND 0000FF00)
temp = 9B1D7D6D
X0 = X0 + (temp >>> 8)
= 6C1BE054 + (9B1D7D6D >>> 8)
= D9B6FDD1
temp = (X7 AND 0000FF00) OR (X6 AND 000000FF) OR (X5 AND FF000000) OR (X4 AND
00FF0000)
temp = (B2A4576D AND 0000FF00) OR (9B86FB9C AND 000000FF) OR (521D4DA8 AND
FF000000) OR (559F7DD8 AND 00FF0000)
temp = 529F579C
X1 = X1 + (temp >>> 16)
= 45132F72 + (529F579C >>> 16)
= 9CAF8211
temp = (X7 AND 00FF0000) OR (X6 AND 0000FF00) OR (X5 AND 000000FF) OR (X4 AND
FF000000)
temp = (B2A4576D AND 00FF0000) OR (9B86FB9C AND 0000FF00) OR (521D4DA8 AND
000000FF) OR (559F7DD8 AND FF000000)
temp = 55A4FBA8
X2 = X2 + (temp >>> 24)
= 4A1BC648 + (55A4FBA8 >>> 24)
= EF176E9D
temp = (X7 AND FF000000) OR (X6 AND 00FF0000) OR (X5 AND 0000FF00) OR (X4 AND
000000FF)
temp = (B2A4576D AND FF000000) OR (9B86FB9C AND 00FF0000) OR (521D4DA8 AND
0000FF00) OR (559F7DD8 AND 000000FF)
temp = B2864DD8
X3 = X3 + temp
= B7E3DB88 + B2864DD8
= 6A6A2960
98
99
100
101