Member baru? Bingung? Perlu bantuan? Silakan baca panduan singkat untuk ikut berdiskusi.

Welcome to Forum Sains Indonesia. Please login or sign up.

Maret 03, 2024, 03:31:02 PM

Login with username, password and session length

Topik Baru

Artikel Sains

Anggota
Stats
  • Total Tulisan: 139,653
  • Total Topik: 10,405
  • Online today: 80
  • Online ever: 1,582
  • (Desember 22, 2022, 06:39:12 AM)
Pengguna Online
Users: 0
Guests: 42
Total: 42

Aku Cinta ForSa

ForSa on FB ForSa on Twitter

Algoritma SHA-1

Dimulai oleh ca, September 28, 2010, 04:20:53 PM

« sebelumnya - berikutnya »

0 Anggota dan 1 Pengunjung sedang melihat topik ini.

ca

Standard (SHS) dengan SHA sebagai algoritma yang digunakan. Dapat disimpulkan SHS adalah
standar sedangkan SHA adalah algoritma.
Standar menetapkan SHA yang diperlukan untuk menjamin keamanan DSA. Ketika
pesan dengan sembarang panjang < 264 bit dimasukkan, SHA menghasilkan 160 bit keluaran
yang disebut message digest (MD). MD ini kemudian dimasukkan ke dalam DSA, yang
menghitung tanda tangan digital untuk pesan tersebut. Penandatanganan MD (dan bukannya
penandatanganan secara langsung) sering kali meningkatkan efisiensi proses, karena MD
biasanya jauh lebih kecil dibanding pesan aslinya. MD pesan yang sama seharusnya dapat
diperoleh oleh pemeriksa tanda tangan ketika menerima pesan dari pengirim dengan cara
memasukkan pesan tersebut ke fungsi hash SHA. SHA dikatakan aman karena didesain supaya
secara matematis tidak dimungkinkan untuk mendapatkan pesan aslinya bila diberikan hashnya
atau tidak mungkin mendapatkan dua pesan yang berbeda yang menghasikan MD yang sama.
SHA dibuat berdasarkan rancangan yang serupa dengan MD4 yang dibuat oleh Prof. Ronald L.
Rivest dari MIT. SHA menghasilkan kelaran sidik jari 160 bit, lebih panjang dibanding MD5.
Ketiga algoritma SHA adalah struktur yang berbeda dan unggul seperti SHA-0, SHA-1,
dan SHA-2. SHA-2 menggunakan algoritma identik dengan variabel digest ukuran yang terkenal
sebagai SHA-224, SHA-256, SHA-384, dan SHA-512.
Cara Kerja SHA
Mula-mula pesan diberi tambahan untuk membuat panjangnya menjadi kelipatan 512 bit
(L x 512). Jumlah bit data asal adalah K bit. Tambahkan bit '1' kemudian tambahkan bit '0'
secukupnya sampai 64 bit kurangnya dari kelipatan 512(512-64=448), yang disebut juga sebagai
kongruen dengan 448 (mod 512). Akhirnya tambahkan 64 bit yang menyatakan panjang pesan
sebelum diberi tambahan. Pesan dibagi-bagi menjadi blok-blok berukuran 512 bit dan setiap blok
diolah. Keluaran setiap blok digabungkan dengan keluaran blok berikutnya. Sehingga akhirnya
diperoleh digest.
Pengubahan satu huruf dapat menghasilkan cipher yang jauh berbeda.
Contoh enkripsi SHA:
Plainteks: "I heard you crying loud all the way accross the town"
Cipherteks: eaeb1b86f6e41c1b40d7c288f6d7fbff3f948a6e
Menghilangkan huruf "d" pada kata "heard"
Plainteks: "I hear you crying loud all the way accross the town"
Cipherteks: d9aee3365c0ef380f4021fd618b4d4ea3ad9e5a4


ca

Ada yang tau ga cara perhitungan algoritma sha-1 ini sampai mendapatkan Mesagge Digest nya ???


ca

Ini cara perhitungannya :

Langkah-langkah dalam menghitung nilai hash adalah sebagai berikut :
1.   Message Padding
SHA-1 digunakan untuk menghitung message diggest dari pesan atau file data yang disediakan sebagai input. Pesan atau file dianggap sebagai kumpulan bit-bit. Panjang dari pesan adalah banyaknya bit didalam pesan (Pesan kosong memiliki panjang 0). Jika banyaknya bit di dalam pesan merupakan kelipatan 8, untuk memudahkan pembacaan dapat ditampilkan dalam format hexadecimal.
Tujuan dari message padding adalah membuat panjang total dari isi pesan menjadi kelipatan 512 bit. SHA-1 secara sekuensial memproses blok 512 bit ketika menghitung message diggest.

   
Pada message padding, tambahkan satu buah "1" , diikuti oleh m buah "0" diikuti oleh 64 bit integer pada akhir pesan untuk menghasilkan pesan dengan panjang 512 * n. 64 bit integer tersebut adalah panjang dari pesan asli sebelum message padding.
Misalkan pesan dengan panjang L < 26. Sebelum pesan menjadi input SHA-1, dilakukan message padding sebagai berikut
Misal pesan aslinya (L = 40) adalah :
01100001 01100010 01100011 01100100 01100101 (biner)
61 62 63 64 65 (hex)
Tambahkan "1" pada akhir pesan
01100001 01100010 01100011 01100100 01100101 1
Karena L = 40, maka hasilnya menjadi = 41, sehingga diperlukan "0" sebanyak
448 – 41 = 407 buah.
01100001 01100010 01100011 01100100 01100101 10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
Dalam hexadecimal hasilnya adalah
61626364 65800000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000


