【问题标题】:Get OmemoFingerprint from the receiver before sending a message在发送消息之前从接收方获取 OmemoFingerprint
【发布时间】:2019-03-04 13:47:09
【问题描述】:

我正在使用 Omemo 和 smack 库来创建聊天应用程序。我有以下情况: 我想在两个设备之间进行通信,设备 A 和设备 B。A 正在向 B 发送消息。我想发现 B 的指纹,以便检查我是否信任该设备。我正在做的是使用这种方法:

 HashMap<OmemoDevice, OmemoFingerprint> activeFingerprints =
                omemoManager.getActiveFingerprints(JidCreate.bareFrom(jid));
     for (final Map.Entry<OmemoDevice, OmemoFingerprint> entry : activeFingerprints.entrySet()) {
                result = omemoManager.isTrustedOmemoIdentity(entry.getKey(), entry.getValue());
                if (!result) {
                    break;
                }
            }

但这有时会返回给我 6 个指纹,我不知道哪个是确切的。因此,我认为我经常收到这条消息:

2019-03-04 13:28:30.111 4291-5181/com.inpedio.sphone W/System.err: org.matrix.olm.OlmException: BAD_MESSAGE_MAC 2019-03-04 13:28:30.111 4291-5181/com.inpedio.sphone W/System.err: 在 org.matrix.olm.OlmSession.decryptMessage(OlmSession.java:336) 2019-03-04 13:28:30.112 4291-5181/com.inpedio.sphone W/System.err:在 org.livesoftware.smackx.omemo.olm.OlmOmemoSession.decryptMessageKey(OlmOmemoSession.java:128) 2019-03-04 13:28:30.112 4291-5181/com.inpedio.sphone W/System.err:在 org.jivesoftware.smackx.omemo.internal.OmemoSession.decryptTransportedKey(OmemoSession.java:109) 2019-03-04 13:28:30.112 4291-5181/com.inpedio.sphone W/System.err: 在 org.jivesoftware.smackx.omemo.OmemoService.decryptTransportedOmemoKey(OmemoService.java:917) 2019-03-04 13:28:30.112 4291-5181/com.inpedio.sphone W/System.err: 在 org.jivesoftware.smackx.omemo.OmemoService.decryptOmemoMessageElement(OmemoService.java:887) 2019-03-04 13:28:30.113 4291-5181/com.inpedio.sphone W/System.err: 在 org.jivesoftware.smackx.omemo.OmemoService.processReceivingMessage(OmemoService.java:711) 2019-03-04 13:28:30.114 4291-5181/com.inpedio.sphone W/System.err:在 org.jivesoftware.smackx.omemo.OmemoService.access$200(OmemoService.java:104) 2019-03-04 13:28:30.114 4291-5181/com.inpedio.sphone W/System.err: 在 org.jivesoftware.smackx.omemo.OmemoService$OmemoStanzaListener.processStanza(OmemoService.java:1238) 2019-03-04 13:28:30.114 4291-5181/com.inpedio.sphone W/System.err: 在 org.jivesoftware.smack.AbstractXMPPConnection$4.run(AbstractXMPPConnection.java:1204) 2019-03-04 13:28:30.115 4291-5181/com.inpedio.sphone W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) 2019-03-04 13:28:30.115 4291-5181/com.inpedio.sphone W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) 2019-03-04 13:28:30.115 4291-5181/com.inpedio.sphone W/System.err: at java.lang.Thread.run(Thread.java:764) 2019-03-04 13:28:30.116 4291-5181/com.inpedio.sphone W/OmemoService:内部 omemoMessageListener 无法解密传入的 OMEMO 消息:传输的密钥无法解密,因为没有提供消息密钥。提供密钥:[1546815194]

我正在使用 OlmOmemo 和 smack 库。

【问题讨论】:

    标签: android smack omemo


    【解决方案1】:

    smack-omemo 作者在这里。

    您可能希望通过致电OmemoManager.requestDeviceListUpdateFor(contactJid) 来确保您获得了联系人的所有指纹。之后,您应该在调用您的代码后获得联系人设备的完整列表。

    关于如何知道哪个指纹属于哪个设备: 通常,您希望向用户呈现他们自己和他们的联系人设备的指纹列表。这样您就可以通过比较指纹找出哪个设备是哪个设备。

    在 OMEMO 协议中,故意不使用描述性名称(例如“电话”、“桌面”等)来识别密钥,以激励用户通过扫描 QR 码来验证指纹。您在问题中包含的例外是您的发送设备“忘记”信任您的接收设备的指示,导致消息没有为您的接收设备加密。理想情况下,如果用户尝试向具有“未确定”设备的联系人发送消息并提示他们验证该设备/决定是否信任该设备,您将向用户显示警告 - 再次,最好通过扫描 QR代码。

    顺便说一句:你能分享一个到 OlmOmemo 的链接吗?我在 Google 上找不到任何东西,但我很想看看他们是如何实现我的 smack-omemo 接口的 :)

    【讨论】:

    • Tnx 很多,这有帮助。你可能知道我为什么会收到 BAD_MESSAGE_MAC。当我以编程方式将消息从一个客户端发送到另一个客户端时,就会发生这种情况。我正在订阅和一切,但我从上面收到错误。
    • 在不访问源代码的情况下很难诊断这个问题。但是,我想说这可能是您的 olm 代码中的一个错误。
    猜你喜欢
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 2012-08-12
    • 2020-06-15
    • 1970-01-01
    • 2021-04-21
    • 2018-07-14
    • 2015-08-13
    相关资源
    最近更新 更多