问题标签 [end-to-end-encryption]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
254 浏览

search - 使用端到端加密时如何实现聊天中消息的搜索功能?

如果我将端到端加密添加到我编写的聊天应用程序中,我将无法在服务器端读取交换消息的内容,因此如果我想保留消息搜索功能,我需要实现它用另一种方式。

什么是正确的最佳实践?

我想到了以下几种可能:

  1. 在每台设备上存储一个本地数据库(例如 SQLite),其中消息将以未加密格式存储。

    但这有一些缺点:除了消息未加密存储这一事实之外,该应用程序也可以通过 Web 浏览器访问,在这种情况下,我无法将整个对话存储在浏览器的会话存储中(我什至不认为他们会合身)。

    此外,这样我就不再有唯一的事实来源(必须处理存储加密消息的服务器端数据库以及用于未加密消息的本地“设备端”SQLite DB)。

    所以我认为这不是一条可行的道路。

  2. 在客户端(无论是网络浏览器还是设备)上,当用户在聊天中执行搜索时,下载该聊天的所有消息,全部解密,然后执行内存搜索。

    缺点:我必须下载所有聊天记录才能执行搜索。如果聊天的历史很长,很可能所有数据都无法放入内存。下载历史记录后,我可以将其存储在内存中,直到用户重新加载页面(如果使用 Web 浏览器)或终止并重新启动应用程序(如果使用智能手机或平板电脑等设备)。

    优点:我可以显示找到搜索词的消息数量。

  3. 与 2 相同,但我将向服务器执行多个请求,每个请求仅获取聊天消息的一小部分,例如当用户搜索“foo”时,最初我将向服务器询问最后 30 条消息,解密他们在客户端上,搜索“foo”,仅显示该块中包含“foo”的消息的结果和计数,当用户滚动或按下“搜索更多”按钮时,执行另一个请求,该请求将获取另一个块在 30 条消息中,将这些添加到结果中,并在考虑到第 n 个块之后增加匹配消息的计数。

    缺点:我无法在第一次搜索时显示匹配消息的总数。

  4. 还要别的吗?也许是一个更好的解决方案,它也被 Telegram 或 WhatsApp 等其他服务使用(我知道它们都为他们的聊天实现了端到端加密)。

0 投票
0 回答
301 浏览

node.js - 如何构建高度安全的端到端加密 React Native 消息传递应用程序

我刚刚在安全 stackexchange 上发布了这个问题,他们建议我将我的问题移到 stackoverflow,所以就在这里。

我目前正在开发一个即时 React Native 消息传递应用程序,并且我想实现 E2EE(发送方和接收方之间的端到端加密)以获得更好的安全性。我使用的库/框架是用于后端的 NodeJS、用于实时通信的 Socket.io、用于数据管理的 MongoDB,显然还有用于前端的 React Native。

此时,我可以将消息从发送方来回发送到服务器并返回到接收方,但服务器实际上可以读取消息,这很烦人,因为我想将消息(加密)保存在我的数据库中并检索他们让用户看到他的历史。

最近我发现 Diffie-Hellman 密钥交换是在每个端点设备上生成共享密钥的一个很好的解决方案,但我不知道如何在我的应用程序中实现它。

我还发现大型消息传递应用程序(如 WhatsApp、Facebook Messenger、Signal...)使用基于 X3DH(扩展三重 Diffie-Hellman)的信号协议,我想知道是否有可能实现这么好的我的 RN 应用程序中的东西。但问题是,即使在阅读了 Signal Protocol 的文档之后,我也无法弄清楚如何实现它。

总之,我的问题是如何在我的 RN 应用程序中实现信号协议并使用 Socket.io 发送和接收加密消息?如果由于某种原因这是不可能的,我该如何实现 Diffie-Hellman 密钥交换算法?

感谢任何可以帮助我的人!

0 投票
0 回答
3536 浏览

encryption - 如何构建高度安全的端到端加密 React Native 消息传递应用程序

我目前正在开发一个即时 React Native 消息传递应用程序,并且我想实现 E2EE(发送方和接收方之间的端到端加密)以获得更好的安全性。我使用的库/框架是用于后端的 NodeJS、用于实时通信的 Socket.io、用于数据管理的 MongoDB,显然还有用于前端的 React Native。

此时,我可以将消息从发送方来回发送到服务器并返回到接收方,但服务器实际上可以读取非常烦人的消息,因为我想将消息(加密)保存在我的数据库中并检索他们让用户看到他的历史。

最近我发现 Diffie-Hellman 密钥交换是在每个端点设备上生成共享密钥的一个很好的解决方案,但我不知道如何在我的应用程序中实现它。

