RC-6

RC-6 (Rivest Cipher) нь өмнөх RC-5 дээр суурилсан нууцлалын блок шифр алгоритм (block encryption algorithm). Анх RC-6 алгоритмыг Америкийн Үндэсний стандарчлалын газраас 1997 онд зарлагдсан Advanced Encryption Standard (AES) уралдаанд зориулан RSA лабораторт 1998 онд зохиосон. Уг уралдааны сүүлийн шатанд шалгарсан 5 алгоритм (Rijndael, Mars, Serpent, Twofish, RC-6)-ын нэг юм. 
Хэдийгээр уралдаанд Rijndeal алгоритм ялж AES гэж нэрлэгдсэнээр стандарт болон гарсан ч RC-6 алгоритм нь энгийн шинж чанар, хурдан гүйцэтгэлээрээ өнөөг хүртэл хэрэглээтэй, тодорхой аюулгүй байдлыг хангасан хэвээр байна. Ерөнхий бүтэц, үйлдэл нь RC5-тай ойролцоо. RC6 нь 2 RC5 зэрэг ажиллаж байгаа юм шиг байх ба RC5-д хийгддэггүй зарим үйлдлүүд нэмэгдсэн. RC6 алгоритмийг Microsoft Office 2002, 2003 – файлын нууц үг хамгаалалт, мөн CryptoTools болон BestCrypt зэрэг нууцлалын програм хангамжуудад ашигладаг.

Блокын хэмжээ: 128 бит ( мэдээллийг 128 бит блок хэсгүүдэд хувааж ажилладаг гэсэн үг, энэ нь 32, 64 бит байж болно. Гэхдээ нийтийн хэрэглээнд 128 бит блок хэмжэээтэйгээр ажилладаг.)
Түлхүүрийн хэмжээ: 128, 192, 256 бит (ерөнхийдөө, алгоритмын бүтцийн хувьд 2048 бит хүртэлх хэмжээтэй түлхүүрийг сонгох боломжтой байдлаар зохиогдсон.)
Үеийн тоо: 20 үе. (Нэг блок буюу 128 бит мэдээллийг 20 үе (раунд) алхмаар шифрлэлт /encryption/ гүйцэтгэдэг.)
Блок алгоритмуудын үйлдлийн нийтлэг горимуудыг /ECB, CBC, OFB, CFB, CTR, G-CTR/ хэрэглэдэг. CTR нь блок шифр алгоритмын аюулгүй горимуудын нэг юм. RC-6 алгоритмын хувьд CryptoTools болон Bestcrypt зэрэг шифрлэгч програм хангамжуудад CTR, XTS, LRW горимуудыг түлхүү ашигладаг.
Шифрлэлт хийх болон тайлах үйл явц
Шифрлэлт (Encryption): RC-6 нэг үеийн бүтэц. (20 үе ижил зарчмаар гүйцэтгэнэ)
// Оролт:   Шифрлэгдэх мэдээлэл нь 4 w-bit оролтын регистрүүдэд (A B C D) байршина
// 	r - үеийн тоо
// 	w-bit үеийн түлхүүрүүд S[0, ... , 2r + 3]
// 
// Гаралт: Шифрлэгдсэн мэдээлэл A, B, C, D регистрүүдэд хадгалагдна.
// 
// '''Шифрлэх үйл явц:'''

	B = B + S[0]
	D = D + S[1]
	for i = 1 to r do
	{
		t = (B*(2B + 1)) <<< lg w
		u = (D*(2D + 1)) <<< lg w
		A = ((A ⊕ t) <<< u) + S[2i]
		C = ((C ⊕ u) <<< t) + S[2i + 1] 
                (A, B, C, D)  =  (B, C, D, A)

	}
	A = A + S[2r + 2]
	C = C + S[2r + 3]

// '''Тайлах үйл явц:'''

	C = C - S[2r + 3]
	A = A - S[2r + 2]

	for i = r downto 1 do
	{
	   (A, B, C, D) = (D, A, B, C)
	    u = (D*(2D + 1)) <<< lg w
	    t = (B*(2B + 1)) <<< lg w
	    C = ((C - S[2i + 1]) >>> t) ⊕ u
	    A = ((A - S[2i]) >>> u) ⊕ t
	}
	D = D - S[1]
	B = B - S[0]
Гүйцэтгэл/Performance
CPU давтамж/үйлдэл [200Mhz процессор]________Үйлдэл/секунд [200Mhz]
   JAVA  Borland C  Assembly    JAVA  Borland C  Assembly Түлхүүр үүсгэх  110000  2300  1108  Түлхүүр үүсгэх  1820  86956  180500 Шифрлэх  16200  616  254  Шифрлэх  12300  325000  787000 Тайлах  16500  566  254  Тайлах  12100  353000  788000

Хурд (Mbps)
   128bit  192bit  256bit Шифрлэх  1.57  41.5  100.8 Тайлах  1.55  45.2  100.8

Аюулгүй байдал
Бүх боломжит түлхүүрийг хайх буюу /brute-force/ халдлагад /128, 192, 256 бит түлхүүртэй/ 2128 – 2256 нарийвлал шаардагдах учраас өнөөгийн хэмжээнд боломжгүй гэж үздэг.
Бусад нарийвчилсан довтолгооны хувьд үнэлгээг сонирхоё.
128 бит түлхүүрийн хувьд довтолгооны үзүүлэлт:
  Үеийн тоо Халдлага  8  12  16  20  24 Дифференциал халдлага  256  2117  2190  2238  2299 Шугаман халдлага  247  283  2119  2155  2191
Эндээс харахад 20 үеээс дээш үе гүйцэтгэдэг, 128-аас их бит түлхүүрийн урттай RC-6 алгоритм нь өнөөгийн түвшинд аюулгүй гэж үзэж болно. Өнөөгийн байдлаар RC-6 алгоритмыг бүрэн тайлсан тохиолдол гараагүй байна, стандарт технологийн хувьд тайлах боломж одоогоор байхгүй ч хүчирхэг орнууд технологийн хүчээр 128 бит түлхүүртэй RC6 алгоритмыг тайлсан байхыг үгүйсгэх аргагүй юм.

RC6 vs AES
Advanced encryption standard уралдааны эцсийн шалгаруулалтад тухайн үзүүлэлтүүдэд 1-3 оноог өгч дүгнэсэн. Ялагч AES буюу Rijndael алгоритмтай харьцуулсан үнэлгээ. 
   Ерөнхий үзүүлэлт Хэрэгжүүлэхэд хялбар байдал Программын гүйцэтгэл  Техникийн гүйцэтгэл  Smart-card үзүүлэлт  Дизайн AES(Rijndael)  2  3  3  3  3  2 RC6  2  1  2  1  2  1