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

sunting

Kotak-S memetakan nilai 8 bit, c, ke keluaran 8 bit, s = S(c).

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
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

sunting

Inversi kotak-S sejatinya adalah kotak-S yang dibalik pemetaannya. Misal, b816 dikembalikan ke 9a16.

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

sunting

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.[1] 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

sunting

Kode C berikut menghitung nilai kotak-S.

#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;
}

Referensi

sunting
  1. ^ a b "The Rijndael Block Cipher" (PDF). Diakses tanggal 11 November 2013.