我正在开发一个移动应用,其中user A
应该物理将某些内容递送到user B
,并且用户A
必须证明已交付它。< / p>
有一个限制:
我考虑过使用加密技术来解决这个问题:
安排交货时,会发生以下过程:
User B
,应该转移到他的移动应用程序。well-known+delivery_uuid
字符串使用公钥加密,并传输到User A
。well-known
字符串开头,因此User B
移动应用可以对其进行解密并验证邮件是否正常。如果有效,应用程序会存储delivery_uuid
部分,并在用户上网后立即发送到服务器端以便跟踪。User B
试图伪造delivery_uuid
,则显然不匹配。User A
试图伪造QRCode,则User B
的应用将无法验证该消息。well-known
条的事实会使它变弱吗?考虑到密钥对只使用一次。delivery_uuid
delivery_uuid
发送到后端之前以某种方式崩溃并丢失user B
,那么user A
将需要依赖ACF
诚实。我真的知道这个问题很复杂,但如果有人可以帮助我,我真的很感激。
注意:我不确定Stackoverflow是否是正确的stackexchange社区询问此问题,如果它是offtopic,请发表评论。但由于它有关于逻辑的东西,我认为这是正确的地方。
答案 0 :(得分:3)
似乎有点复杂。为什么不
UserB(以及安装应用程序以接收交付的每个用户)都会获得公钥/私钥对。私钥仅由UserB持有;如果它丢失,可以发出一对新的。同时,公钥是公共的,并与UserB的身份一起存储在数据库中。
收到交付后,UserB会生成一个简单的文本文档,其中包含日期和时间,QRCode,接收包的人的姓名或所需的任何信息。该文档还包含公钥。任何格式都可以。
UserB使用其私钥对文档进行签名,并将签名附加到文档的末尾。现在你有一份明文文件,说明发生的一切,并证明UserB同意了。
UserB与UserA共享文档,和/或将其上传到需要的任何地方,例如记录系统。 UserA和UserB都可以保留脱机副本。
如果需要递送证明,UserA只需要生成签名文件。
答案 1 :(得分:3)
如果我理解正确的问题,这里有三方:
此外,我并不认为“任何人都不应该看到公钥”。他们应该是,这就是为什么他们被称为公众。
现在,为了确保物品已交付
我们可以进行以下设置。
答案 2 :(得分:1)
使用签名而非加密。
0)分布式应用程序包含只有服务器知道的密钥对的公共部分。
1)安装应用的每个用户生成密钥对,保留私钥,并将公钥上传到数据库。
2)当计划交货时,服务器会生成交货ID并创建包含以下内容的消息:
A将在发货前收到此消息和签名。 B可以,但在交付之前无需接收。
3)当A遇到B时,A可以将消息和签名离线转移到B.QR码很难,取决于密钥大小,但NFC肯定会起作用。 B可以验证服务器签名并知道该消息未被伪造或篡改。 A可以将他的公钥转移到B,B可以通过签名的消息验证其指纹。 A可以通过使用属于刚刚传输和验证的公钥的私钥创建签名来证明他是他所说的人。
4)B可以通过使用与传递消息中的指纹匹配的公钥创建签名来证明他是谁。如果A还没有它,B必须将他的公钥转移到A,A可以验证它是否与消息中存储的指纹相匹配。
5)B可以通过在消息上创建签名来证明收据(但是你想格式化)并离线传送给A.然后,A可以将此信息提供给服务器,服务器可以验证,因为它有B的公钥。
答案 3 :(得分:0)
我们假设: - A有钥匙对。 - B持有交付UUID。 目标是使B能够提供只有A才能提供的证据。
如前所述,这可以通过数字签名来解决。你应该让B和A来交换必要的信息。 B应提供交货ID,A必须签字。
我相信您可能需要的不仅仅是这个简单的协议。
答案 4 :(得分:0)
在阅读答案后,我已经制定了解决问题的方法。我发布它作为回答知道每个人对其有效性的评论。
首先,让演员的名字简化:
transaction_id
,并将其与delivery_uuid
相关联。我们称之为delivery_uuid
。根据业务逻辑,只有买方可以访问它。delivery_uuid
到后端,这会生成包含transaction_id
和{{1}的消息然后对此消息进行数字签名。让我们称之为delivery secret
delivery secret
。 delivery secret
,卖家的应用可以检查delivery secret
真实性(使用应用程序的公钥),然后存储它以发送到一旦有互联网接入,后端作为交付证明。我认为没有必要,因为通过后端概念,只有买方可以访问delivery secret
。如果delivery secret
泄露,我当然会遇到更大麻烦。
也没有必要,卖家唯一关心的是他需要将delivery secret
发送到后端。如果他松开手机,这不是我们的问题。如果应用程序崩溃且delivery secret
丢失,那么我们就会遇到问题。
此签名允许卖家确保delivery secret
delivery token
。delivery_uuid
delivery secret
仍然有效(我们可以为其添加有效性)