Секретный обмен Шамира с использованием Bignum или Bigint или....?

У меня есть общая криптографическая реализация, использующая библиотеку OpenSSL BIGNUM в C. Стандартная расшифровка работает нормально, но я также хотел бы реализовать секретный обмен Шамира (SSS).

Проблема, с которой я столкнулся, состоит в том, что BIGNUM поддерживает только целые числа, и как часть интерполяции Лагранжа для SSS, мне нужно будет умножать на отрицательные значения.

Есть какой-либо способ сделать это? В противном случае: я могу сделать свой SSS на другом языке (python?), Если он способен взаимодействовать с BIGNUM, созданным OpenSSL.

Какие-либо предложения? ТИА!

2 ответа

Когда вы посмотрите на структуру BIGNUM в OpenSSL, вы обнаружите флаг с именем neg, Если объект BIGNUM представляет отрицательное число, neg будет установлен в 1. Кроме того, bn_mul() Функция правильно обрабатывает умножение на отрицательное число. Таким образом, вы можете реализовать SSS с OpenSSL, нет проблем!

Модульная арифметика (использование групп) дает только положительные результаты, поэтому я предполагаю, что вы хотите использовать немодульную арифметику? В этом случае вы можете просто сохранить отдельную переменную, указывающую, является ли значение отрицательным или нет. Результат положительного умножения такой же, за исключением знакового бита в любом случае.

Это не настолько чистый дизайн, насколько это возможно, но для нескольких методов это, вероятно, не будет иметь большого значения. Вы можете создать отдельные методы, которые имитируют BN методы, кроме целого числа, содержащего значение знака (-1, 0 или же 1).

Другие вопросы по тегам