问题标签 [encryption-symmetric]

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 投票
1 回答
1474 浏览

encryption - Base64 编码输出不同于 as3crypto 和 pycrypto 加密库

我正在尝试使用对称加密将数据从 actionscript 3(客户端)传递到 python(服务器)。

我使用的库是 as3crypto 和 pycrypto,我不确定我是否正确使用了这些库。

动作脚本 3:

这是上述函数的 base64 编码输出。

xvVqLzV5TU4=

现在,使用 pycrypto 库中的相同密钥、初始化向量和算法会给我不同的输出。

Python:

I82NQEkSHhE=

我很确定我在加密过程中做错了,因为我可以在两个库上对“testtest”进行base64编码并接收相同的输出。

动作脚本 3:

产量...

dGVzdHRlc3Q=

Python:

产量

dGVzdHRlc3Q=

有人可以在python或actionscript中使用相同的IV加密和base64encode相同的字符串,所以我知道哪个库实际上产生了正确的输出?

0 投票
5 回答
1044 浏览

security - 安全性:这种身份验证/加密方案有多脆弱?

我有一个客户端-服务器游戏,客户端连接到服务器并在游戏期间保持连接(大约 5-60 分钟)。

我希望新客户能够安全地注册,并允许现有客户进行身份验证,而不必担心登录凭据被暴露。

问题是,出于性能原因,最好在游戏会话中坚持使用简单且廉价的加密,如 RC4,但对称密钥并不容易确保注册过程的安全。

由于无论如何我都想保留一个单独的登录服务器,所以我的想法是这样的:

  1. 客户端使用凭据(或注册信息)向登录服务器发送 HTTPS 请求
  2. 登录服务器收集用户信息,并生成临时 RC4 会话加密密钥
  3. 用户信息 + RC4 会话 + 时间戳 + 摘要(我可以依靠两个服务器在时间上同步)与秘密对称密钥,在游戏服务器和登录服务器之间共享。
  4. 打包后的数据 + RC4 会话加密密钥 + 游戏服务器的 ip 地址作为对 HTTPS 请求的回复发送给客户端。
  5. 客户端打开与游戏服务器的连接,发送初始未加密的 hello 消息,并将加密的用户信息作为有效负载。
  6. 游戏服务器解包(3)中打包的数据。它现在知道用户和它应该使用的 RC4 加密密钥。
  7. 如果时间戳指示登录凭据已过期,则会向客户端返回错误(然后客户端将检索新信息)。如果无法使用摘要验证解密的用户数据,则会返回不同的错误。
  8. 如果一切正常,服务器会发送一个未加密的 LOGIN_OK,然后开始 RC4 加密通信。

可能的安全问题:

  • 游戏服务器 100% 信任它解密的用户信息。这使得服务器完全解耦,这很好,但如果密钥被泄露,用户可以完全伪造他们的用户信息。这可以通过轮换这些键得到一定程度的缓解,这样每天或每个月都有一个新的键。游戏和登录服务器都可以从管理其密钥的第三个服务器获取此信息。这可能是矫枉过正,因为:a)如果在服务器上暴露源代码的闯入情况下,可以使用新密钥重新启动它们 b)足够好的密钥+加密应该使蛮力攻击变得困难(关于算法的建议?)

  • RC4 不是最安全的算法,但我确保丢弃前 512 个字节左右,并且每个密钥仅在有限的时间内有效,例如 24 小时。

  • 从我所见,似乎不受中间人的影响:SSL 保护 RC4 会话密钥,在 (5) 中,发送到游戏服务器的 RC4 会话密钥也被加密。唯一可能的是 DoS 并导致用户再次请求密钥。如果(2)中的数据被缓存到过期,这不应该创建一个新的数据包。

  • (3)中的加密可以通过向密钥添加随机位来改进。这些随机位与加密数据包一起发送,并在(5)中呈现给游戏服务器。在 (6) 中,游戏服务器将这些随机位添加到他的密钥中,并使用结果来解密数据。这样,攻击者就无法看到打包数据何时发生变化。

我在这里忽略了任何漏洞吗?

创建的有效负载摘要:

  • 客户端登录凭据(受 SSL 保护),发送到登录服务器
  • 用户信息 + 时间戳 + 临时游戏服务器会话密钥 + 由登录服务器使用与游戏服务器共享的密钥加密的摘要,提供给客户端 - 无需修改它 - 将其传递给游戏服务器。应该是耐回火的,因为:a)客户端不知道密钥 b)具有时间戳以避免重新发送相同的数据 c)用于验证内容是否正确加密的摘要
  • 登录服务器向客户端发送的临时游戏服务器会话密钥以及加密的有效负载。受 SSL 保护。
  • 客户端游戏服务器登录包,由登录服务器接收到的加密包组成。

加密密钥摘要:

  • 临时游戏服务器会话密钥:由登录服务器随机生成,用于加密游戏服务器<->客户端通信。由登录服务器生成,提供给客户端和游戏服务器。
  • 秘密用户信息加密密钥。在游戏服务器和登录服务器之间共享,用于将用户信息传递给游戏服务器,客户端作为信使。客户端不拥有此密钥。
0 投票
2 回答
1409 浏览

java - 在 Java 中使用对称加密保护磁盘上的私钥

