Получите OmemoFingerprint от получателя перед отправкой сообщения
Я использую 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: at org.matrix.olm.OlmSession.decryptMessage (OlmSession.java:336) 2019-03-04 13: 28: 30.112 4291-5181 / com.inpedio.sphone W / System.err: at 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: at 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: at 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.moessOm 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: at 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: at 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.
1 ответ
Чмо -омоем тут автор.
Вы, вероятно, хотите убедиться, что у вас есть все отпечатки пальцев вашего контакта, позвонив OmemoManager.requestDeviceListUpdateFor(contactJid)
, После этого у вас должен быть полный список ваших контактов устройств после вызова вашего кода.
Что касается того, как узнать, какой отпечаток принадлежит какому устройству: Как правило, вы хотите предоставить пользователю список отпечатков пальцев как своих собственных, так и их контактных устройств. Таким образом, сравнивая отпечатки пальцев, вы можете узнать, какое это устройство, какое.
В протоколе OMEMO ключи намеренно не идентифицируются описательным именем (например, "телефон", "рабочий стол" и т. Д.), Чтобы мотивировать пользователей проверять отпечатки пальцев путем сканирования QR-кодов. Исключение, которое вы включили в свой вопрос, является показателем того, что отправляющее устройство "забыло" доверять принимающему устройству, в результате чего сообщение не зашифровано для принимающего устройства. В идеале вы должны предупредить пользователя, если он попытается отправить сообщение контакту, у которого есть "неопределившиеся" устройства, и попросить его проверить это устройство / принять решение, доверять этому устройству или нет - снова, в идеале, сканируя QR-код. код.
Кстати: вы можете поделиться ссылкой на OlmOmemo? Я ничего не могу найти с Google, но я хотел бы взглянуть на то, как они реализовали мои интерфейсы smack-omemo:)