Алгоритм гешування Poseidon є одним з найефективніших сучасних алгоритмів гешування, який використовується в сучасних облікових системах. Він базується на використанні раундів, які складаються з послідовності лінійних та нелінійних перетворень.
Операції додавання і множення: Poseidon використовує лінійні операції додавання і множення для збільшення швидкості обчислень.
S-блоки: Алгоритм Poseidon використовує S-блоки для запобігання лінійним атакам та забезпечення більшої криптографічної стійкості.
Раунди: Алгоритм Poseidon складається з декількох раундів, які застосовуються послідовно для забезпечення криптографічної стійкості.
Константи: Poseidon використовує певні константи для підвищення криптографічної стійкості.
mix
- функція перемішування елементів state.
exp5
- функція, яка виконує операцію піднесення до ступеню 5 над елементом поля.
exp5state
- функція піднесення до ступеню 5 кожного елементу масиву state
addRoundKey
- функція, яка виконує операцію додавання констант раунду до вектора стану.
Hash
- функція гешування вхідного масиву елементів типу *big.Int в один елемент типу *big.Int.
HashBytes
- функція гешування вхідного масиву байтів в один елемент типу *big.Int.
Time used: 26.5814ms
This implementation] Hash 6969573445741018147556384961043162031190431604736891492802062484813405400894
Time used: 2.5681ms
[Library implementation] Hash of 6969573445741018147556384961043162031190431604736891492802062484813405400894
================ Test 0 ================
Message length: 3 bytes
Poseidon hash: 6486908659193054171558649664263707983061659923540223710222614175012877610915
Poseidon hash length: 32 bytes
Hashing in Poseidon took 2.5255ms
Alloc = 4294944 bytes
SHA-3 hash: [188 108 72 119 246 36 136 226 189 213 38 132 120 198 227 253 97 90 186 173 135 142 20 143 130 115 39 21 138 156 0 62]
SHA-3 hash length: 32 bytes
Hashing in SHA-3 took 1.0018ms
Hash in library implementation: 6486908659193054171558649664263707983061659923540223710222614175012877610915
================ Test 1 ================
Message length: 11 bytes
Poseidon hash: 11737940537089741739483184487293110833220240024120497567098122983201085619560
Poseidon hash length: 32 bytes
Hashing in Poseidon took 3.052ms
Alloc = 3832776 bytes
SHA-3 hash: [100 75 204 126 86 67 115 4 9 153 170 200 158 118 34 243 202 113 251 161 217 114 253 148 163 28 59 251 242 78 57 56]
SHA-3 hash length: 32 bytes
Hashing in SHA-3 took 1.5086ms
Hash in library implementation: 11737940537089741739483184487293110833220240024120497567098122983201085619560
================ Test 2 ================
Message length: 334 bytes
Poseidon hash: 10144556929532757039294574715605250702290216074218951544141159961486588626405
Poseidon hash length: 32 bytes
Hashing in Poseidon took 3.5086ms
Alloc = 4229664 bytes
SHA-3 hash: [171 208 227 203 79 197 100 193 83 245 247 184 133 50 52 226 93 176 140 89 186 5 37 221 186 243 50 186 136 140 239 48]
SHA-3 hash length: 32 bytes
Hashing in SHA-3 took 1.1044ms
Hash in library implementation: 10144556929532757039294574715605250702290216074218951544141159961486588626405
================ Test 3 ================
Message length: 445 bytes
Poseidon hash: 1445580476521057652055149555982034416468130755980688389650598067065303157299
Poseidon hash length: 32 bytes
Hashing in Poseidon took 4.4526ms
Alloc = 3766920 bytes
SHA-3 hash: [189 227 242 105 23 94 29 205 161 56 72 39 138 166 4 107 214 67 206 168 91 132 200 184 187 128 149 46 112 182 234 224]
SHA-3 hash length: 32 bytes
Hashing in SHA-3 took 2.1032ms
Hash in library implementation: 1445580476521057652055149555982034416468130755980688389650598067065303157299
================ Test 4 ================
Message length: 5064 bytes
Poseidon hash: 6969573445741018147556384961043162031190431604736891492802062484813405400894
Poseidon hash length: 32 bytes
Hashing in Poseidon took 28.6368ms
Alloc = 4921784 bytes
SHA-3 hash: [244 39 225 130 95 22 36 193 61 48 169 224 108 186 216 138 200 120 240 188 198 65 207 239 91 76 4 38 217 157 13 127]
SHA-3 hash length: 32 bytes
Hashing in SHA-3 took 2.9406ms
Hash in library implementation: 6969573445741018147556384961043162031190431604736891492802062484813405400894
Тести проводились на AMD Ryzen 5 3500U, 12GB RAM