我有一个分布式应用程序,它从中央服务器轮询命令,这些命令的内容由私钥“签名”,公钥与每个远程站点的应用程序一起部署。每个命令都使用私钥签名,并且在执行命令之前验证该签名。

这是我在 java 中生成公钥/私钥对的方法。(我意识到,我们应该做的不仅仅是 1024)

新的要求是,除了发送简单的相对安全的命令外,我们现在还想发送命令来指示我们的软件下载并执行安装程序以自我更新。如果没有正确完成,这有可能会打开一个大洞。“执行更新安装程序”命令将像往常一样被签名,并且还将包括将下载并运行的可执行文件的 md5。因此,命令上的签名必须正确(并且将包括 md5),然后在下载文件上计算出的 md5 需要正确,然后才会执行。这应该可以解决我能想到的大多数攻击向量。还有其他我应该关心的吗?

因此,现在我将注意力集中在保护这些命令源自的服务器上的私钥上。如果获得了该私钥,则游戏结束。我应该如何保护磁盘上的密钥?

我的想法是使用带有密码的对称加密来保护该私钥。

我目前的解决方案如下:

(为清楚起见,删除了例外)

这基本上是随机生成一个盐,使用密码来提供密钥,然后将生成的盐、IV 和密文存储在一个文件中以供解密。

但是,我觉得这里缺少一些东西。就像我还应该以某种方式在密钥上包含某种类型的 MAC,以便我知道我得到了有效的描述?也许只是将 5 或 6 个字节的已知文本放在私钥之前很简单?现在一个错误的密码短语只会导致错误的填充异常,但我读到这可能并非总是如此,一些错误的密码短语会解码并导致垃圾邮件。我觉得我需要警惕这一点。

有人可以让我知道我是否在正确的轨道上并提供一些反馈。重要的是我要尽可能安全..

0 投票
1 回答
1304 浏览

c# - How should I derive the key and initialization vector for my AES encrypted database entries?

I've built a CMS system to allow users to create and manage online forms on my client's intranet app.

Of course some of the data handled by the forms may need to be encrypted e.g. if the system is used to build a form that handles salary specifics or whatever. So I'm using the AESManaged class to symmetrically encrypt this sort of data prior to it going into our application db.

All is fine, but now, prior to release, I could do with a steer regarding the shared secret and salt.

My original idea was to make a (dynamic) shared secret by combining the (GUID-based) ID of the Form containing the encrypted field with the (again, GUID-based) id of the Question the field is the answer to:

My Salt is currently generated the same way, only with the order of Guids reversed ie.

I'm new to this stuff so not sure if this a sensible strategy or if I should be doing it some other way?

0 投票
1 回答
647 浏览

c - 在 C 中使用 EquivalentInverseCipher 进行 AES 加密/解密

我正在用 AES 做项目。有没有人在等效逆密码中工作过?我正在研究其中的基本概念以及如何在 C 中实现。

0 投票
1 回答
518 浏览

.net - .NET:在客户端应用程序上加密敏感数据的最佳实践?

我需要在客户端 .NET 应用程序(Outlook 插件)上安全地存储用户/密码对。

加密需要是可逆的,我很高兴避免在我的代码中存储加密密钥,因为它很容易通过反汇编。

事实上,我想访问一个类似EFS的 API 来将加密委托给 Windows。

关于这个问题的任何提示?

0 投票
2 回答
344 浏览

c# - 哪种加密方法适合加密单个单词以及整个文档?

我需要将多个文档保存到云端,并且需要保存文档、文档元数据和用于搜索的单词/短语。

我的计划是使用对称密码来加密整个文档,但我不确定散列每个单词的正确方法。我想要一些安全的东西,但我不想不必要地增加每个单词中的字符数。

哪种实现最适合对文档进行对称加密,以及在不使其比所需大小大很多倍的情况下散列单词或短语的最佳方法是什么?

0 投票
3 回答
2545 浏览

saml - 您可以对 SAML 2.0 中的 SAML 属性进行对称加密吗?

您可以对 SAML 2.0 中的 SAML 属性进行对称加密吗?我们似乎可以做不对称。有什么优点和缺点?

0 投票
1 回答
3006 浏览

.net - 使用 Rfc2898DeriveBytes 类获取 Key 和 IV

我刚刚开始熟悉加密和 .NET 框架。在查看了许多示例后,我发现使用 .NET Class 时会出现重复的模式Rfc2898DeriveBytes。当使用此类获取加密密钥和初始化向量时,似乎使用了相同的方法。

这是来自MSDN 博客的一些代码,演示了如何获取密钥和初始化向量。

我在其他地方也看到过这个。我想我会认为它会是这样的......

我一定在这里遗漏了一些东西。如果密钥和初始化向量 (IV) 只是随机数,那么在使用正确的密码和盐时如何再次获得它们?

0 投票
2 回答
516 浏览

.net - 仅带密码的加密示例......没有盐。它有效吗?

我一直在对创建用于 .NET 应用程序的加密/解密类进行一些研究。我一次又一次地读到除了密码之外还需要一个盐。今天我遇到了一种只使用一个密码的加密/解密方法。此代码使用的加密方法是否有问题,因为它似乎没有使用盐?