<div dir="ltr"><div dir="ltr"><div dir="ltr">Привет!<div><br></div></div><br><div class="gmail_quote"><div dir="ltr">On Sat, Dec 15, 2018 at 9:02 PM Vitaly Chikunov &lt;<a href="mailto:vt@altlinux.org">vt@altlinux.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi,<br>
<br>
1. Я сделал рабочую реализацию проверки подписи ГОСТ 34.10 для ядра<br>
в очень _черновом_ варианте:<br>
<br>
  <a href="https://github.com/vt-alt/linux/commits/ecrdsa" rel="noreferrer" target="_blank">https://github.com/vt-alt/linux/commits/ecrdsa</a><br>
  <a href="https://github.com/vt-alt/linux/blob/ecrdsa/crypto/ecrdsa.c" rel="noreferrer" target="_blank">https://github.com/vt-alt/linux/blob/ecrdsa/crypto/ecrdsa.c</a><br>
<br>
2. CryptoAPI ядра RSA-центрично и поэтому сделать поддержку ECDSA<br>
не меняя его не возможно. Поэтому, там есть пара коммитов со сменой<br>
akcipher API (вводится новый вызов verify2). Я отсылал RFC патчсет и его<br>
восприняли без негатива. (Правда этого все равно будет не достаточно для<br>
out-of-tree реализаций. Но наша планируется in-tree, так что это не<br>
проблема).<br>
<br>
3. По кривым. Рекомендовано использовать 7 кривых:<br>
<br>
4. Поддержку двух скрученных кривых Эжвардса я не стал делать, так как<br>
gost-engine их не поддерживает. Это<br>
<br>
    id-tc26-gost-3410-2012-256-paramSetA<br>
    id-tc26-gost-3410-2012-512-paramSetC<br>
<br>
Из оставшихся:<br>
<br>
    id-GostR3410-2001-CryptoPro-A-ParamSet (256-bit)<br>
    id-tc26-gost-3410-12-512-paramSetA<br>
<br>
Работают (более менее) оптимизированные алгоритмы, но надо ещё точнее<br>
проверить скорость. Субъективно 512-битный вариант работает &quot;быстрее<br>
чем 0.1 в секунду&quot;, что можно оценить как &quot;очень плохо&quot;.<br></blockquote><div><br></div><div>Я могу, наверное, выслать пузомерку, которую делали для внутренних криптокомовских нужд. </div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">5. Смышляев (2015) в выступлении &quot;Российская криптография: так ли всё<br>
грустно?&quot; (слайды <a href="https://www.slideshare.net/phdays/ss-48934331" rel="noreferrer" target="_blank">https://www.slideshare.net/phdays/ss-48934331</a> страница<br>
22) приводит статистику (без указания мощностей на которых производилось<br>
тестирование): 256-битная подпись 9700 проверок в секунду, 512-битная<br>
подпись 1850 проверок в секунду.<br></blockquote><div><br></div><div>КриптоПро дофига вкладывали в оптимизацию, насколько я знаю.  </div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
6. В статье Комарова, Менщиков, Коробейников. Анализ и сравнение алгоритмов<br>
электронной цифровой подписи ГОСТ Р 34. 10-1994, ГОСТ Р 34. 10-2001 и ГОСТ Р<br>
34. 10-2012 // Вопросы кибербезопасности. 2017. №1 (19). URL:<br>
<br>
  <a href="https://cyberleninka.ru/article/n/analiz-i-sravnenie-algoritmov-elektronnoy-tsifrovoy-podpisi-gost-r-34-10-1994-gost-r-34-10-2001-i-gost-r-34-10-2012" rel="noreferrer" target="_blank">https://cyberleninka.ru/article/n/analiz-i-sravnenie-algoritmov-elektronnoy-tsifrovoy-podpisi-gost-r-34-10-1994-gost-r-34-10-2001-i-gost-r-34-10-2012</a><br>
<br>
приводится статистика (для Core i5-3317U, реализация Pygost на питоне:<br>
оба теста для подписей 256 бит: ГОСТ 2012 дал 100 проверок<br>
подписи за 35 секунд, ГОСТ 2001 года (то есть по сути одинаковый с<br>
2012) дал 100 проверок за 8 секунд.<br></blockquote><div><br></div><div>Скорее всего это не про подпись, а про хеш. В смысле, хеш 94-го года у них мог получиться быстрее.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">7. Для сравнения, `openssl speed ecdsa` дает:<br>
<br>
                                    sign    verify    sign/s verify/s<br>
 256 bits ecdsa (nistp256)        0.0001s   0.0002s  16439.1   5080.8<br>
 256 bits ecdsa (brainpoolP256r1) 0.0010s   0.0008s   1005.5   1202.2<br>
 256 bits ecdsa (brainpoolP256t1) 0.0010s   0.0008s    996.3   1260.9<br>
 521 bits ecdsa (nistp521)        0.0060s   0.0039s    167.1    259.5<br>
 253 bits EdDSA (Ed25519)         0.0001s   0.0002s  17557.8   5296.4<br>
<br>
 456 bits EdDSA (Ed448)           0.0002s   0.0009s   4400.9   1167.3<br>
 571 bits ecdsa (nistk571)        0.0084s   0.0171s    118.5     58.6<br>
 571 bits ecdsa (nistb571)        0.0096s   0.0185s    104.4     54.1<br>
 512 bits ecdsa (brainpoolP512r1) 0.0041s   0.0030s    245.0    336.2<br>
 512 bits ecdsa (brainpoolP512t1) 0.0041s   0.0028s    242.7    356.9<br>
<br>
8. Для этих двух кривых используется не эффективное разложение по модулю,<br>
но это я планирую исправить, чтоб стало как у предыдущих двух:<br>
<br>
  id-GostR3410-2001-CryptoPro-B-ParamSet (256-bit)<br>
  id-tc26-gost-3410-12-512-paramSetB<br>
<br>
7. Реализация в ядре умножения скаляра на точку (сделанная по статье Matthieu<br>
Rivain, 2011) оказалась не способна правильно умножить если у точки в<br>
координате X содержится 0. Поэтому, эта кривая вообще не работает, так как там<br>
в генераторе X=0.<br>
<br>
  id-GostR3410-2001-CryptoPro-C-ParamSet (256-bit)<br>
<br>
Пожалуй, я эту кривую просто выкину до лучших времен.<br></blockquote><div> </div><div>См. </div><div><br></div><div> <a href="https://github.com/openssl/openssl/pull/6999">https://github.com/openssl/openssl/pull/6999</a><br></div><div> <a href="https://github.com/openssl/openssl/pull/7000">https://github.com/openssl/openssl/pull/7000</a></div><div><br></div><div>Собственно, я бы как-нибудь на эту тему пива/чая попил, есть у меня некоторые мысли.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
8. После анализа производительности и вылизывания кода планирую заняться<br>
прикручиванием этого к IMA.<br>
<br>
Спасибо за внимание.<br>
<br>
_______________________________________________<br>
oss-gost-crypto mailing list<br>
<a href="mailto:oss-gost-crypto@lists.altlinux.org" target="_blank">oss-gost-crypto@lists.altlinux.org</a><br>
<a href="https://lists.altlinux.org/mailman/listinfo/oss-gost-crypto" rel="noreferrer" target="_blank">https://lists.altlinux.org/mailman/listinfo/oss-gost-crypto</a><br>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature">SY, Dmitry Belyavsky</div></div></div>