在查找 ed25519 签名方案的现有实现时,我发现 donna 实现(在此处找到)产生的签名无法由 supercop 实现(在此处找到)验证,但 supercop 签名可由 donna 实现验证。有人可以解释为什么假定相同签名方案的两个实现只产生部分兼容的签名吗?我错过了什么?这是一个示例来说明我的意思:
secret key = 50f26a6d0e454337554274d703033c21a06fecfcb0457b15214e41ea3228ac51e2b9f0ca0f6510cfdd24325ac6676cdd98a9484336ba36c876fd93aa439d8b72
public key = eddaef2fab3d1412ea1f2517b5a50439c28c27d6aefafce38f9290c17e1e7d56
donna signature = f4b79662b1973be8774c5d23044fe4b25858e7c362923e1fc99cc98e89e099c3f574dca3e47d7a131b43860fabc34b6764ccabb4f9f21b6cae54be5fc8193103
//not verifiable by supercop
supercop signature = 2f0ae6396d4d72fb47c12df6560747f20dc675e0b2d7e711caf68a03ced9309b9abd736cb204e789b95c2f08e0be4254ce69974a4064e40ce7094e288b7cbf03
//verifiable by donna
为了获得上述结果,我使用了ed25119-donna和supercop库中的ed25519_sign()(它们在两个库中的名称相同)。
为了验证签名,我使用了ed25519-donna 的ed25519_sign_open()和supercop的ed25519_verify () 。