Lompat ke isi

SHA-2: Perbedaan antara revisi

Ensiklopedia Pengetahuan Universitas Islam Sultan Agung
Maintenance script (bicara | kontrib)
Impor teks terkontrol dari Wikipedia bahasa Indonesia; revisi 29422653; atribusi sumber disertakan.
 
Maintenance script (bicara | kontrib)
Presentation V4: sitasi, referensi, Math, Wikimedia Commons, dan atribusi
 
Baris 1: Baris 1:
'''SHA-2''' atau '''AHK-2''' ('''''Secure Hash Algorithm 2''''', ) adalah sebuah [[fungsi kriptografik hash]] yang didisain oleh [[Badan Keamanan Nasional]] (BKN) Amerika Serikat dan pertama kali dipublikasikan pada tahun 2001. Set ini dibangun menggunakan [[Konstruksi Merkle–Damgård]], [[fungsi kompresi satu arah]]nya dibangun dengan menggunakan [[Kompresi fungsi satu arah#Davies–Meyer|struktur Davies–Meyer]] dari ''[[block chipher]]'' yang dispesialisasikan.
'''SHA-2''' atau '''AHK-2''' ('''''Secure Hash Algorithm 2''''', ) adalah sebuah [[fungsi kriptografik hash]] yang didisain oleh [[Badan Keamanan Nasional]] (BKN) Amerika Serikat dan pertama kali dipublikasikan pada tahun 2001.<ref>[http://www.staff.science.uu.nl/~werkh108/docs/study/Y5_07_08/infocry/project/Cryp08.pdf On the Secure Hash Algorithm family].</ref><ref>[https://id.wikipedia.org/w/index.php?title=SHA-2&oldid=29422653 sumber pada Wikipedia bahasa Indonesia]</ref> Set ini dibangun menggunakan [[Konstruksi Merkle–Damgård]], [[fungsi kompresi satu arah]]nya dibangun dengan menggunakan [[Kompresi fungsi satu arah#Davies–Meyer|struktur Davies–Meyer]] dari ''[[block chipher]]'' yang dispesialisasikan.


SHA-2 memasukkan perubahan signifikan dibanding pendahulunya, [[SHA-1]]. Keluarga SHA-2 terdiri dari enam fungsi hash dengan [[fungsi hash kriptografik#Perpendekan pesan|perpendekan]] (nilai hash) yang berupa bita 224, 256, 384 atau 512: '''SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256'''. SHA-256 dan SHA-512 merupakan fungsi hash yang diprogram dengan delapan kata 32-bit dan 64-bit. Pengkodean ini menggunakan jumlah pergeseran dan konstanta penambahan yang berbeda, tetapi strukturnya sebenarnya hampir identik, hanya berbeda dalam jumlah rentetan pengkodean. SHA-224 dan SHA-384 merupakan versi terpotong dari SHA-256 dan SHA-512, dikodekan dengan nilai inisial berbeda. SHA-512/224 dan SHA-512/256 juga merupakan versi terpotong dari SHA-512, tetapi nilai inisialnya dihasilkan menggunakan metode yang dideskripsikan di [[Federal Information Processing Standards]] (FIPS) PUB 180-4.
SHA-2 memasukkan perubahan signifikan dibanding pendahulunya, [[SHA-1]]. Keluarga SHA-2 terdiri dari enam fungsi hash dengan [[fungsi hash kriptografik#Perpendekan pesan|perpendekan]] (nilai hash) yang berupa bita 224, 256, 384 atau 512: '''SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256'''. SHA-256 dan SHA-512 merupakan fungsi hash yang diprogram dengan delapan kata 32-bit dan 64-bit. Pengkodean ini menggunakan jumlah pergeseran dan konstanta penambahan yang berbeda, tetapi strukturnya sebenarnya hampir identik, hanya berbeda dalam jumlah rentetan pengkodean. SHA-224 dan SHA-384 merupakan versi terpotong dari SHA-256 dan SHA-512, dikodekan dengan nilai inisial berbeda. SHA-512/224 dan SHA-512/256 juga merupakan versi terpotong dari SHA-512, tetapi nilai inisialnya dihasilkan menggunakan metode yang dideskripsikan di [[Federal Information Processing Standards]] (FIPS) PUB 180-4.


SHA-2 dipublikasikan pertama kali oleh [[Institusi Nasional Umum dan Teknogi]] (INUK) sebagai standar federasi Amerika Serikat (FIPS). Keluarga algoritma SHA-2 dipatenkan di hak paten Amerika serikat nomor 6829355. Pemerintah Amerika Serikat mengeluarkan paten ini dibawah lisensi [[bebas pajak]] (''[[:en:royalty-free|royalty-free]]'').
SHA-2 dipublikasikan pertama kali oleh [[Institusi Nasional Umum dan Teknogi]] (INUK) sebagai standar federasi Amerika Serikat (FIPS). Keluarga algoritma SHA-2 dipatenkan di hak paten Amerika serikat nomor 6829355.<ref>[https://id.wikipedia.org/w/index.php?title=SHA-2&oldid=29422653 sumber pada Wikipedia bahasa Indonesia]</ref> Pemerintah Amerika Serikat mengeluarkan paten ini dibawah lisensi [[bebas pajak]] (''[[:en:royalty-free|royalty-free]]'').<ref>[https://datatracker.ietf.org/ipr/858/ IPR Details: The United States of America as represented by the National Security Agency's general license statement]. ''IETF Datatracker''.</ref>


Pada tahun 2011, terdapat serangan publik terbaik yang merusak [[serangan preimage|resistensi ''preimage'']] untuk 57 dari 80 rentetan pengkodean SHA-512 dan 52 dari 64 rentetan pengkodean SHA-256.*-++
Pada tahun 2011, terdapat serangan publik terbaik yang merusak [[serangan preimage|resistensi ''preimage'']] untuk 57 dari 80 rentetan pengkodean SHA-512 dan 52 dari 64 rentetan pengkodean SHA-256.<ref>[https://id.wikipedia.org/w/index.php?title=SHA-2&oldid=29422653 sumber pada Wikipedia bahasa Indonesia]</ref><ref>[https://id.wikipedia.org/w/index.php?title=SHA-2&oldid=29422653 sumber pada Wikipedia bahasa Indonesia]</ref>*-++


==Standar hash==
==Standar hash==
Dengan publikasi FIPS PUB 180-2, NIST menambahkan tiga fungsi penambahan hash pada keluarga SHA. Algoritma tersebut secara kolektif dinamakan sebagai SHA-2, yang dinamakan atas perpendekan panjang (dalam bita): SHA-256, SHA-384, dan SHA-512.
Dengan publikasi FIPS PUB 180-2, NIST menambahkan tiga fungsi penambahan hash pada keluarga SHA. Algoritma tersebut secara kolektif dinamakan sebagai SHA-2, yang dinamakan atas perpendekan panjang (dalam bita): SHA-256, SHA-384, dan SHA-512.
==Vektor uji coba==
==Vektor uji coba==
Baris 27: Baris 25:


Bahkan perubahan kecil dalam suatu pesan (dengan kemungkinan sangat besar) akan menghasilkan hash yang sangat berbeda, dikarenakan [[efek Avalanche]]. Sebagai contoh, menambahkan titik pada suatu kalimat dapat mengubah banyak dari bita di dalam hash:
Bahkan perubahan kecil dalam suatu pesan (dengan kemungkinan sangat besar) akan menghasilkan hash yang sangat berbeda, dikarenakan [[efek Avalanche]]. Sebagai contoh, menambahkan titik pada suatu kalimat dapat mengubah banyak dari bita di dalam hash:


  0x&nbsp;82bcdccfbc2763dbfbbda3a4669eb3182e6cd7169b0b81a1b8d6b4b1
  0x&nbsp;82bcdccfbc2763dbfbbda3a4669eb3182e6cd7169b0b81a1b8d6b4b1
Baris 35: Baris 32:
''[[Pseudocode]]'' untuk algoritma SHA-256 adalah sebagai berikut. Perlu diingiat bahwa terdapat peningkatan luar biasa dalam pencampuran antara bita-bita dari <code>w&#91;16..63&#93;</code> kata dibandingkan SHA-1.
''[[Pseudocode]]'' untuk algoritma SHA-256 adalah sebagai berikut. Perlu diingiat bahwa terdapat peningkatan luar biasa dalam pencampuran antara bita-bita dari <code>w&#91;16..63&#93;</code> kata dibandingkan SHA-1.




   
  h0 := 0x6a09e667
  h0 := 0x6a09e667
  h1 := 0xbb67ae85
  h1 := 0xbb67ae85
Baris 45: Baris 48:
  h7 := 0x5be0cd19
  h7 := 0x5be0cd19




  k&#91;0..63&#93; :=
  k&#91;0..63&#93; :=
Baris 56: Baris 60:
     0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
     0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2


 
  dimulai dengan pesan awal dengan panjang L bita
  dimulai dengan pesan awal dengan panjang L bita
  penambahan bita '1' tunggal
  penambahan bita '1' tunggal
  penambahan K '0' bita, di mana K merupakan nilai minimal bilangan >= 0 dan (L + 1 + K + 64) merupakan kelipatan 512
  penambahan K '0' bita, di mana K merupakan nilai minimal bilangan >= 0 dan (L + 1 + K + 64) merupakan kelipatan 512
  penmbahan L sebagai intergral big-endian 64-bita, membuat panjang setelah-proses sebagai kelipatan dari 512 bita
  penmbahan L sebagai intergral big-endian 64-bita, membuat panjang setelah-proses sebagai kelipatan dari 512 bita  
  dan disusun sedemikian rupa sehingga bit dalam pesan adalah: <pesan awal dengan panjang L> 1 <nol sebanyak K> <L sebagai intergral 64 bita> , (jumlah bita akan menjadi kelipatan dari 512)
  dan disusun sedemikian rupa sehingga bit dalam pesan adalah: <pesan awal dengan panjang L> 1 <nol sebanyak K> <L sebagai intergral 64 bita> , (jumlah bita akan menjadi kelipatan dari 512)


 
  memecah pesan menjadi chunk-chunk 512-bita
  memecah pesan menjadi chunk-chunk 512-bita
  '''untuk''' setiap chunk
  '''untuk''' setiap chunk
Baris 70: Baris 74:
     menyalin chunk menjadi 16 huruf pertama w[0..15] dari pesan schedule array
     menyalin chunk menjadi 16 huruf pertama w[0..15] dari pesan schedule array


 
   
     '''for''' i '''from''' 16 to 63
     '''for''' i '''from''' 16 to 63
         s0 := (w&#91;i-15&#93; '''rightrotate'''  7) '''xor''' (w&#91;i-15&#93; '''rightrotate''' 18) '''xor''' (w&#91;i-15&#93; '''rightshift'''  3)
         s0 := (w&#91;i-15&#93; '''rightrotate'''  7) '''xor''' (w&#91;i-15&#93; '''rightrotate''' 18) '''xor''' (w&#91;i-15&#93; '''rightshift'''  3)
Baris 76: Baris 80:
         w&#91;i&#93; := w&#91;i-16&#93; '''+''' s0 '''+''' w&#91;i-7&#93; '''+''' s1
         w&#91;i&#93; := w&#91;i-16&#93; '''+''' s0 '''+''' w&#91;i-7&#93; '''+''' s1


 
   
     a := h0
     a := h0
     b := h1
     b := h1
Baris 86: Baris 90:
     h := h7
     h := h7


 
   
     '''for''' i '''from''' 0 to 63
     '''for''' i '''from''' 0 to 63
         S1 := (e '''rightrotate''' 6) '''xor''' (e '''rightrotate''' 11) '''xor''' (e '''rightrotate''' 25)
         S1 := (e '''rightrotate''' 6) '''xor''' (e '''rightrotate''' 11) '''xor''' (e '''rightrotate''' 25)
Baris 104: Baris 108:
           := temp1 '''+''' temp2
           := temp1 '''+''' temp2


 
   
     h0 := h0 '''+''' a
     h0 := h0 '''+''' a
     h1 := h1 '''+''' b
     h1 := h1 '''+''' b
Baris 114: Baris 118:
     h7 := h7 '''+''' h
     h7 := h7 '''+''' h


 
  digest := hash := h0 '''append''' h1 '''append''' h2 '''append''' h3 '''append''' h4 '''append''' h5 '''append''' h6 '''append''' h7
  digest := hash := h0 '''append''' h1 '''append''' h2 '''append''' h3 '''append''' h4 '''append''' h5 '''append''' h6 '''append''' h7


Baris 123: Baris 127:
* output yang dikonstruksikan dengan peluluhan <code>h7</code>.
* output yang dikonstruksikan dengan peluluhan <code>h7</code>.


 
  h&#91;0..7&#93; :=
  h&#91;0..7&#93; :=
     0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4
     0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4
Baris 138: Baris 142:
* banyak nilai shift dan rotate yang digunakan berbeda.
* banyak nilai shift dan rotate yang digunakan berbeda.


 
  h&#91;0..7&#93; := 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1,
  h&#91;0..7&#93; := 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1,  
             0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179
             0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179




  k&#91;0..79&#93; := 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538,
  k&#91;0..79&#93; := 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538,  
             0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe,
             0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe,  
             0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235,
             0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235,  
             0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65,
             0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65,  
             0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, 0x983e5152ee66dfab,
             0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, 0x983e5152ee66dfab,  
             0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725,
             0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725,  
             0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed,
             0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed,  
             0x53380d139d95b3df, 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b,
             0x53380d139d95b3df, 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b,  
             0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218,
             0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218,  
             0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, 0x19a4c116b8d2d0c8, 0x1e376c085141ab53,
             0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, 0x19a4c116b8d2d0c8, 0x1e376c085141ab53,  
             0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373,
             0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373,  
             0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec,
             0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec,  
             0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, 0xca273eceea26619c,
             0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, 0xca273eceea26619c,  
             0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, 0x0a637dc5a2c898a6,
             0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, 0x0a637dc5a2c898a6,  
             0x113f9804bef90dae, 0x1b710b35131c471b, 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc,
             0x113f9804bef90dae, 0x1b710b35131c471b, 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc,  
             0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817
             0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817




  S0 := (a '''rightrotate''' 28) '''xor''' (a '''rightrotate''' 34) '''xor''' (a '''rightrotate''' 39)
  S0 := (a '''rightrotate''' 28) '''xor''' (a '''rightrotate''' 34) '''xor''' (a '''rightrotate''' 39)
Baris 168: Baris 174:


SHA-384 identikal dengan SHA-512, kecuali:
SHA-384 identikal dengan SHA-512, kecuali:
* nilai inisial hash <code>h0</code> melalui <code>h7</code> berbeda (diambil dari bilangan prima ke-9 sampai ke-16), dan
* nilai inisial hash <code>h0</code> melalui <code>h7</code> berbeda (diambil dari bilangan prima ke-9 sampai ke-16), dan  
* output disusun oleh peluluhan <code>h6</code> dan <code>h7</code>.
* output disusun oleh peluluhan <code>h6</code> dan <code>h7</code>.


 
  h&#91;0..7&#93; := 0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17, 0x152fecd8f70e5939,
  h&#91;0..7&#93; := 0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17, 0x152fecd8f70e5939,  
             0x67332667ffc00b31, 0x8eb44a8768581511, 0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4
             0x67332667ffc00b31, 0x8eb44a8768581511, 0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4


Baris 178: Baris 184:
* nilau inisial hash <code>h0</code> melalui <code>h7</code> diberikan oleh ''SHA-512/t IV generation function'',
* nilau inisial hash <code>h0</code> melalui <code>h7</code> diberikan oleh ''SHA-512/t IV generation function'',
* output disusun oleh perpotongan rangkaian dari <code>h0</code> melalu <code>h7</code> di ''t'' bita,
* output disusun oleh perpotongan rangkaian dari <code>h0</code> melalu <code>h7</code> di ''t'' bita,
* nilau ''t'' tidak diperbolehkan setara dengan 384 dalam SHA-384
* nilau ''t'' tidak diperbolehkan setara dengan 384 dalam SHA-384  
* nilai ''t'' 224 dan 256 disetujui.
* nilai ''t'' 224 dan 256 disetujui.


Baris 185: Baris 191:
Contoh implementasi C untuk keluarga fungsi hash SHA-2 dapat ditemukan di RFC 6234.
Contoh implementasi C untuk keluarga fungsi hash SHA-2 dapat ditemukan di RFC 6234.


==Referensi==
== Referensi ==
 
<references />
 


== Sumber dan atribusi ==
== Sumber dan atribusi ==


Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=SHA-2&oldid=29422653 Wikipedia bahasa Indonesia], revisi 29422653 (2026-07-05T15:29:01Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.
Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=SHA-2&oldid=29422653 Wikipedia bahasa Indonesia], revisi 29422653 (2026-07-05T15:29:01Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.
<!-- WIKI_UNISSULA_PRESENTATION_V4 -->

Revisi terkini sejak 23 Agustus 2026 13.57

SHA-2 atau AHK-2 (Secure Hash Algorithm 2, ) adalah sebuah fungsi kriptografik hash yang didisain oleh Badan Keamanan Nasional (BKN) Amerika Serikat dan pertama kali dipublikasikan pada tahun 2001.[1][2] Set ini dibangun menggunakan Konstruksi Merkle–Damgård, fungsi kompresi satu arahnya dibangun dengan menggunakan struktur Davies–Meyer dari block chipher yang dispesialisasikan.

SHA-2 memasukkan perubahan signifikan dibanding pendahulunya, SHA-1. Keluarga SHA-2 terdiri dari enam fungsi hash dengan perpendekan (nilai hash) yang berupa bita 224, 256, 384 atau 512: SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224, SHA-512/256. SHA-256 dan SHA-512 merupakan fungsi hash yang diprogram dengan delapan kata 32-bit dan 64-bit. Pengkodean ini menggunakan jumlah pergeseran dan konstanta penambahan yang berbeda, tetapi strukturnya sebenarnya hampir identik, hanya berbeda dalam jumlah rentetan pengkodean. SHA-224 dan SHA-384 merupakan versi terpotong dari SHA-256 dan SHA-512, dikodekan dengan nilai inisial berbeda. SHA-512/224 dan SHA-512/256 juga merupakan versi terpotong dari SHA-512, tetapi nilai inisialnya dihasilkan menggunakan metode yang dideskripsikan di Federal Information Processing Standards (FIPS) PUB 180-4.

SHA-2 dipublikasikan pertama kali oleh Institusi Nasional Umum dan Teknogi (INUK) sebagai standar federasi Amerika Serikat (FIPS). Keluarga algoritma SHA-2 dipatenkan di hak paten Amerika serikat nomor 6829355.[3] Pemerintah Amerika Serikat mengeluarkan paten ini dibawah lisensi bebas pajak (royalty-free).[4]

Pada tahun 2011, terdapat serangan publik terbaik yang merusak resistensi preimage untuk 57 dari 80 rentetan pengkodean SHA-512 dan 52 dari 64 rentetan pengkodean SHA-256.[5][6]*-++

Standar hash

Dengan publikasi FIPS PUB 180-2, NIST menambahkan tiga fungsi penambahan hash pada keluarga SHA. Algoritma tersebut secara kolektif dinamakan sebagai SHA-2, yang dinamakan atas perpendekan panjang (dalam bita): SHA-256, SHA-384, dan SHA-512.

Vektor uji coba

Nilai hash dari string kosong (input teks sepanjang nol).

0x d14a028c2a3a2bc9476102bb288234c415a2b01f828ea62ac5b3e42f
0x e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
0x 38b060a751ac96384cd9327eb1b1e36a21fdb71114be07434c0cc7bf63f6e1da274edebfe76f65fbd51ad2f14898b95b
0x cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e
0x 6ed0dd02806fa89e25de060c19d3ac86cabb87d6a0ddd05c333b84f4
0x c672b8d1ef56ed28ab87c3622c5114069bdd3ad7b8f9737498d0c01ecef0967a

Bahkan perubahan kecil dalam suatu pesan (dengan kemungkinan sangat besar) akan menghasilkan hash yang sangat berbeda, dikarenakan efek Avalanche. Sebagai contoh, menambahkan titik pada suatu kalimat dapat mengubah banyak dari bita di dalam hash:

0x 82bcdccfbc2763dbfbbda3a4669eb3182e6cd7169b0b81a1b8d6b4b1
0x b71c91e1cd82d017ce78391b47b29ce792294f2673136dd25aace018

Pseudocode

Pseudocode untuk algoritma SHA-256 adalah sebagai berikut. Perlu diingiat bahwa terdapat peningkatan luar biasa dalam pencampuran antara bita-bita dari w[16..63] kata dibandingkan SHA-1.





h0 := 0x6a09e667
h1 := 0xbb67ae85
h2 := 0x3c6ef372
h3 := 0xa54ff53a
h4 := 0x510e527f
h5 := 0x9b05688c
h6 := 0x1f83d9ab
h7 := 0x5be0cd19


k[0..63] :=
   0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
   0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
   0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
   0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
   0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
   0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
   0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
   0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2


dimulai dengan pesan awal dengan panjang L bita
penambahan bita '1' tunggal
penambahan K '0' bita, di mana K merupakan nilai minimal bilangan >= 0 dan (L + 1 + K + 64) merupakan kelipatan 512
penmbahan L sebagai intergral big-endian 64-bita, membuat panjang setelah-proses sebagai kelipatan dari 512 bita   
dan disusun sedemikian rupa sehingga bit dalam pesan adalah: <pesan awal dengan panjang L> 1 <nol sebanyak K> <L sebagai intergral 64 bita> , (jumlah bita akan menjadi kelipatan dari 512)


memecah pesan menjadi chunk-chunk 512-bita
untuk setiap chunk
    membuat sebuah pesan schedule array 64-masukan w[0..63] dari kata 32 bita
    menyalin chunk menjadi 16 huruf pertama w[0..15] dari pesan schedule array


    for i from 16 to 63
        s0 := (w[i-15] rightrotate  7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift  3)
        s1 := (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) xor (w[i-2] rightshift 10)
        w[i] := w[i-16] + s0 + w[i-7] + s1


    a := h0
    b := h1
    c := h2
    d := h3
    e := h4
    f := h5
    g := h6
    h := h7


    for i from 0 to 63
        S1 := (e rightrotate 6) xor (e rightrotate 11) xor (e rightrotate 25)
        ch := (e and f) xor ((not e) and g)
        temp1 := h + S1 + ch + k[i] + w[i]
        S0 := (a rightrotate 2) xor (a rightrotate 13) xor (a rightrotate 22)
        maj := (a and b) xor (a and c) xor (b and c)
        temp2 := S0 + maj
        h := g
        g := f
        f := e
        e := d + temp1
        d := c
        c := b
        b := a
         := temp1 + temp2


    h0 := h0 + a
    h1 := h1 + b
    h2 := h2 + c
    h3 := h3 + d
    h4 := h4 + e
    h5 := h5 + f
    h6 := h6 + g
    h7 := h7 + h


digest := hash := h0 append h1 append h2 append h3 append h4 append h5 append h6 append h7

Komputasi dari nilai ch dan maj dapat dioptimalkan menggunakan cara yang sama dengan yang diatur dalam SHA-1.

SHA-224 identikal dengan SHA-256, kecuali:

  • nilai hash inisial h0 melewati h7 berbeda, and
  • output yang dikonstruksikan dengan peluluhan h7.


h[0..7] :=
    0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4

SHA-512 identikal dalam konteks struktur dengan SHA-256, tetapi:

  • pesan dipecah menjadi chunk 1024 bita
  • nilai hash inisial dan konstanta putara diperpanjang ke 64 bita,
  • terdapat 80 putaran dan bukan 64,
  • schedule array pesan w memiliki 80 kata 64 bita dan bukan 64 kata 32 bita,
  • untuk memperpanjang schedule array pesan w, loop dari 16 ke 79 dan bukan dari 16 ke 63,
  • konstanra bulat didasarkan pada 80 bilangan prima pertama 2..409,
  • ukuran kata yang digunakan untuk kalkulasi adalah sepanjang 64 bita,
  • panjang yang ditambahkan dari pesan (sebelum pra-proses), dalam bita, adalah sebuah integral big-edian 128 bita, dan
  • banyak nilai shift dan rotate yang digunakan berbeda.


h[0..7] := 0x6a09e667f3bcc908, 0xbb67ae8584caa73b, 0x3c6ef372fe94f82b, 0xa54ff53a5f1d36f1, 
           0x510e527fade682d1, 0x9b05688c2b3e6c1f, 0x1f83d9abfb41bd6b, 0x5be0cd19137e2179


k[0..79] := 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, 0x3956c25bf348b538, 
            0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, 0xd807aa98a3030242, 0x12835b0145706fbe, 
            0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 
            0xc19bf174cf692694, 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, 
            0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, 0x983e5152ee66dfab, 
            0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, 0xc6e00bf33da88fc2, 0xd5a79147930aa725, 
            0x06ca6351e003826f, 0x142929670a0e6e70, 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 
            0x53380d139d95b3df, 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b, 
            0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, 0xd192e819d6ef5218, 
            0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 
            0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 
            0x682e6ff3d6b2b8a3, 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, 
            0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, 0xca273eceea26619c, 
            0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, 0x06f067aa72176fba, 0x0a637dc5a2c898a6, 
            0x113f9804bef90dae, 0x1b710b35131c471b, 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 
            0x431d67c49c100d4c, 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817


S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)
S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)
s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)
s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)

SHA-384 identikal dengan SHA-512, kecuali:

  • nilai inisial hash h0 melalui h7 berbeda (diambil dari bilangan prima ke-9 sampai ke-16), dan
  • output disusun oleh peluluhan h6 dan h7.


h[0..7] := 0xcbbb9d5dc1059ed8, 0x629a292a367cd507, 0x9159015a3070dd17, 0x152fecd8f70e5939, 
           0x67332667ffc00b31, 0x8eb44a8768581511, 0xdb0c2e0d64f98fa7, 0x47b5481dbefa4fa4

SHA-512/t identikal teehadap SHA-512 kecuali:

  • nilau inisial hash h0 melalui h7 diberikan oleh SHA-512/t IV generation function,
  • output disusun oleh perpotongan rangkaian dari h0 melalu h7 di t bita,
  • nilau t tidak diperbolehkan setara dengan 384 dalam SHA-384
  • nilai t 224 dan 256 disetujui.

SHA-512/t IV generation function mengevaluasi SHA-512 yang dimodifikasi pada string ASCII "SHA-512/t", diganti dengan representasi desimal t. SHA-512 yang dimodifikasi sama dengan SHA-512 kecuali nilai awalnya h0 yang melewati h7 telah di-XORed dengan konstanta heksadesimal 0xa5a5a5a5a5a5a5a5.

Contoh implementasi C untuk keluarga fungsi hash SHA-2 dapat ditemukan di RFC 6234.

Referensi

Sumber dan atribusi

Konten artikel ini diadaptasi dari Wikipedia bahasa Indonesia, revisi 29422653 (2026-07-05T15:29:01Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.