Реалізація та тестування основних режимів стандартизованих алгоритмів БСШ (ISO/IEC 18033-3)
Автор: Мирослава Лукьяненко • Май 22, 2022 • Лабораторная работа • 4,485 Слов (18 Страниц) • 240 Просмотры
Міністерство освіти і науки України
Харківський національний університет радіоелектроніки
Кафедра безпеки інформаційних технологій
Лабораторна робота №1
Тема «Реалізація та тестування основних режимів стандартизованих алгоритмів БСШ (ISO/IEC 18033-3)»
Виконав: Перевірив:
ст. гр. КБІКСу-19-1 Руженцев В. І.
Стеблянко Д. І.
Харків 2020
Мета роботи: Вивчити на практиці алгоритми блокового симетричного шифрування, що представлені в стандарті ISO/IEC 18033-3, а також режими їх роботи відповідно до стандарту ISO/IEC 18033-4. Реалізувати один з шифрів, а також один з режимів роботи для даного шифру (за варіантами).
Основні положення і схеми алгоритму Camellia
Алгоритм Camellia – це симетричний блоковий шифр, який може обробляти 128-бітові блоки даних з використанням ключів шифрування з довжинами 128, 192 і 256 бітів. Ці властивості ідентичні алгоритму AES.
Процес зашифрування для 128-бітового ключа виконується за 18 раундів і показаний на рис. 2.11. Перетворення 128-бітового блока P в 128-бітовий блок C визначається таким чином (L і R - змінні з 64-бітовою довжиною, а kw, k і kl є раундові ключі з 64-бітовою довжиною):
[pic 1]
[pic 2]
Рисунок 2.11 – Процедура зашифрування Сamellia для 128-бітового ключа
2.8.1.2 192-бітовий і 256-бітовий ключ
Процес зашифрування для 192-бітового або 256-бітового ключа діє на 24 раундах і показаний на рис. 2.12. Перетворення 128-бітового блока P в 128-бітовий блок C визначається таким чином (L і R - змінні з 64-бітовою довжиною, і kw, k і kl – раундові ключі з 64-бітовою довжиною):
[pic 3]
Процес розшифрування для 128-бітового ключа показаний на рис. 2.13, і є ідентичний до зашифрування, окрім зворотного положення і порядку раундових ключів.
Операція розшифрування визначається таким чином.
[pic 4]
[pic 5]
Рисунок 2 - Процедура зашифрування Camellia для 192-бітового і 256-бітового ключів
[pic 6]
Рисунок 2– Процедура розшифрування Camellia для 128-бітового ключа
Процес розшифрування для 192-бітового або 256-бітового ключа показаний на рис. 2.14 і є ідентичним до зашифрування, окрім зворотного положення і порядку раундових ключів.
Операція розшифрування визначається таким чином.
[pic 7]
Функції Camellia
Алгоритм Сamellia використовує набір функцій, а саме, F, FL, FL-1 і S-блоки, які визначені в стандарті ISO/IEC 18033-3:2005 (ДСТУ ISO/IEC 18033-3:200_).
Програмная реалізація
package main
import (
"crypto/cipher"
"encoding/binary"
"strconv"
)
const BlockSize = 16
type KeySizeError int
func (k KeySizeError) Error() string {
return "camellia: invalid key size " + strconv.Itoa(int(k))
}
type camelliaCipher struct {
kw [5]uint64
k [25]uint64
ke [7]uint64
klen int
}
const (
sigma1 = 0xA09E667F3BCC908B
sigma2 = 0xB67AE8584CAA73B2
sigma3 = 0xC6EF372FE94F82BE
sigma4 = 0x54FF53A5F1D36F1C
sigma5 = 0x10E527FADE682D1D
sigma6 = 0xB05688C2B3E6C1FD
)
func init() {
for i := range sbox1 {
sbox2[i] = rotl8(sbox1[i], 1)
sbox3[i] = rotl8(sbox1[i], 7)
sbox4[i] = sbox1[rotl8(uint8(i), 1)]
}
}
func rotl128(k [2]uint64, rot uint) (hi, lo uint64) {
if rot > 64 {
rot -= 64
k[0], k[1] = k[1], k[0]
}
t := k[0] >> (64 - rot)
hi = (k[0] << rot) | (k[1] >> (64 - rot))
...