«Купина» () — ітеративна криптографічна геш-функція описана у національному стандарті України ДСТУ 7564:2014 «Інформаційні технології. Криптографічний захист інформації. Функція хешування». Стандарт набрав чинності з 1 квітня 2015 року наказом Мінекономрозвитку від 2 грудня 2014 року № 1431Про прийняття національних стандартів України, гармонізованих з європейськими стандартами, міжнародних стандартів як національних стандартів України, затвердження національних стандартів України, скасування міждержавних стандартів в Україні та внесення зміни до наказу Державного комітету стандартизації, метрології та сертифікації України від 12.06.2002 №357. Текст стандарту є у вільному доступі .
Стандарт ДСТУ 7564:2014 розроблено задля поступової заміни міждержавного стандарту Держспецзв’язку впроваджує нові стандарти криптографічного захисту інформації та згідно з чинним наказом Мінцифри від 30 вересня 2020 року № 140/614 може застосовуватися для створення кваліфікованого електронного підпису з 01 січня 2021 року, та обов'язковий для застосування після 1 січня 2022 року замість функції гешування за .
Функція стиснення Купини складається з двох фіксованих 2n-бітних перестановок T⊕ і T+, структура яких запозичена у шифра Калина. Зокрема, використовуються чотири таких самих S-блока. Результат роботи геш-функції може мати довжину від 8 до 512 біт. Варіант, який повертає n біт, позначається як Купина-n.https://eprint.iacr.org/2015/885.pdf Roman Oliynykov, Ivan Gorbenko, Oleksandr Kazymyrov, Victor Ruzhentsev, Oleksandr Kuznetsov, Yurii Gorbenko, Artem Boiko, Oleksandr Dyrda, Viktor Dolgov, Andrii Pushkaryov A New Standard of Ukraine: The Kupyna Hash Function
Алгоритм
Спочатку повідомлення доповнюється до довжини, кратної розміру блока. Для цього до повідомлення додається 1 біт , після нього нульових бітів, де і 96 біт, які містять довжину повідомлення в бітах. Таким чином, максимальна довжина повідомлення становить біт.
Далі повідомлення розбивається на блоків по біт у кожному. Для варіантів функції, які повертають до 256 біт включно, = 512. Для варіантів, які повертають значення, довші 256 біт, = 1024.
Далі, будується геш-функція, з використанням наступного ітеративного алгоритму.
де
, якщо l = 512, або , якщо l = 1024
— функція, яка повертає найбільш значущих бітів блока розміром
Кількість ітерацій для варіантів функції, які повертають до 256 біт включно — 10. Кількість ітерацій для варіантів функції, які повертають значення, довші 256 біт, — 14.
Перестановки T⊕ і T+
Ці перетворення керують станом, представленим матрицею G, яка містить у кожній комірці 1 байт інформації. Матриця має розмір 8Х8 (при ) або 8Х16 (при ).
Спочатку матриця G заповнюється послідовністю байт. Наприклад для послідовності 00 01 02 … 3f матриця G виглядає так.
Аналогічно заповнюється матриця 8 X 16.
Перестановки і визначені як:
Функція додає по модулю 2 вектор
до кожного стовпця матриці стану ( — номер раунду).
Функція додає по модулю вектор
до кожного стовпця матриці стану ( — номер раунду).
Функція підміняє елементи матриці стану підстановкою з одного з чотирьох S-блоків (номер S-блока визначається як ).
Функція виконує циклічний зсув вправо елементів матриці стану. Рядки з номерами зсуваються на елементів, а рядок 7 зсувається на 7 елементів при або на 11 елементів при .
Для виконання функції кожен елемент матриці стану представляється як елемент скінченного поля , сформованого незвідним поліномом . Кожен елемент матриці стану обчислюється за формулою:
де — вектор (0x01, 0x01, 0x05, 0x01, 0x08, 0x06, 0x07, 0x04), а — номер стовпця матриці стану .
S-блоки
Підстановка π0
A8435F066B756C5971DF879517F0D809 6DF31DCBC94D2CAF79E097FD6F4B4539 3EDDA34FB4B69A0E1FBF15E149D293C6 92729E61D163FAEEF419D5AD58A4BBA1 DCF2833742E47A329CCCAB4A8F6E0427 2EE7E25A9616232BC265660FBCA94741 3448FCB76A88A55386F95BDB387BC31E 2233242836C7B23B8E77BAF5149F0855 9B4CFE605CDA1846CD7D21B03F1B89FF EB84693A9DD7D3706740B5DE5D3091B1 781101E5006898A0C502A6742D0BA276 B3BECEBDAEE98A311CECF19994AAF626 2FEFE88C3503D47FFB05C15E90203D82 F7EA0A0D7EF8501AC40757B83C62E3C8 AC526410D0D9130C122951B9CFD6738D 8154C0ED4E44A72A8525E6CA7C8B5680
Підстановка π1
CEBBEB92EACB13C1E93AD6B2D29017F8 421556B4651C8843C55C36BAF557678D 31F664589EF422AA750F02B1DF6D734D 7C262EF7085D443E9F14C8AE5410D8BC 1A6B69F3BD33ABFAD19B684E169591EE 4C638E5BCC3C19A181497BD96F3760CA E72B48FD9645FC41120D79E5898CE320 30DCB76C4AB53F97D4622D06A4A5835F 2ADAC9007EA255BF11D59CCF0E0A3D51 7D931BFEC44709860B8F9D6A07B9B098 1832714BEF3B70A0E440FFC3A9E678F9 8B46801E38E1B8A8E00C23761D252405 F16E94289A84E8A34F77D385E252F282 507A2F7453B361AF3935DECD1F99ACAD 722CDDD087BE5EA6EC04C60334FBDB59 B6C201F05AEDA766217F8A27C7C029D7
Підстановка π2
93D99AB5982245FCBA6ADF029FDC5159 4A172BC294F4BBA362E471D4CD7016E1 493CC0D85C9BAD8553A17AC82DE0D172 A62CC4E37678B7B4093B0E414CDEB290 25A5D7031100C32E92EF4E129D7DCB35 10D54F9E4DA955C6D07B1897D336E648 56818F77CC9CB9E2ACB82F15A47CDA38 1E0B05D6146E6C7E66FDB1E560AF5E33 87C9F05D6D3F888DC7F71DE9ECED8029 27CF99A8500F3724283095D23E5B4083 B369571F071C8ABC20EBCE8EABEE31A2 73F9CA3A1AFB0DC1FEFAF26FBD96DD43 52B608F3AEBE19893226B0EA4B648482 6BF579BF015F75631B233D682A65E891 F6FF1358F1470A7FC5A7E7615A064644 4204A0DB398654AA8C34218BF80C7467
Підстановка π3
688DCA4D734B4E2AD45226B3541E191F 2203463D2D4A5383138AB7D52579F5BD 582F0D02ED519E11F23E555ED1163C66 705DF34540CCE8945608CE1A3AD2E1DF B5386E0EE5F4F986E94FD68523CF3299 3114AEEEC848D330A19241B118C42C71 724415FD37BE5FAA9B88D8AB899CFA60 EABC620C24A6A8EC6720DB7C28DDAC5B 347E10F17B8F63A0059A437721BF2709 C39FB6D729C2EBC0A48B8C1DFBFFC1B2 972EF865F67507044933E4D9B9D042C7 6C90008E6F5001C5DA473FCD69A2E27A A7C6930F0A06E62B96A31CAF6A128439 E7B082F7FE9D875C8135DEB4A5FC80EF CBBB6B76BA5A7D780B95E3AD74983B36 646DDCF059A94C177F91B8C9571BE061
Криптостійкість
Автори запевняють, що диференціальні атаки і rebound-атаки неефективні вже після 4 ітерацій функцій перестановок. У таблиці наведені заявлені авторами показники криптостійкості.
Вид атаки Купина-256 Купина-512 Колізія 2128 2256 Першовзір 2256 2512 Другий першовзір 2256 2512 Фіксовані точки 2256 2512
У результаті незалежного криптоаналізу вдалося провести атаку тільки на перші 5 раундів; складність знаходження колізії для скороченої до 5 раундів функції Купина-256 складає 2120.
Використання
— код референсної реалізаціі на C
cppcrypto — Бібліотека з відкритим вихідним кодом на C++
— бібліотека криптографічних перетворень від ПриватБанку з відкритим програмним кодом на C, має експертний висновок UA.14360570.00001-01 90 01-1 за результатами державної експертизи у галузі КЗІ
— бібліотека криптографічних перетворень на TypeScript
Примітки
Див. також Калина (шифр) СТРУМОК (шифр) Стандарти криптографії