Введение
В криптографии слепота — это техника, с помощью которой агент может предоставлять услугу (т. е. вычислять функцию) клиенту в закодированной форме, не зная ни реального входного значения, ни реального выходного значения. Методы слепоты также применяются для предотвращения атак по сторонним каналам на устройства шифрования. В частности, Алиса имеет входные данные x, а Оскар — функцию f. Алиса хотела бы, чтобы Оскар вычислил для неё y = f(x), не раскрывая ни x, ни y. Причина, по которой она этого хочет, может заключаться в том, что она не знает функцию f или у неё нет ресурсов для её вычисления. Алиса "ослепляет" сообщение, кодируя его в другой вход E(x); кодирование E должно быть биекцией на входном пространстве f, в идеале — случайной перестановкой. Оскар предоставляет ей f(E(x)), к которому она применяет декодирование D, чтобы получить y = D(f(E(x))). Не все функции допускают вычисления вслепую. В других случаях слепоту необходимо применять с осторожностью. Примером является схема подписей Рабина — Уильямса. Если слепота применяется к отформатированному сообщению, но случайное значение не удовлетворяет требованиям Якоби для p и q, это может привести к восстановлению секретного ключа. Демонстрация восстановления была представлена Евгением Сидоровым. Распространённое применение слепоты — слепые подписи. В протоколе слепой подписи подписывающий может цифровым способом подписать сообщение, не узнавая его содержания. Одноразовый блокнот (OTP) по своей природе является применением слепоты к задаче безопасной связи. Алиса хочет тайно отправить сообщение Бобу, однако всё их общение может быть прочитано Оскаром. Поэтому Алиса отправляет сообщение, предварительно "ослепив" его секретным ключом или OTP, которым она делится с Бобом. Боб отменяет слепоту после получения сообщения. В этом примере функция f является тождественной, а E и D обычно представляют собой операцию XOR. Слепота также может использоваться для предотвращения некоторых атак по сторонним каналам на асимметричные схемы шифрования. Атаки по сторонним каналам позволяют злоумышленнику восстановить информацию о входных данных криптографической операции, измеряя что-то, отличное от результата алгоритма, например, энергопотребление, время вычисления или радиочастотное излучение устройства. Как правило, такие атаки зависят от того, что злоумышленник знает характеристики алгоритма, а также (некоторые) входные данные. В этом случае слепота служит для изменения входных данных алгоритма на непредсказуемое состояние. В зависимости от характеристик функции слепоты это может предотвратить утечку полезной информации. Важно отметить, что безопасность также зависит от устойчивости самих функций слепоты к атакам по сторонним каналам. Например, в RSA слепота включает вычисление E(x) = (xr)^e mod N, где r — случайное целое число между 1 и N, взаимно простое с N (т. е. gcd(r, N) = 1), x — открытый текст, e — публичная степень RSA, а N — модуль RSA. Далее применяется функция дешифрования f(z) = z^d mod N, что даёт f(E(x)) = (xr)^(ed) mod N = xr mod N. Наконец, выполняется отмена слепоты с помощью функции D(z) = z * r^(-1) mod N. Умножение xr mod N на r^(-1) mod N даёт x, как и требуется. При дешифровании таким образом противник, способный измерять время, затраченное на эту операцию, не сможет использовать эту информацию (поскольку RSA уязвим к атакам по времени), так как он не знает константу r и, следовательно, не имеет представления о реальных входных данных, подаваемых в примитивы RSA.
f is the identity and E and D are both typically the XOR operation. Blinding can also be used to prevent certain side channel attacks on asymmetric encryption schemes. Side channel attacks allow an adversary to recover information about the input to a cryptographic operation, by measuring something other than the algorithm's result, e. g., power consumption, computation time, or radio frequency emanations by a device. Typically these attacks depend on the attacker knowing the characteristics of the algorithm, as well as (some) inputs. In this setting, blinding serves to alter the algorithm's input into some unpredictable state. Depending on the characteristics of the blinding function, this can prevent some or all leakage of useful information. Note that security depends also on the resistance of the blinding functions themselves to side channel attacks. For example, in RSA blinding involves computing the blinding operation 1=E(x) = (xr)e mod N, where r is a random integer between 1 and N and relatively prime to N (i. e. 1=gcd(r, N) = 1), x is the plaintext, e is the public RSA exponent and N is the RSA modulus. As usual, the decryption function 1=f(z) = zd mod N is applied thus giving 1=f(E(x)) = (xr)ed mod N = xr mod N. Finally it is unblinded using the function 1=D(z) = zr−1 mod N. Multiplying xr mod N by r−1 mod N yields x, as desired. When decrypting in this manner, an adversary who is able to measure time taken by this operation would not be able to make use of this information (by applying timing attacks RSA is known to be vulnerable to) as she does not know the constant r and hence has no knowledge of the real input fed to the RSA primitives.
Примеры
Ослепление в GPG 1.x