我还发现大型消息传递应用程序(如 WhatsApp、Facebook Messenger、Signal...)使用基于 X3DH(扩展三重 Diffie-Hellman)的信号协议,我想知道是否有可能实现这样一个好的我的 RN 应用程序中的东西。但问题是,即使在阅读了 Signal Protocol 的文档之后,我也无法弄清楚如何实现它。

总之,我的问题是如何在我的 RN 应用程序中实现信号协议并使用 Socket.io 发送和接收加密消息?如果由于某种原因这是不可能的,我该如何自己实现 Diffie-Hellman 密钥交换?

感谢任何可以帮助我的人!

0 投票
0 回答
25 浏览

end-to-end-encryption - 如何在 EE2E 中读取来自另一台设备的消息

如果我从其他设备(移动设备、其他网络浏览器)连接到我的帐户,我如何阅读我和其他人之间的消息 我在其他设备中没有私钥?在我的服务器中,我只存储每个用户的公钥,还将私钥存储在 indexDB 中,我使用 kbpgp 加密消息并在聊天应用程序中读取它们。

0 投票
2 回答
3578 浏览

flutter - 如何在 Flutter 聊天应用中进行端到端加密?

我使用颤振和我自己的服务器作为数据库的后端制作了一个聊天应用程序。
我想添加端到端加密,类似于 WhatsApp 等其他聊天应用程序,但我对此并不完全了解。
所以我想问的是:

  1. 端到端加密的工作必须在客户端还是在后端完成?
  2. 如何做到这一点
  3. 是否有任何第三方提供此类东西,与颤振兼容
  4. 如果没有第 3 方提供商,怎么能自己拥有呢?
0 投票
0 回答
79 浏览

javascript - 如何使用 PHP 和 JavaScript 在 https 之上实现用户到服务器的加密?

问题:我想为我的应用程序上的每个请求实现 e2ee。当用户发送请求时,请求正文需要加密。当服务器发送响应时,响应也需要加密。

问题:如何实现安全的用户到服务器加密(例如:LassPass 和 BitWarden)?我正在考虑使用用户公钥和服务器私钥创建的共享密钥,用户收到一次(登录时)密钥,该密钥可用于加密和解密响应和请求数据。

0 投票
1 回答
213 浏览

security - Twilio SMS 端到端加密

是否可以加密发送到 Twilio 的 SMS 消息?例如,如果客户端(比如 iOS 设备)想要向我的 Twilio 应用程序发送一条敏感的 SMS 消息,有没有办法在到达运营商之前在客户端上加密消息,并在消息到达我的后端时解密消息&副 -反之亦然。

目的是防止运营商能够阅读消息。我看到有使用Twilio Programmable Chat 和 Virgil Security的解决方案,但是,它不处理 SMS 用例。

如果不可能,使用 SMS 的最佳解决方法是什么?我开始认为,如果消息是敏感消息,则在任何情况下都不应该使用 SMS。不过希望我是错的。

任何信息都有帮助!非常感谢。

0 投票
1 回答
194 浏览

javascript - 从 window.crpyto.subtle.generateKey 生成助记词

我正在开发和基于网络的端到端加密聊天网站。为此,我使用 web crypto api 中提供的 window.crypto.subtle.generateKey 函数生成私钥。

我希望用户记住或存储一个助记词,就像我们在以太坊钱包中使用的那样,而不是加密密钥。

有没有办法从由 window.crypto.subtle.generateKey 函数生成的私钥生成助记词,或者我应该用其他方法来实现它吗?

提前致谢

0 投票
3 回答
234 浏览

encryption - 端到端加密:公钥和私钥如何不同但又兼容?

既然公钥用来加密消息,私钥用来解密消息,那么私钥和公钥怎么可能兼容呢?绿色钥匙怎么能打开红色锁的门?

这是我的想法:

Hello被公钥加密,变成%/))=. 然后私钥解密消息。但是由于密钥不同,因此生成的消息可能与已发送的消息不同 -&#(($例如。

当然,我知道现实生活中使用的加密/解密算法是不同的,但问题是可以理解的。密钥是如何制作的,使得一个只能加密,另一个只能解密,同时两者都有足够的信息以使它们相互兼容?是处理这个问题的算法吗?

0 投票
0 回答
45 浏览

javascript - AES-GCM 与 Angular 中 Apple 的 CryptoKit 的兼容性

此代码使用 Apple 的 CryptoKit 框架在 iOS 平台中使用带有 AES-GCM 的私钥和公钥生成消息字符串的加密和解密版本。

我怎样才能在 Angular (10) 中做同样的事情?我写了一些代码,但不幸的是我没有从中获得任何成功。这是我在 Angular 中的相同代码。

我收到了这个错误

错误错误:未捕获(承诺):TypeError:crypto_1.generateKeyPair不是函数