Tambahkan 64 bit representasi dari panjang pesan asli. Untuk L = 40, maka representasi dari 64 bit panjang pesan adalah
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00101000 (biner)
00000000 00000028 (hexa)
Maka, setelah ditambahkan hasilnya :
(dalam biner)
01100001 01100010 01100011 01100100 01100101 10000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000 00000000 00000000 00000000 00101000
(dalam hexa)
61626364 65800000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000028
Hasil dari message padding adalah n 512-bit block (n * 16 word) , untuk suatu n > 0.
Padded message disimbolkan dengan M(1), M(2), ..., M(n)
1.   Fungsi dan Konstanta yang Digunakan
Serentetan fungsi logic f(0), f(1), f(2), .. ,f(79) digunakan dalam SHA-1. Setiap f(t) , 0 ≤ t ≤ 79 beroperasi pada 32bit word B, C, D dan menghasilkan 32bit word sebagai output.
f( t; B,C,D) didefinisikan sebagai berikut. Untuk word B,C,D :
f(t;B,C,D) = (B AND C) OR ((NOT B) AND D) ( 0 <= t <= 19)
f(t;B,C,D) = B XOR C XOR D (20 <= t <= 39)
f(t;B,C,D) = (B AND C) OR (B AND D) OR (C AND D) (40 <= t <= 59)
f(t;B,C,D) = B XOR C XOR D (60 <= t <= 79)
Serentetan konstanta K(0), K(1), K(2), ... , K(79) digunakan dalam SHA-1.
Dalam hexadecimal konstanta tersebut adalah :
K(t) = 5A827999 ( 0 <= t <= 19)
K(t) = 6ED9EBA1 (20 <= t <= 39)
K(t) = 8F1BBCDC (40 <= t <= 59)
K(t) = CA62C1D6 (60 <= t <= 79)
Selain itu juga digunakan fungsi Circular Left Shift. Circular left shift S^n(X) , dimana X adalah 32 bit word dan n adalah bilangan integer dengan 0 ≤ n < 32.
S^n(X) = (X << n) OR (X >> 32-n)
Contoh: Misalkan X = 11010000 01010000 11100000 00001010 , dan n = 5
Maka
X << 5 = 00001010 00011100 00000001 01000000
X >> 27 = 00000000 00000000 00000000 00011010
————————————————————— (OR)
S^5(X) = 00001010 00011100 00000001 01011010
1.   Menghitung Message Diggest
Message diggest dihitung menggunakan hasil message padding. Komputasi menggunakan dua jenis buffer, setiap jenis buffer tediri dari 5 buah 32-bit word. 5 buah 32-bit word buffer pertama dilabeli dengan A, B, C, D, E. Sedangkan buffer kedua dilabeli H0, H1, H2, H3, H4. Terdapat sebuah sekuen 80 word 32-bit, yang dilabeli W(0), W(1), W(2), ..., W(79) dan juga sebuah word buffer yang dilabeli dengan TEMP. Untuk men-generate message diggest, block-block 16 word M(1) M(2) M(3) ... M(n) hasil message diggest diproses secara berurutan. Setiap pemrosesan M(i) membutuhkan 80 langkah.
Sebelum memproses apapun, untuk pertama kali, H diinisialisasi sebagai berikut:
H0 = 67452301
H1 = EFCDAB89
H2 = 98BADCFE
H3 = 10325476
H4 = C3D2E1F0
Selanjutnya lakukan komputasi dari M(1), M(2), ... , M(n). Untuk setiap M(i), lakukan langkah langkah sebagai berikut ini :
Step 1   Divide M(i) into 16 words W(0), W(1), ... , W(15), where W(0) is the left-most word.
Step 2   For t = 16 to 79 do
W(t) = S^1( W(t-3) XOR W(t-8) XOR W(t-14) XOR W(t-16) )
Step 3   Let A = H0, B = H1, C = H2, D = H3, E = H4
Step 4   For t = 0 to 79 do
TEMP = S^5(A) + f(t;B,C,D) + E + W(t) + K(t);
E = D;
D = C;
C = S^30(B);
B = A;
A = TEMP;
Step 5   H0 = H0 + A;
H1 = H1 + B;
H2 = H2 + C;
H3 = H3 + D;
H4 = H4 + E;
Setelah memproses M(n), message diggest adalah 160-bit string yang direpresentasikan oleh 5 word

ca

Saya masi kurang faham tentang perhitungannnya.....????
mohon bantuannya....????

ca

Kok ga ada yang bantu sich....????????

cph

tdk pahamnya mulai mana?
mungkin bs dgn cara mencari source code yg mengimplementasikan SHA-1, siapa tahu bs memahami algoritma nya

idiotique_hebb

wew, tanya sendiri jawab sendiri :O. maaf, sementara ndak gitu paham sama cryptography.
Lagi belajar Objective C / GNUStep / Cocoa API
Kroper for Mac : [pranala luar disembunyikan, sila masuk atau daftar.]

ndy_88

Kutip dari: cph pada September 29, 2010, 10:42:48 PM
tdk pahamnya mulai mana?
mungkin bs dgn cara mencari source code yg mengimplementasikan SHA-1, siapa tahu bs memahami algoritma nya

sepertinya ini ide yg bagus,karna waktu itu gw jga ngalamin yg sama..
mecahin algoritma exemplar based..

utusan langit

dan ada yang bisa share source code nya?
kalau ada sekalian yang MD5 ya,.. hehehe
dulu sempet nyari dan ketemu tapi nggak tahu algoritmanya