问题标签 [nacl-cryptography]
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.
c++ - 为什么 NaCL Crypto Library 源代码会引用代码中没有的头文件?
我正在查看 NaCL Crytpo 库的代码,尽管我几乎没有使用 C 和 C++ 的经验。在某些 .cpp 文件中,有对源代码中没有的头文件的引用。例如,在wrapper-box.cpp
它有#include "crypto_box.h"
但crypto_box.h
无处可寻。
为什么会这样?库如何在引用损坏的情况下正常运行?
cryptography - 为不同的收件人重复使用随机数?
我正在生成一个新的随机对称密钥,并希望将其传递给使用crypto_box_easy
. 可以为相同的消息和相同的发件人但为不同的收件人重复使用相同的(随机)随机数吗?可以将相同的随机数用于具有随机密钥和的对称加密crypto_secretbox_easy
吗?
由于 nonce 必须与加密消息一起提供,它无论如何都不能被隐藏,但是在多个不同的接收者之间重复使用是个问题吗?如果他们提供了一个生成错误的公钥,那是否会以一种可以提取其他人的密钥的方式削弱加密?
非常感谢。
python - 我可以将 pyNaCl 密封盒与现有的 openssh 密钥对一起使用吗?
我正在尝试使用 PyNacl 进行非对称加密(公共和私有 ssh 密钥对)以安全地传输数据。
我正在使用 ssh-keygen -t ed25519 以 openssh 格式生成的现有密钥对。(下面我的代码的更多细节)
问题基本上是,以前有没有人成功地做到过这一点,以及如何做到的?
在提取出我相当有信心的是带有一个名为 openssh 密钥解析器的库的密钥。(64 个字节,32 个私有然后 32 个公共)
我使用公钥创建一个密封的盒子来进行加密
据我所知,这按预期工作。我的问题是当我尝试使用私钥创建一个将解密消息的密封盒时。
我戳了一下,发现当我这样做的时候
为了创建将由 SealedBox 使用的 PrivateKey 对象,nacl 生成一个公钥(server_privk.public_key 属性),它与我知道正确并在第一个 SealedBox 中使用的公钥不匹配。
我尝试将 server_privk.public_key 重新分配给我用来制作第一个盒子的同一密钥,但这给了我同样的问题。
我目前的想法是:
- 我不知何故遗漏了有关 openssh 格式如何工作的一些东西(可能没有得到正确的私钥字节,也许我必须对它们进行转换,也许 openssh 密钥解析器库把事情搞砸了)。
- 我不应该使用 openssh,而是转换我的密钥格式,也许使用另一个库来处理加密。
任何答案或想法将不胜感激:)
参考:openssh 解析器:https ://github.com/scottcwang/openssh_key_parser pyNaCl:https ://pynacl.readthedocs.io/en/latest/public/
python - 将 PyNaCl 导入 Lambda 函数 - 没有名为“_cffi_backend”的模块
我能够将我的 PyNaCl 库作为一个层添加到 Lambda(Python 3.8)中,但是由于某种原因,当我尝试测试代码时出现错误
“errorMessage”:“无法导入模块'lambda_function':没有名为'_cffi_backend'的模块”,“errorType”:“Runtime.ImportModuleError”
现在,当我在本地使用 PyCharm 并将 PyNaCl 库安装到 venv 中时,我没有执行错误。Lambda 是否要求文件层次结构不同?我将库压缩为 /lib/python3.8/site-packages,其中包含的唯一库是 PyNaCl
javascript - 我在后端使用 PyNacl 进行数字签名。我应该在前端使用哪个库?
我创建了一个 API,它在后端基于 PyNacl 验证数据。我为我的简单 Crypto API 接受长度为 64 的十六进制编码的发件人和收件人帐号,并基于 PyNacl 库验证签名。我想知道在我的前端使用什么 Javascript 库,以便我使用基于 React 发送的数据与我的后端 API 保持一致。我查看了tweetnacl,但不确定它们是否具有相同的工作模式。你能给我一些关于我是否可以使用 tweetnacl 的信息,还是我必须创建一个使用 PyNacl 生成签名密钥/验证密钥并签署消息的 python 脚本?
谢谢。
javascript - 使用 libsodium 加密,需要使用 crypto_box_keypair 生成公钥和私钥
我一直在使用 libsodium 库来实现 Shamir 秘密共享并尝试测试由暗水晶完成的实现
https://gitlab.com/dark-crystal-javascript/key-backup-crypto/-/blob/master/example.js
实现是这样的
下面是 Secret-sharing-generation.js
现在的问题是,当我使用encryptionKeypair
函数为其生成密钥对时,然后当我尝试crypto_sign_ed25519_sk_to_curve25519
使用此encryptionKeypair
函数中生成的密钥对生成时,我得到了
UnhandledPromiseRejectionWarning: Error: ENOMEM, Cannot allocate memory
我检查了我的交换空间它是完全免费的
我无法理解问题所在。
public-key-encryption - 如何使用 NaCl/Sodium 原语隐藏发件人的公钥?
我想crypto_box_*
使用公钥加密来进行经过身份验证的消息加密。但是,在解密过程中,该功能需要我预先提供公钥。我不想在明文的加密消息旁边包含公钥或任何其他相关因子。理想情况下,发件人的公钥将嵌入到消息中,并在内容被解密后进行检查。这可行吗?还是有任何问题/这种方法是否不明智?
java - 加密库的 Java 实现不适用于 Android
我正在寻找基于 Java 中椭圆曲线的密码算法的实现,用于 Android 项目。我找到了这个回购。
我写了一个简短的代码只是为了测试并在https://replit.com上运行它,它工作正常。但是我在 Android 中使用了相同的代码,它抛出了一个异常。
Java 代码
安卓
我收到此错误
security - 假设我们没有 SSL,如何保护有效负载?
假设我希望 Bob 能够通过curl -X POST http://$DOMAIN/...
类型端点使用她的公钥向 Alice 发送消息。有使用“nacl”和step-cli的这个用例的分步说明step crypto nacl box
,但是我很困惑如何在 NodeJS / Express 应用程序中实际使用来实现这一点。
流行的node-jose包没有提到“nacl”又名盐。
我应该改用 JSON Web 加密 (JWE) 吗?
加密消息的内容类型是什么?
似乎没有来自https://github.com/cisco/node-jose#keys-used-for-encrypting-and-decrypting如何在“Bob”和“Alice”之间使用 Web http 执行此操作的超级清晰示例”。即在哪里获取公钥?是http://$DOMAIN/.well-known/keys
吗?