Kotak-S Rijndael: Perbedaan antara revisi
Impor teks terkontrol dari Wikipedia bahasa Indonesia; revisi 26113527; atribusi sumber disertakan. |
Presentation V4: sitasi, referensi, Math, Wikimedia Commons, dan atribusi |
||
| Baris 1: | Baris 1: | ||
'''Kotak-S Rijndael''' adalah [[Kotak-S|kotak substitusi]] ([[tabel pencarian]]) yang dipakai dalam penyandian Rijndael. [[Standar Enkripsi Lanjutan]] (AES) berdasar pada penyandian Rijndael sehingga juga memakai kotak substitusi ini. | '''Kotak-S Rijndael''' adalah [[Kotak-S|kotak substitusi]] ([[tabel pencarian]]) yang dipakai dalam penyandian Rijndael.<ref>[http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=1 The Rijndael Block Cipher].</ref> [[Standar Enkripsi Lanjutan]] (AES) berdasar pada penyandian Rijndael sehingga juga memakai kotak substitusi ini. | ||
== Kotak-S == | == Kotak-S == | ||
Kotak-S memetakan nilai 8 bit, , ke keluaran 8 bit, . | Kotak-S memetakan nilai 8 bit, , ke keluaran 8 bit, . | ||
{| class="wikitable" style="font-size:80%" | |||
|+ Kotak-S AES | |||
! | |||
! 00 !! 01 !! 02 !! 03 !! 04 !! 05 !! 06 !! 07 !! 08 !! 09 !! 0a !! 0b !! 0c !! 0d !! 0e !! 0f | |||
|- | |||
! 00 | |||
| 63 || 7c || 77 || 7b || f2 || 6b || 6f || c5 || 30 || 01 || 67 || 2b || fe || d7 || ab || 76 | |||
|- | |||
! 10 | |||
| ca || 82 || c9 || 7d || fa || 59 || 47 || f0 || ad || d4 || a2 || af || 9c || a4 || 72 || c0 | |||
|- | |||
! 20 | |||
| b7 || fd || 93 || 26 || 36 || 3f || f7 || cc || 34 || a5 || e5 || f1 || 71 || d8 || 31 || 15 | |||
|- | |||
! 30 | |||
| 04 || c7 || 23 || c3 || 18 || 96 || 05 || 9a || 07 || 12 || 80 || e2 || eb || 27 || b2 || 75 | |||
|- | |||
! 40 | |||
| 09 || 83 || 2c || 1a || 1b || 6e || 5a || a0 || 52 || 3b || d6 || b3 || 29 || e3 || 2f || 84 | |||
|- | |||
! 50 | |||
| 53 || d1 || 00 || ed || 20 || fc || b1 || 5b || 6a || cb || be || 39 || 4a || 4c || 58 || cf | |||
|- | |||
! 60 | |||
| d0 || ef || aa || fb || 43 || 4d || 33 || 85 || 45 || f9 || 02 || 7f || 50 || 3c || 9f || a8 | |||
|- | |||
! 70 | |||
| 51 || a3 || 40 || 8f || 92 || 9d || 38 || f5 || bc || b6 || da || 21 || 10 || ff || f3 || d2 | |||
|- | |||
! 80 | |||
| cd || 0c || 13 || ec || 5f || 97 || 44 || 17 || c4 || a7 || 7e || 3d || 64 || 5d || 19 || 73 | |||
|- | |||
! 90 | |||
| 60 || 81 || 4f || dc || 22 || 2a || 90 || 88 || 46 || ee || b8 || 14 || de || 5e || 0b || db | |||
|- | |||
! a0 | |||
| e0 || 32 || 3a || 0a || 49 || 06 || 24 || 5c || c2 || d3 || ac || 62 || 91 || 95 || e4 || 79 | |||
|- | |||
! b0 | |||
| e7 || c8 || 37 || 6d || 8d || d5 || 4e || a9 || 6c || 56 || f4 || ea || 65 || 7a || ae || 08 | |||
|- | |||
! c0 | |||
| ba || 78 || 25 || 2e || 1c || a6 || b4 || c6 || e8 || dd || 74 || 1f || 4b || bd || 8b || 8a | |||
|- | |||
! d0 | |||
| 70 || 3e || b5 || 66 || 48 || 03 || f6 || 0e || 61 || 35 || 57 || b9 || 86 || c1 || 1d || 9e | |||
|- | |||
! e0 | |||
| e1 || f8 || 98 || 11 || 69 || d9 || 8e || 94 || 9b || 1e || 87 || e9 || ce || 55 || 28 || df | |||
|- | |||
! f0 | |||
| 8c || a1 || 89 || 0d || bf || e6 || 42 || 68 || 41 || 99 || 2d || 0f || b0 || 54 || bb || 16 | |||
|- | |||
| colspan=17 width=20em | Tiap kolom ditentukan oleh nilai tempat satuan ([[nibel]] bawah) dan tiap baris ditentukan oleh nilai tempat enam belasan (nibel atas). Misalnya, 9a<sub>16</sub> diubah ke b8<sub>16</sub>. | |||
|} | |||
== Inversi kotak-S == | == Inversi kotak-S == | ||
Inversi kotak-S sejatinya adalah kotak-S yang dibalik pemetaannya. Misal, b8<sub>16</sub> dikembalikan ke 9a<sub>16</sub>. | Inversi kotak-S sejatinya adalah kotak-S yang dibalik pemetaannya. Misal, b8<sub>16</sub> dikembalikan ke 9a<sub>16</sub>. | ||
{| class="wikitable" style="font-size:80%" | |||
|+ Inversi kotak-S | |||
! | |||
! 00 || 01 || 02 || 03 || 04 || 05 || 06 || 07 || 08 || 09 || 0a || 0b || 0c || 0d || 0e || 0f | |||
|- | |||
! 00 | |||
| 52 || 09 || 6a || d5 || 30 || 36 || a5 || 38 || bf || 40 || a3 || 9e || 81 || f3 || d7 || fb | |||
|- | |||
! 10 | |||
| 7c || e3 || 39 || 82 || 9b || 2f || ff || 87 || 34 || 8e || 43 || 44 || c4 || de || e9 || cb | |||
|- | |||
! 20 | |||
| 54 || 7b || 94 || 32 || a6 || c2 || 23 || 3d || ee || 4c || 95 || 0b || 42 || fa || c3 || 4e | |||
|- | |||
! 30 | |||
| 08 || 2e || a1 || 66 || 28 || d9 || 24 || b2 || 76 || 5b || a2 || 49 || 6d || 8b || d1 || 25 | |||
|- | |||
! 40 | |||
| 72 || f8 || f6 || 64 || 86 || 68 || 98 || 16 || d4 || a4 || 5c || cc || 5d || 65 || b6 || 92 | |||
|- | |||
! 50 | |||
| 6c || 70 || 48 || 50 || fd || ed || b9 || da || 5e || 15 || 46 || 57 || a7 || 8d || 9d || 84 | |||
|- | |||
! 60 | |||
| 90 || d8 || ab || 00 || 8c || bc || d3 || 0a || f7 || e4 || 58 || 05 || b8 || b3 || 45 || 06 | |||
|- | |||
! 70 | |||
| d0 || 2c || 1e || 8f || ca || 3f || 0f || 02 || c1 || af || bd || 03 || 01 || 13 || 8a || 6b | |||
|- | |||
! 80 | |||
| 3a || 91 || 11 || 41 || 4f || 67 || dc || ea || 97 || f2 || cf || ce || f0 || b4 || e6 || 73 | |||
|- | |||
! 90 | |||
| 96 || ac || 74 || 22 || e7 || ad || 35 || 85 || e2 || f9 || 37 || e8 || 1c || 75 || df || 6e | |||
|- | |||
! a0 | |||
| 47 || f1 || 1a || 71 || 1d || 29 || c5 || 89 || 6f || b7 || 62 || 0e || aa || 18 || be || 1b | |||
|- | |||
! b0 | |||
| fc || 56 || 3e || 4b || c6 || d2 || 79 || 20 || 9a || db || c0 || fe || 78 || cd || 5a || f4 | |||
|- | |||
! c0 | |||
| 1f || dd || a8 || 33 || 88 || 07 || c7 || 31 || b1 || 12 || 10 || 59 || 27 || 80 || ec || 5f | |||
|- | |||
! d0 | |||
| 60 || 51 || 7f || a9 || 19 || b5 || 4a || 0d || 2d || e5 || 7a || 9f || 93 || c9 || 9c || ef | |||
|- | |||
! e0 | |||
| a0 || e0 || 3b || 4d || ae || 2a || f5 || b0 || c8 || eb || bb || 3c || 83 || 53 || 99 || 61 | |||
|- | |||
! f0 | |||
| 17 || 2b || 04 || 7e || ba || 77 || d6 || 26 || e1 || 69 || 14 || 63 || 55 || 21 || 0c || 7d | |||
|} | |||
== Kriteria desain == | == Kriteria desain == | ||
Kotak-S Rijndael didesain khusus untuk tahan terhadap serangan analisis kriptografi [[Analisis kriptografi linear|linear]] dan [[Analisis kriptografi diferensial|diferensial]]. Caranya adalah dengan meminimalkan kolerasi transformasi [[Lincoln Near-Earth Asteroid Research|linear]] antara masukan dan keluaran sekaligus meminimalkan peluang rambantan selisih. | Kotak-S Rijndael didesain khusus untuk tahan terhadap serangan analisis kriptografi [[Analisis kriptografi linear|linear]] dan [[Analisis kriptografi diferensial|diferensial]]. Caranya adalah dengan meminimalkan kolerasi transformasi [[Lincoln Near-Earth Asteroid Research|linear]] antara masukan dan keluaran sekaligus meminimalkan peluang rambantan selisih. | ||
Kotak-S Rijndael dapat ditukar dalam penyandian Rijndael. Hal tersebut melemahkan tuduhan bahwa suatu [[Pintu belakang (komputer)|pintu belakang]] dibuat dengan menggunakan kotak-S statis. Para pembuat mengeklaim bahwa struktur penyandian Rijndael seharusnya sudah cukup tahan terhadap analisis [[kriptografi]] linear dan diferensial jika kotak-S yang memiliki sifat korelasi/rambatan selisih "rata-rata" dipakai. | Kotak-S Rijndael dapat ditukar dalam penyandian Rijndael.<ref>[http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=1 The Rijndael Block Cipher].</ref> Hal tersebut melemahkan tuduhan bahwa suatu [[Pintu belakang (komputer)|pintu belakang]] dibuat dengan menggunakan kotak-S statis. Para pembuat mengeklaim bahwa struktur penyandian Rijndael seharusnya sudah cukup tahan terhadap analisis [[kriptografi]] linear dan diferensial jika kotak-S yang memiliki sifat korelasi/rambatan selisih "rata-rata" dipakai. | ||
== Contoh implementasi dalam bahasa C == | == Contoh implementasi dalam bahasa C == | ||
Kode [[C (bahasa pemrograman)|C]] berikut menghitung nilai kotak-S. | Kode [[C (bahasa pemrograman)|C]] berikut menghitung nilai kotak-S. | ||
<syntaxhighlight lang="C"> | |||
#include <stdint.h> | |||
#define ROTL8(x,shift) ((uint8_t) ((x) << (shift)) | ((x) >> (8 - (shift)))) | |||
== | void initialize_aes_sbox(uint8_t sbox[256]) { | ||
uint8_t p = 1, q = 1; | |||
/* perulangan: p * q == 1 dalam medan Galois */ | |||
do { | |||
/* kalikan p dengan 3 */ | |||
p = p ^ (p << 1) ^ (p & 0x80 ? 0x1B : 0); | |||
/* bagi q dengan 3 (sama dengan perkalian dengan 0xf6) */ | |||
q ^= q << 1; | |||
q ^= q << 2; | |||
q ^= q << 4; | |||
q ^= q & 0x80 ? 0x09 : 0; | |||
/* hitung transformasi afinnya */ | |||
uint8_t xformed = q ^ ROTL8(q, 1) ^ ROTL8(q, 2) ^ ROTL8(q, 3) ^ ROTL8(q, 4); | |||
sbox[p] = xformed ^ 0x63; | |||
} while (p != 1); | |||
/* 0 adalah kasus khusus karena ia tidak memiliki inversi */ | |||
sbox[0] = 0x63; | |||
} | |||
</syntaxhighlight> | |||
== Referensi == | |||
<references /> | |||
== Sumber dan atribusi == | == Sumber dan atribusi == | ||
Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=Kotak-S+Rijndael&oldid=26113527 Wikipedia bahasa Indonesia], revisi 26113527 (2024-08-02T12:02:12Z), 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=Kotak-S+Rijndael&oldid=26113527 Wikipedia bahasa Indonesia], revisi 26113527 (2024-08-02T12:02:12Z), 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 14.02
Kotak-S Rijndael adalah kotak substitusi (tabel pencarian) yang dipakai dalam penyandian Rijndael.[1] Standar Enkripsi Lanjutan (AES) berdasar pada penyandian Rijndael sehingga juga memakai kotak substitusi ini.
Kotak-S
Kotak-S memetakan nilai 8 bit, , ke keluaran 8 bit, .
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0a | 0b | 0c | 0d | 0e | 0f | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 00 | 63 | 7c | 77 | 7b | f2 | 6b | 6f | c5 | 30 | 01 | 67 | 2b | fe | d7 | ab | 76 |
| 10 | ca | 82 | c9 | 7d | fa | 59 | 47 | f0 | ad | d4 | a2 | af | 9c | a4 | 72 | c0 |
| 20 | b7 | fd | 93 | 26 | 36 | 3f | f7 | cc | 34 | a5 | e5 | f1 | 71 | d8 | 31 | 15 |
| 30 | 04 | c7 | 23 | c3 | 18 | 96 | 05 | 9a | 07 | 12 | 80 | e2 | eb | 27 | b2 | 75 |
| 40 | 09 | 83 | 2c | 1a | 1b | 6e | 5a | a0 | 52 | 3b | d6 | b3 | 29 | e3 | 2f | 84 |
| 50 | 53 | d1 | 00 | ed | 20 | fc | b1 | 5b | 6a | cb | be | 39 | 4a | 4c | 58 | cf |
| 60 | d0 | ef | aa | fb | 43 | 4d | 33 | 85 | 45 | f9 | 02 | 7f | 50 | 3c | 9f | a8 |
| 70 | 51 | a3 | 40 | 8f | 92 | 9d | 38 | f5 | bc | b6 | da | 21 | 10 | ff | f3 | d2 |
| 80 | cd | 0c | 13 | ec | 5f | 97 | 44 | 17 | c4 | a7 | 7e | 3d | 64 | 5d | 19 | 73 |
| 90 | 60 | 81 | 4f | dc | 22 | 2a | 90 | 88 | 46 | ee | b8 | 14 | de | 5e | 0b | db |
| a0 | e0 | 32 | 3a | 0a | 49 | 06 | 24 | 5c | c2 | d3 | ac | 62 | 91 | 95 | e4 | 79 |
| b0 | e7 | c8 | 37 | 6d | 8d | d5 | 4e | a9 | 6c | 56 | f4 | ea | 65 | 7a | ae | 08 |
| c0 | ba | 78 | 25 | 2e | 1c | a6 | b4 | c6 | e8 | dd | 74 | 1f | 4b | bd | 8b | 8a |
| d0 | 70 | 3e | b5 | 66 | 48 | 03 | f6 | 0e | 61 | 35 | 57 | b9 | 86 | c1 | 1d | 9e |
| e0 | e1 | f8 | 98 | 11 | 69 | d9 | 8e | 94 | 9b | 1e | 87 | e9 | ce | 55 | 28 | df |
| f0 | 8c | a1 | 89 | 0d | bf | e6 | 42 | 68 | 41 | 99 | 2d | 0f | b0 | 54 | bb | 16 |
| Tiap kolom ditentukan oleh nilai tempat satuan (nibel bawah) dan tiap baris ditentukan oleh nilai tempat enam belasan (nibel atas). Misalnya, 9a16 diubah ke b816. | ||||||||||||||||
Inversi kotak-S
Inversi kotak-S sejatinya adalah kotak-S yang dibalik pemetaannya. Misal, b816 dikembalikan ke 9a16.
| 00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0a | 0b | 0c | 0d | 0e | 0f | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 00 | 52 | 09 | 6a | d5 | 30 | 36 | a5 | 38 | bf | 40 | a3 | 9e | 81 | f3 | d7 | fb |
| 10 | 7c | e3 | 39 | 82 | 9b | 2f | ff | 87 | 34 | 8e | 43 | 44 | c4 | de | e9 | cb |
| 20 | 54 | 7b | 94 | 32 | a6 | c2 | 23 | 3d | ee | 4c | 95 | 0b | 42 | fa | c3 | 4e |
| 30 | 08 | 2e | a1 | 66 | 28 | d9 | 24 | b2 | 76 | 5b | a2 | 49 | 6d | 8b | d1 | 25 |
| 40 | 72 | f8 | f6 | 64 | 86 | 68 | 98 | 16 | d4 | a4 | 5c | cc | 5d | 65 | b6 | 92 |
| 50 | 6c | 70 | 48 | 50 | fd | ed | b9 | da | 5e | 15 | 46 | 57 | a7 | 8d | 9d | 84 |
| 60 | 90 | d8 | ab | 00 | 8c | bc | d3 | 0a | f7 | e4 | 58 | 05 | b8 | b3 | 45 | 06 |
| 70 | d0 | 2c | 1e | 8f | ca | 3f | 0f | 02 | c1 | af | bd | 03 | 01 | 13 | 8a | 6b |
| 80 | 3a | 91 | 11 | 41 | 4f | 67 | dc | ea | 97 | f2 | cf | ce | f0 | b4 | e6 | 73 |
| 90 | 96 | ac | 74 | 22 | e7 | ad | 35 | 85 | e2 | f9 | 37 | e8 | 1c | 75 | df | 6e |
| a0 | 47 | f1 | 1a | 71 | 1d | 29 | c5 | 89 | 6f | b7 | 62 | 0e | aa | 18 | be | 1b |
| b0 | fc | 56 | 3e | 4b | c6 | d2 | 79 | 20 | 9a | db | c0 | fe | 78 | cd | 5a | f4 |
| c0 | 1f | dd | a8 | 33 | 88 | 07 | c7 | 31 | b1 | 12 | 10 | 59 | 27 | 80 | ec | 5f |
| d0 | 60 | 51 | 7f | a9 | 19 | b5 | 4a | 0d | 2d | e5 | 7a | 9f | 93 | c9 | 9c | ef |
| e0 | a0 | e0 | 3b | 4d | ae | 2a | f5 | b0 | c8 | eb | bb | 3c | 83 | 53 | 99 | 61 |
| f0 | 17 | 2b | 04 | 7e | ba | 77 | d6 | 26 | e1 | 69 | 14 | 63 | 55 | 21 | 0c | 7d |
Kriteria desain
Kotak-S Rijndael didesain khusus untuk tahan terhadap serangan analisis kriptografi linear dan diferensial. Caranya adalah dengan meminimalkan kolerasi transformasi linear antara masukan dan keluaran sekaligus meminimalkan peluang rambantan selisih.
Kotak-S Rijndael dapat ditukar dalam penyandian Rijndael.[2] Hal tersebut melemahkan tuduhan bahwa suatu pintu belakang dibuat dengan menggunakan kotak-S statis. Para pembuat mengeklaim bahwa struktur penyandian Rijndael seharusnya sudah cukup tahan terhadap analisis kriptografi linear dan diferensial jika kotak-S yang memiliki sifat korelasi/rambatan selisih "rata-rata" dipakai.
Contoh implementasi dalam bahasa C
Kode C berikut menghitung nilai kotak-S. <syntaxhighlight lang="C">
- include <stdint.h>
- define ROTL8(x,shift) ((uint8_t) ((x) << (shift)) | ((x) >> (8 - (shift))))
void initialize_aes_sbox(uint8_t sbox[256]) { uint8_t p = 1, q = 1;
/* perulangan: p * q == 1 dalam medan Galois */ do { /* kalikan p dengan 3 */ p = p ^ (p << 1) ^ (p & 0x80 ? 0x1B : 0);
/* bagi q dengan 3 (sama dengan perkalian dengan 0xf6) */ q ^= q << 1; q ^= q << 2; q ^= q << 4; q ^= q & 0x80 ? 0x09 : 0;
/* hitung transformasi afinnya */ uint8_t xformed = q ^ ROTL8(q, 1) ^ ROTL8(q, 2) ^ ROTL8(q, 3) ^ ROTL8(q, 4);
sbox[p] = xformed ^ 0x63; } while (p != 1);
/* 0 adalah kasus khusus karena ia tidak memiliki inversi */ sbox[0] = 0x63; } </syntaxhighlight>
Referensi
Sumber dan atribusi
Konten artikel ini diadaptasi dari Wikipedia bahasa Indonesia, revisi 26113527 (2024-08-02T12:02:12Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.