在Corda中,两个节点如何相互证明它们都知道一条信息?
我想写一个Corda流程,其中只有当双方都能证明他们共享一条共同的信息时,双方才能进行交易。流程概述如下:在Corda中,两个节点如何相互证明它们都知道一条信息?,corda,Corda,我想写一个Corda流程,其中只有当双方都能证明他们共享一条共同的信息时,双方才能进行交易。流程概述如下: @InitiatingFlow @StartableByRPC class ChallengeResponseFlow(val otherParty: Party, val proofOfKnowledge: Int) : FlowLogic<Unit>() { @Suspendable override fun call() { val ot
@InitiatingFlow
@StartableByRPC
class ChallengeResponseFlow(val otherParty: Party, val proofOfKnowledge: Int) : FlowLogic<Unit>() {
@Suspendable
override fun call() {
val otherPartySession = initiateFlow(otherParty)
otherPartySession.send(proofOfKnowledge)
val theirProofOfKnowledge = otherPartySession.receive<Int>().unwrap { theirProofOfKnowledge -> theirProofOfKnowledge }
verifySecretValue(theirProofOfKnowledge)
TODO("Challenge-response passed. Continue with flow.")
}
private fun verifyTheirProofOfKnowledge(theirProofOfKnowledge: Int) {
TODO("Write verification logic.")
}
}
@InitiatingFlow
@星表
类ChallengeResponseFlow(val其他方:Party,val知识证明:Int):FlowLogic(){
@暂停
覆盖有趣的调用(){
val otherPartySession=initiateFlow(其他方)
otherPartySession.send(知识证明)
val theirprooffknowledge=otherPartySession.receive().unwrap{theirprooffknowledge->theirprooffknowledge}
verifySecretValue(他们的ProofkKnowledge)
TODO(“质询响应已通过。继续流动”)
}
私人娱乐验证他们的ProoffKnowledge(他们的ProoffKnowledge:Int){
TODO(“写入验证逻辑”)
}
}
两个问题:
- 有什么证据可以证明我知道与对手相同的秘密
- 我如何根据对方发送给我的知识证明来检查对方是否知道相同的秘密
重要的是,在这个质询-响应协议期间,秘密永远不会泄露。我可以用SHA256散列我的秘密,将前128位发送给另一方,让另一方检查他的秘密SHA256散列是否与他的前128位匹配。然后,他可以将他的后半部分发送给第一方,以验证它是否与他的匹配。根据您的要求,有多种策略:
nonce
,并将SHA3-256(秘密,nonce)
或SHA2-256d
(双哈希)或更好的HMAC
及其nonce
发送给另一方secret
是否在两个不同的事务/流中重复使用。所需要的是始终生成一个新的随机nonce
字符串,如弱密码或用户ID)。然后,一个(中间的人)可以简单地强制简单的散列或MAC方法(即使应用了nonce)轻松提取“弱”秘密。此问题的解决方案更为复杂,需要某种加密(即,通过安全通道或使用加密协议发送散列消息)
SHA3-256(秘密,nonce)
。因此,每个客户机都使用另一方收到的nonceSHA3-256(保密、非保密、非保密)
及
乙方发送SHA3-256(保密、非保密、非保密)
这是为了提供额外的保证,即聚合的nonce由双方控制,如果其中只有一方是恶意的或其PRNG有缺陷,您仍然可以生成唯一的nonce
注:我们应该确保不违反宪法!=因为第二方回复的人可以与第一方重复使用(转发)相同的身份验证令牌(同样是一种重播攻击)
注:同样,我们强调上述散列中的nonce顺序应该不同,以再次防止内部重播攻击,即使我们每个用户使用不同的nonce 现在的荣誉!我认为这不会阻止野蛮的暴力行为。我只是认为这个问题是一个需要从头开始解决的难题,而不是考虑安全的所有方面。Chackias在提供每个关键方面的答案方面做得很好。