СПОСОБ И УСТРОЙСТВО ДЛЯ ВЫПОЛНЕНИЯ КРИПТОГРАФИЧЕСКОГО ВЫЧИСЛЕНИЯ
METHOD AND DEVICE FOR EXECUTING CRYPTOGRAPHIC COMPUTATION

Настоящее изобретение относится к области криптографии и, в частности, к защите секретности ключей, используемых в криптографических алгоритмах.
Криптографические алгоритмы позволяют, в частности, шифровать данные и/или дешифровать данные. Такие алгоритмы можно также использовать для многих других целей. Действительно, они могут также служить для выполнения подписи или для аутентификации определенной информации. Они могут также использоваться в области установки даты и времени при начальной загрузке компьютерных устройств.
Как правило, такие алгоритмы содержит последовательность из нескольких операций или расчетов, которые применяют последовательно для одной шифруемой данной с целью получения зашифрованной данной или для зашифрованной данной с целью получения дешифрованной данной.
Среди этих алгоритмов некоторые основаны на использовании секретных ключей, тогда как другие основаны на смешанном использовании ключей общего пользования или открытых ключей и секретных ключей.
Например, следующие разделы иллюстрируют применения этих алгоритмов для шифрования и дешифрования данных.
Согласно общему принципу таких вариантов применения криптографических алгоритмов с открытым ключом открытые ключи доступны для всех, и любой желающий может отправить данные, зашифрованные при помощи открытых ключей; однако только обладатель соответствующих секретных ключей может дешифровать эти данные.
Защита криптографического алгоритма с открытым ключом основана на том, что знание открытых ключей не позволяет найти соответствующие секретные ключи и поэтому не позволяет дешифровать данные.
Так, известен метод шифрования с открытым ключом, называемый RSA по первым буквам фамилий его создателей Ривеста, Шамира, Адельмана. Этот метод является самым старым и самым распространенным в этой области.
Согласно этому методу выбирают четыре числа, обозначаемые р, q, e и d. Числа р и q являются двумя разными простыми числами. Их генерируют случайно.
Числа d и e проверяют следующее уравнение:
e*d=1 modulo(p-1)(q-1).
В этом случае можно использовать алгоритм Евклида для генерирования d на основании е, р и q при помощи расчетов, хорошо известных специалистам.
Затем число, полученное от произведения чисел р и q, обозначают n (модуль).
Таким образом, пара чисел n и е образует ключ общего пользования, тогда как пара чисел n и d образует ключ индивидуального пользования.
После этого для отправки данной, соответствующей целому числу М, находящемуся в пределах от 0 до n-1, вычисляют предназначенное для отправки соответствующее закодированное число С при помощи следующего уравнения:
e
С=Mmodulo n
По получении кодированного сообщения С обладатель секретного ключа вычисляет промежуточное значение числа D:
d
D=Cmodulo n
После этого получают оригинальное незашифрованное сообщение М при помощи следующего уравнения:
de
D=M=М modulo n
Таким образом, с учетом всего вышеизложенного можно отметить, что такие алгоритмы с открытым ключом основаны на генерировании простых чисел. В частности, алгоритмы с открытым ключом, такие как RSA, могут потребовать генерирования очень больших простых чисел. Так, может потребоваться генерировать простые числа, содержащие около 500 цифр.
В алгоритмах типа RSA отмечается, что модуль n принадлежит открытому ключу и может, таким образом, быть известен всем; тогда как число d должно оставаться секретным для обеспечения защиты алгоритма. Однако число d получают из чисел р и q. Следовательно, для защиты таких алгоритмов необходимо, чтобы числа р и q оставались секретными.
Как правило, для криптографической программы электронной платы генерирование этих ключей происходит в среде, защищенной от любых атак, например, такой как завод для изготовления электронного компонента, в котором выполняется криптографический алгоритм.
Следовательно, в таких условиях числами р и q можно манипулировать очень просто, не опасаясь каких-либо атак, целью которых может быть определение их значения и последующий взлом защиты алгоритма. Таким образом, как правило, различные способы генерирования ключей предполагают манипулирование этими числами р и q.
В этих условиях можно использовать разные способы, известные специалистам, для генерирования простых чисел.
Вместе с тем для выполнения некоторых задач может потребоваться генерировать такие ключи в незащищенной среде, где вполне возможны атаки с целью взлома секретности используемых ключей криптографического алгоритма.
В настоящее время известны многие типы атак.
Так, некоторые атаки основаны на утечках информации, обнаруживаемых во время выполнения некоторых этапов шифрования. Как правило, эти атаки основаны на корреляции между утечками информации, обнаруженными во время обработки криптографическим алгоритмом какой-либо данной и ключа или ключей (атаки путем анализа потребления тока, электромагнитных излучений, времени вычисления и т.д.).
В этих условиях чрезвычайно важно соблюдать соответствующие меры предосторожности для сохранения в секрете вышеупомянутых чисел р и q.
Известен метод генерирования чисел р и q, позволяющий сохранить эти числа в секрете. Действительно, в статье "Efficient Generation of Shared RSA keys", написанной Дэном Бонехом и Мэттью Франклином, предлагается генерировать числа р и q одновременно и секретно.
Одной из задач этого метода является раздельное генерирование простых чисел несколькими участниками. Так, эти участники выполняют расчеты, позволяющие им генерировать два простых числа, не зная этих простых чисел, при этом участники знают только произведение этих чисел.
Согласно этому методу числа р и q выбирают случайно и одновременно. Затем на основе их произведения решают, являются ли выбранные таким образом два числа простыми числами. Чтобы сохранить секретность чисел р и q, этими числами напрямую не манипулируют.
а
b
a
b
а
b
a
b
Действительно, в частности, случайно выбирают четыре целых числа р, p, q и q, при этом число р является результатом суммы числа р и числа p, а число q является результатом суммы числа q и числа q.
а
b
a
b
После этого проверяют, являются ли числа р и q простыми числами на основании их произведения, манипулируя числами р, p, q и q.
В случае, если числа р и q не являются простыми, повторяют случайный выбор двух других чисел р и q, пока выбранные числа р и q не будут определены как простые числа.
Такое решение может оказаться очень сложным при вычислениях и значительно снижает эффективность способов генерирования ключей.
Задачей настоящего изобретения является предложение решения, позволяющего устранить эти недостатки.
Первым объектом настоящего изобретения является способ генерирования ключа для криптографического алгоритма в электронном компоненте, в память которого вводят простое число Р.
Способ содержит операцию генерирования, по меньшей мере, одного секретного простого числа, причем эта операция содержит следующие последовательные этапы:
1
2
/а/ случайно выбирают два целых числа p' и p', сумма которых равна числу р';
1
2
/б/ определяют, является ли указанное число р' простым числом, на основании комбинирования хранящегося в памяти простого числа Р с указанными числами p' и р';
1
2
/в/ если решают, что число р' является простым числом, числа p' и р' вводят в запоминающее устройство электронного компонента; в противном случае повторяют этапы /а/ и /б/.
Благодаря этому отличительному признаку, можно секретно и эффективно генерировать простое число р'.
1
2
Действительно, генерированным таким образом числом р' не манипулируют напрямую в ходе различных этапов способа, а манипулируют только целыми числами p' и р'. Следовательно, исключается возможность взлома секрета числа р' путем атак на алгоритм во время этапа генерирования этого простого числа р'.
Кроме того, это генерирование простого числа является эффективным, так как оно позволяет последовательно генерировать несколько простых чисел. При этом более вероятным является случайный выбор одного простого числа, чем случайный выбор нескольких простых чисел одновременно, как это предлагается в статье "Efficient Generation of Shared RSA keys".
Такой способ в соответствии с настоящим изобретением предпочтительно можно применять к любому способу генерирования ключа для определенного криптографического алгоритма в электронном компоненте, если такой алгоритм требует генерирования секретного простого числа или даже нескольких секретных простых чисел.
Этап /б/ можно осуществлять, применяя любой тип теста на простоту, позволяющего определить простоту целого числа на основании комбинирования этого целого числа с простым числом.
Как правило, такие тесты на простоту являются вероятностными алгоритмами. Они позволяют определить, является ли целое число простым числом, с очень высокой степенью вероятности.
1
2
1
2
1
2
1
2
В варианте выполнения настоящего изобретения определяют первое целое число pи второе целое число р таким образом, чтобы хранящееся в памяти простое число Р было равно сумме определенных целых чисел p и p. В этом случае этап /б/ осуществляют на основании операций, осуществляемых на числах p, p, p' и p'.
Так, во время генерирования секретного простого числа р' в фазе теста на простоту числа р' предпочтительно не манипулируют ни простым числом Р, ни числом р', что сводит на нет потенциальные атаки на секретность числа р' во время этого этапа генерирования.
1
2
Можно случайно определять первое и второе целые числа p и p.
Этап /б/ можно осуществлять при помощи теста на простоту, основанного на комбинации теста типа Соловея-Страссена и теста типа Миллера-Рабина. Так, например, тест на простоту может быть основан на тесте на простоту, описанном в статье "Efficient Generation of Shared RSA keys" Дэна Бонеха и Мэттью Франклина в разделе 3 "Distributed Primality Test". Действительно, этот тест на простоту основан, с одной стороны, на тесте на простоту Соловея-Страссена и, с другой стороны, на тесте на простоту Рабина-Миллера. Тест на простоту Соловея-Страссена описан в документе Р.Соловея и В.Страссена "A fast monte carlo test for primality", 1977. Тест на простоту Рабина-Миллера описан в документе М.Рабина "Probabilistic algorithm for testing primality", 1980.
В варианте выполнения настоящего изобретения эффективность такого способа повышают, включая перед этапом /б/ следующий этап:
1
2
/а1/ на основании операций, осуществленных с числами p' и p', проверяют, чтобы число р' не делилось на одно или несколько определенных простых чисел.
В этом случае повторяют этапы /а/ и /а1/, если число р' делится на одно из определенных простых чисел.
Этот этап /а1/ представляет особый интерес, когда требуется генерировать большие простые числа. Действительно, такой этап позволяет достаточно просто исключить некоторые числа перед осуществлением этапа /б/, который является более сложным в осуществлении.
В варианте выполнения настоящего изобретения этап /а1/ содержит следующие этапы для простого числа у, строго превышающего 1:
- случайно выбирают первое целое число с из целых чисел в диапазоне от 0 до y-1 и второе целое число d среди целых чисел в диапазоне от 1 до y-1;
- определяют число u при помощи следующего уравнения:
1
u=c+dp' modulo y;
- определяют число v при помощи следующего уравнения:
2
v=c-dp' modulo y;
- определяют, делится ли р на y, в зависимости от разности между числом u и числом v.
Некоторые криптографические алгоритмы требует генерирования нескольких секретных простых чисел. В этом случае можно легко применить способ согласно варианту выполнения изобретения столько раз, сколько потребуется для генерирования простого числа. Таким образом, можно генерировать, по меньшей мере, два простых числа последовательно путем повторения этапов /а/-/с/ для создания пары асимметричных ключей.
Вторым объектом настоящего изобретения является электронный компонент генерирования ключа для определенного криптографического алгоритма.
Компонент содержит:
1
2
- блок выбора, выполненный с возможностью случайного выбора двух целых чисел p' и р', сумма которых является числом р';
1
2
1
2
- запоминающее устройство для запоминания простого числа Р и для запоминания чисел p' и р', когда определяют, что сумма указанных чисел p' и p' является простым числом;
1
2
- блок решения, выполненный с возможностью решить, является ли число р' простым числом, на основании комбинации между хранящимся в памяти простым числом Р и указанными числами p' и р'.
1
2
1
2
1
2
1
2
Блок выбора может определить первое целое число p и второе целое число р таким образом, чтобы хранящееся в памяти простое число Р было равно сумме указанных определенных целых чисел p и р; и блок решения может решить, является ли число р' целым числом на основании операций, осуществленных на числах p, р, p' и р'.
1
2
В варианте выполнения настоящего изобретения блок выбора определяет первое и второе целые числа p и р случайно.
Предпочтительно блок решения применяет тест на простоту, основанный на комбинации теста типа Соловея-Страссена и теста типа Миллера-Рабина и предложенный в статье "Efficient Generation of Shared RSA keys".
1
2
Предпочтительно блок выбора производит предварительный контроль на основании операций, осуществленных на числах p' и р', чтобы проверить, что число р' не делится на одно или несколько определенных простых чисел.
1
2
В этом случае блок выбора повторяет случайный выбор двух целых чисел p' и р', если р' делится на определенное простое число.
В варианте выполнения настоящего изобретения для осуществления предварительного контроля относительно простого числа y, строго превышающего 1, блок выбора дополнительно содержит:
- средства, выполненные с возможностью случайного выбора первого числа с среди целых чисел в диапазоне от 0 до y-1 и второго целого числа d среди целых чисел в диапазоне от 1 до y-1;
- средства, выполненные с возможностью определения числа и при помощи следующего уравнения:
1
u=c+dp' modulo y;
- средства, выполненные с возможностью определения числа v при помощи следующего уравнения:
2
v=c-dp' modulo y;
- средства, выполненные с возможностью определения, делится ли р на y, в зависимости от разности между числом u и числом v.
Другие отличительные признаки, задачи и преимущества настоящего изобретения будут более очевидны из нижеследующего описания одного из вариантов его выполнения.
Это описание представлено со ссылками на следующие прилагаемые чертежи:
Фиг.1 - основные этапы способа генерирования ключа согласно варианту выполнения настоящего изобретения.
Фиг.2 - схема электронного компонента согласно варианту выполнения настоящего изобретения.
В варианте выполнения настоящего изобретения способ генерирования ключа для криптографического алгоритма предназначен для его применения в электронном компоненте.
Предварительно электронный компонент вводит в запоминающее устройство первое число, обозначенное Р.
На фиг.1 показаны основные этапы способа согласно варианту выполнения изобретения.
1
2
1
2
На этапе 11 производят случайный выбор двух целых чисел, обозначаемых p' и р'. Затем на этапе 12 решают, является ли простым числом сумма, обозначенная р', этих двух выбранных чисел. Этот этап осуществляют таким образом, чтобы сохранять в секрете число р'. Так, предпочтительно на этом этапе числом р' как таковым не манипулируют. Определение простоты числа р' осуществляют при помощи операций, производимых на числах p' и р'.
После этого на этапе 13, если определено, что число р' не является простым числом, повторяют предыдущие этапы 11 и 12.
1
2
Если же, наоборот, обнаруживается, что это число является простым числом, то в этом случае числа p' и р' вводятся в память.
Такой способ можно повторять всякий раз, когда потребуется генерирование секретного простого числа.
1
2
1
2
На этапе 12 можно применить любой тест на простоту, который позволяет решить, является ли число комбинацией из двух простых чисел, поскольку этот тест не содержит операций, которые могут поставить под угрозу секретность одного из этих двух чисел произведения. Такие тесты на простоту хорошо известны и легко доступны специалистам. Предпочтительно эти тесты на простоту могут позволить решить на основании произведения n простого числа Р и числа р', являющегося результатом суммы случайно выбранных чисел p' и р', является ли число р' простым числом. Этот тест содержит операции на числах p' и р', но не содержит операций, производимых непосредственно на числе р'.
Так, например, тест на простоту может быть основан на комбинации теста типа Соловея-Страссена и теста типа Миллера-Рабина, как было предложено в статье "Efficient Generation of Shared RSA keys".
1
2
В этом случае Р представляют в виде двух чисел, обозначаемых p и р. Это разложение можно осуществить случайно или произвольно.
Этот тест позволяет решить, является ли число m произведением двух простых чисел Р и р', где m отвечает уравнению:
1
2
1
2
m=(p+р)*(p'+р')
где
1
2
Р=p+р
и
1
2
p'=p'+р'.
Таким образом, не производя непосредственного манипулирования с числами Р и р', можно решить, являются ли эти числа Р и р' простыми числами.
Отмечается, что в таком варианте числом m можно манипулировать без всякого опасения, так как оно не является секретным.
Как детально описано в статье "Efficient Generation of Shared RSA keys", в этом тесте предполагается, что различные числа отвечают следующим характеристикам:
1
p=3 mod 4
и
1
p'=3 mod 4
затем
2
р=0 mod 4
и
2
р'=0 mod 4
1
2
1
1
Чтобы не допустить атаки на секретность числа р' во время этого этапа, предпочтительно на числах p, р, p' и p' производят следующие операции.
В первую очередь, случайно выбирают числа а среди целых чисел от 1 до m-1.
После этого вычисляют символ Якоби относительно выбранного таким образом числа m, обозначаемый (a/m).
Затем, если вычисленный таким образом символ Якоби отличается от 1, повторяют этап случайного выбора числа а.
Если символ Якоби равен 1, переходят в следующему этапу,
1
2
В этом случае производят первый промежуточный расчет на числах m, p и p' и получают число u, отвечающее следующему уравнению:
1
2
После этого производят второй промежуточный расчет на числах m, p и p и получают число v, отвечающее следующему уравнению:
После этого проверяют, выполняется ли следующее уравнение:
u=+/-v mod m
Если это уравнение верно, делают вывод, что m является произведением двух целых чисел Р и р' с определенной вероятностью.
В варианте выполнения настоящего изобретения Р является простым числом, предварительно введенным в запоминающее устройство электронного компонента. Следовательно, применяя этот тип теста, можно решить, является ли число р' простым числом, не прибегая к операциям непосредственно на числе р'.
1
2
В варианте выполнения настоящего изобретения, чтобы повысить вероятность реализации этапа 12 на числах p' и р', для которых сумма является целым числом, перед этапом 12 можно осуществить этап, предварительно позволяющий просто и эффективно исключить некоторые числа.
Таким образом, можно рассмотреть набор простых чисел. Затем перед этапом 12 требуется определить, делится ли число р' на простое число, обозначенное у. Для этого случайно выбирают целое число с среди целых чисел от 0 до у-1 и целое число d среди целых чисел от 1 до у-1.
После этого производят два следующих промежуточных вычисления:
1
u=с+dp' modulo y
2
v=с-dp' modulo y
В этом случае можно проверить, выполняется ли следующее уравнение:
u-v=0 modulo y
Если это уравнение верно, делают вывод, что число р' делится на у.
На фиг.2 показана схема электронного компонента согласно варианту выполнения настоящего изобретения.
1
2
Такой компонент 21 содержит блок 22 выбора, выполненный с возможностью случайного выбора двух целых чисел p' и p', суммой которых является число р'.
1
2
1
2
Он дополнительно содержит запоминающее устройство 23 для введения в память простого числа Р и чисел p' и p', если решают, что сумма этих чисел p' и p' является простым числом.
1
2
Он содержит также блок решения, выполненный с возможностью решения, является ли число р' простым числом на основании комбинации введенного в память простого числа Р с числами p' и p'.
Таким образом, получают способ генерирования ключа, предназначенный для эффективного и секретного последовательного генерирования простого числа или нескольких простых чисел.