MixColumns Rijndael: Perbedaan antara revisi
Impor teks terkontrol dari Wikipedia bahasa Indonesia; revisi 26843382; atribusi sumber disertakan. |
Presentation V4: sitasi, referensi, Math, Wikimedia Commons, dan atribusi |
||
| Baris 29: | Baris 29: | ||
=== Perkalian suku banyak === | === Perkalian suku banyak === | ||
: <math>\begin{align} | : <math>\begin{align} | ||
a(x) \bullet b(x) = c(x) | a(x) \bullet b(x) = c(x) | ||
| Baris 135: | Baris 134: | ||
Operasi ini dapat disederhanakan dalam implementasinya dengan mengganti perkalian dengan dua dengan geseran tunggal dan XOR bersyarat serta mengganti perkalian dengan tiga dengan perkalian dengan dua yang digabung dengan XOR. Berikut contoh implementasi dalam bahasa [[C (bahasa pemrograman)|C]]. | Operasi ini dapat disederhanakan dalam implementasinya dengan mengganti perkalian dengan dua dengan geseran tunggal dan XOR bersyarat serta mengganti perkalian dengan tiga dengan perkalian dengan dua yang digabung dengan XOR. Berikut contoh implementasi dalam bahasa [[C (bahasa pemrograman)|C]]. | ||
<syntaxhighlight lang=c> | |||
void gmix_column(unsigned char *r) { | |||
unsigned char a[4]; | |||
unsigned char b[4]; | |||
unsigned char c; | |||
unsigned char h; | |||
/* Larik a adalah salinan dari larik r. | |||
* Larik b adalah larik a yang dikali dua dalam medan berhingga Rijndael. | |||
* a[n] ^ b[n] adalah perkalian dengan tiga dalam medan berhingga Rijndael. | |||
*/ | |||
for (c = 0; c < 4; c++) { | |||
a[c] = r[c]; | |||
/* h adalah 0xff jika bit tinggi r[c] diatur; nilainya 0 jika tidak */ | |||
h = (unsigned char) ((signed char) r[c] >> 7); /* geseran aritmetika kanan */ | |||
b[c] = r[c] << 1; /* secara tersirat menghapus bit tinggi karena b[c] adalah char 8 bit, | |||
* maka di-XOR dengan 0x1B dan bukan 0x11B pada baris selanjutnya */ | |||
b[c] ^= 0x1B & h; /* medan berhingga Rijndael */ | |||
} | |||
r[0] = b[0] ^ a[3] ^ a[2] ^ b[1] ^ a[1]; /* 2 * a0 + a3 + a2 + 3 * a1 */ | |||
r[1] = b[1] ^ a[0] ^ a[3] ^ b[2] ^ a[2]; /* 2 * a1 + a0 + a3 + 3 * a2 */ | |||
r[2] = b[2] ^ a[1] ^ a[0] ^ b[3] ^ a[3]; /* 2 * a2 + a1 + a0 + 3 * a3 */ | |||
r[3] = b[3] ^ a[2] ^ a[1] ^ b[0] ^ a[0]; /* 2 * a3 + a2 + a1 + 3 * a0 */ | |||
} | |||
</syntaxhighlight> | |||
== Vektor uji untuk MixColumns == | == Vektor uji untuk MixColumns == | ||
{| class=wikitable | |||
! colspan=2 | Heksadesimal | |||
! colspan=2 | Desimal | |||
|- | |||
! Sebelum | |||
! Setelah | |||
! Sebelum | |||
! Setelah | |||
|- | |||
| style="font-family: monospace;" | db 13 53 45 | |||
| style="font-family: monospace;" | 8e 4d a1 bc | |||
| 219 19 83 69 | |||
| 142 77 161 188 | |||
|- | |||
| style="font-family: monospace;" | f2 0a 22 5c | |||
| style="font-family: monospace;" | 9f dc 58 9d | |||
| 242 10 34 92 | |||
| 159 220 88 157 | |||
|- | |||
| style="font-family: monospace;" | 01 01 01 01 | |||
| style="font-family: monospace;" | 01 01 01 01 | |||
| 1 1 1 1 | |||
| 1 1 1 1 | |||
|- | |||
| style="font-family: monospace;" | c6 c6 c6 c6 | |||
| style="font-family: monospace;" | c6 c6 c6 c6 | |||
| 198 198 198 198 | |||
| 198 198 198 198 | |||
|- | |||
| style="font-family: monospace;" | d4 d4 d4 d5 | |||
| style="font-family: monospace;" | d5 d5 d7 d6 | |||
| 212 212 212 213 | |||
| 213 213 215 214 | |||
|- | |||
| style="font-family: monospace;" | 2d 26 31 4c | |||
| style="font-family: monospace;" | 4d 7e bd f8 | |||
| 45 38 49 76 | |||
| 77 126 189 248 | |||
|} | |||
== Daftar pustaka == | == Daftar pustaka == | ||
* [http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.197.pdf FIPS PUB 197: Dokumen resmi AES] | * [http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.197.pdf FIPS PUB 197: Dokumen resmi AES] | ||
== Sumber dan atribusi == | == Sumber dan atribusi == | ||
Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=MixColumns+Rijndael&oldid=26843382 Wikipedia bahasa Indonesia], revisi 26843382 (2025-01-26T08:36:36Z), 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=MixColumns+Rijndael&oldid=26843382 Wikipedia bahasa Indonesia], revisi 26843382 (2025-01-26T08:36:36Z), 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.00
Langkah dan langkah adalah sumber penghamburan utama dalam penyandian Rijndael. Tiap kolom dianggap sebagai suku banyak berderajat empat yang suku-sukunya berada dalam .
Tiap kolom dikali dengan suku banyak tetap modulus . Inversi suku banyaknya adalah .
MixColumns
Operasi ini terdiri dari perkalian modulus dua suku banyak berderajat empat yang koefisiennya ada dalam . Pembagi yang dipakai dalam operasi ini adalah .
Koefisien suku banyak pertama didefinisikan sebagai kolom status yang berisi empat bita. Tiap bita adalah koefisien dari suku banyak tersebut.
Suku banyak kedua adalah suku banyak tetap . Koefisiennya juga ada dalam . Inversinya adalah .
Dalam halaman ini, kita definisikan beberapa notasi berikut:
- berarti perkalian modulus .
- berarti pertambahan dalam .
- berarti perkalian dalam .
Pertambahan dalam memiliki sifat berikut:
Pembuktian bentuk matriks
Suku banyak akan dinyatakan sebagai .
Perkalian suku banyak
dengan
Reduksi modulus
Hasil adalah suku banyak berderajat tujuh sehingga harus direduksi menjadi kata empat bita. Hal itu dilakukan dengan melakukan perkalian dengan modulus .
Bila kita melakukan perkalian modulus suku banyak, kita bisa lihat bahwa
Secara umum, kita bisa nyatakan bahwa
Jadi,
dengan
Bentuk matriks
Koefisien , , , dan dapat dinyatakan sebagai berikut:
Ketika kita ganti koefisien dengan tetapan yang dipakai oleh penyandian ini, kita dapatkan hasil berikut:
Hal ini menunjukkan bahwa operasi ini mirip dengan sandi Hill. Ia dapat digambarkan sebagai perkalian matriks berikut:
InverseMixColumns
Operasi memiliki inversi berikut (bilangan dalam desimal).
atau
Contoh implementasi
Operasi ini dapat disederhanakan dalam implementasinya dengan mengganti perkalian dengan dua dengan geseran tunggal dan XOR bersyarat serta mengganti perkalian dengan tiga dengan perkalian dengan dua yang digabung dengan XOR. Berikut contoh implementasi dalam bahasa C.
<syntaxhighlight lang=c> void gmix_column(unsigned char *r) { unsigned char a[4]; unsigned char b[4]; unsigned char c; unsigned char h; /* Larik a adalah salinan dari larik r. * Larik b adalah larik a yang dikali dua dalam medan berhingga Rijndael. * a[n] ^ b[n] adalah perkalian dengan tiga dalam medan berhingga Rijndael. */ for (c = 0; c < 4; c++) { a[c] = r[c]; /* h adalah 0xff jika bit tinggi r[c] diatur; nilainya 0 jika tidak */ h = (unsigned char) ((signed char) r[c] >> 7); /* geseran aritmetika kanan */ b[c] = r[c] << 1; /* secara tersirat menghapus bit tinggi karena b[c] adalah char 8 bit, * maka di-XOR dengan 0x1B dan bukan 0x11B pada baris selanjutnya */ b[c] ^= 0x1B & h; /* medan berhingga Rijndael */ } r[0] = b[0] ^ a[3] ^ a[2] ^ b[1] ^ a[1]; /* 2 * a0 + a3 + a2 + 3 * a1 */ r[1] = b[1] ^ a[0] ^ a[3] ^ b[2] ^ a[2]; /* 2 * a1 + a0 + a3 + 3 * a2 */ r[2] = b[2] ^ a[1] ^ a[0] ^ b[3] ^ a[3]; /* 2 * a2 + a1 + a0 + 3 * a3 */ r[3] = b[3] ^ a[2] ^ a[1] ^ b[0] ^ a[0]; /* 2 * a3 + a2 + a1 + 3 * a0 */ } </syntaxhighlight>
Vektor uji untuk MixColumns
| Heksadesimal | Desimal | ||
|---|---|---|---|
| Sebelum | Setelah | Sebelum | Setelah |
| db 13 53 45 | 8e 4d a1 bc | 219 19 83 69 | 142 77 161 188 |
| f2 0a 22 5c | 9f dc 58 9d | 242 10 34 92 | 159 220 88 157 |
| 01 01 01 01 | 01 01 01 01 | 1 1 1 1 | 1 1 1 1 |
| c6 c6 c6 c6 | c6 c6 c6 c6 | 198 198 198 198 | 198 198 198 198 |
| d4 d4 d4 d5 | d5 d5 d7 d6 | 212 212 212 213 | 213 213 215 214 |
| 2d 26 31 4c | 4d 7e bd f8 | 45 38 49 76 | 77 126 189 248 |
Daftar pustaka
Sumber dan atribusi
Konten artikel ini diadaptasi dari Wikipedia bahasa Indonesia, revisi 26843382 (2025-01-26T08:36:36Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.