私はスマートカードミドルウェアを実装しており、RSA-PSS署名方式を追加する必要があります。私は秘密鍵の操作を担当するCrypto ++のコードをオーバーライドし、空き(PSSとPKCSパディング)のために他のものをすべて入手することができたらいいと思います。私はスマートカードごとに異なる書き換えしたいものであるrsa.cpp
にこのコードを考え出し:スマートカードのRSA秘密鍵操作を無効にしますか?
Integer InvertibleRSAFunction::CalculateInverse(RandomNumberGenerator &rng, const Integer &x) const
{
DoQuickSanityCheck();
ModularArithmetic modn(m_n);
Integer r, rInv;
do { // do this in a loop for people using small numbers for testing
r.Randomize(rng, Integer::One(), m_n - Integer::One());
rInv = modn.MultiplicativeInverse(r);
} while (rInv.IsZero());
...
まず私は、これはRSA::PrivateKey
class MyPrivKey : public RSA::PrivateKey {
public:
template<typename... Args>
MyPrivKey(Args&&... args) : RSA::PrivateKey(std::forward<Args>(args)...) {}
Integer CalculateInverse(RandomNumberGenerator &rng, const Integer &x) const override {
return ... // do some smart card magic
}
};
をサブクラスそしてsigner
オブジェクトにこのキーを渡すことによって行うことができると思いました
MyPrivateKey privateKey(params);
// Signer object
RSASS<PSS, SHA1>::Signer signer(privateKey);
しかし、すぐに私はすべてのprivateKey
のコンポーネント(弾性率、プライベートとパブリック指数ことが判明しました、等)はちょうどsigner
内部にコピーされます。したがって、RSA::PrivateKey::CalculateInverse
を無効にしても実際には役に立ちません。
私はテンプレートで迷って泣いた。私は0.0001%の確率で誰かが私にこれを助けることができると思います。私は私の運を試してみます。
私の例の完全なコードhttps://pastebin.com/Nwk4jX0j
を構築することができ、実際に 'Signer'をい*これらの値を使用するか、 'PrivateKey :: CalculateInverse()'を呼び出しますか?後者の場合は、コピーするための偽の値を与えて、スマートカードであなたのプライベートマジックを行うことができます。スマートカードには適切なライブラリが付属していませんか? –