问题标签 [shared-secret]
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 - 使用 MSI 连接到 Azure Vault
我正在尝试使用 MSI 从控制台应用程序连接到我的 azure vault
对于这个保险库,我已将我的用户添加为选定原则
,我用来连接的代码是
我得到以下异常
Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException:参数:Connectionstring:[未指定连接字符串],资源:https ://vault.azure.net ,授权
java - EC 客户端和服务器共享密钥不匹配(可能是由于客户端 pub 密钥在生成服务器 shs 时格式不正确)
我正在尝试使用 EC 命名曲线生成共享密钥,并在客户端与服务器共享密钥中发现不匹配。
Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
// 客户
// 服务器
encryption - 如何实现零停机密钥轮换
我在 AWS 中运行了几个微服务,其中一些相互通信,其中一些具有外部客户端或作为外部服务的客户端。
为了实现我的服务,我需要一些秘密(用于签名/验证令牌的 RSA 密钥对、对称密钥、API 密钥等)。我为此使用 AWS SecretsManager,它工作正常,但我现在正在实施对密钥轮换的适当支持,我有一些想法。
- 我正在使用 AWS SecretsManager,定期(约 5 分钟)获取秘密并在本地缓存它们。
- 我正在使用 AWS SecretsManager 的版本阶段功能来根据需要引用 AWSCURRENT 和 AWSPREVIOUS 版本。
假设服务 A 需要服务 B 的密钥 K:
- 假设在开始时,K 具有当前值 K1 和先前值 K0。
- 服务 A 将始终使用(并在本地缓存)K 的 AWSCURRENT 版本与 B 通信,因此在本例中为 K1
- 服务 B 将 AWSCURRENT 和 AWSPREVIOUS 版本保留在其本地缓存中并同时接受 [K1, K0]
- 在轮换 K 时,我首先确保服务 B 使用的密钥被轮换,这样在刷新间隔过去后,服务 B 的所有实例都接受 [K2, K1] 而不是 [K1, K0]。在刷新间隔过去之前,A 的所有实例仍然使用 K1。
- 当刷新间隔过去时,意味着 B 的所有实例都必须获取 K2,我轮换密钥以进行服务,以便 A 将使用 K1 或 K2,直到刷新间隔结束,然后只使用 K2。
- 这样就完成了密钥轮换(但如果认为 K1 被泄露,我们可以再次轮换 B 的密钥以推出 K1 并得到 [K3, K2])。
这是最好的方法还是有其他需要考虑的?
然后,在某些情况下,我有一个在同一服务中使用的对称密钥 J,例如用于加密某些会话的密钥。因此,在对服务 C 的一次请求中,会话使用密钥 J1 加密,然后需要在稍后阶段使用 J1 解密。我有多个 C 服务实例。
这里的问题是,如果相同的秘密用于加密和解密,旋转它会变得更加混乱 - 如果密钥旋转到具有值 J2 并且一个实例已刷新以便它将使用 J2 加密,而另一个实例仍然看不到J2,解密会失败。
我可以在这里看到一些方法:
用不同的轮换方案分成两个秘密,一次轮换一个,类似于上面。这增加了要处理的额外秘密的开销,具有相同的值(除了它们之间有一段时间轮换)
让解密在失败时强制刷新秘密:
- 加密始终使用 AWSCURRENT(J1 或 J2 取决于是否刷新)
- 解密将尝试 AWSCURRENT 然后 AWSPREVIOUS,如果两者都失败(因为使用 J2 和 [J1, J0] 存储的另一个实例的加密)将请求手动刷新密钥(现在存储 [J2, J1]),然后尝试AWSCURRENT 和 AWSPREVIOUS 再次。
在密钥窗口中使用三个密钥并始终使用中间的一个进行加密,因为它应该始终位于所有其他实例的窗口中(除非它被旋转了几次,比刷新间隔快)。这增加了复杂性。
还有哪些其他选择?这似乎是一个标准用例,但我仍然努力寻找最佳方法。
编辑 - - - - - - - - -
根据 JoeB 的回答,到目前为止我提出的算法是这样的:假设最初秘密的当前值为 K1,而 PENDING 值为 null。
普通手术
- 所有服务定期(每 T 秒)查询 SecretsManager
AWSCURRENT
和AWSPENDING
自定义标签ROTATING
并全部接受(如果存在)-> 所有服务接受 [AWSCURRENT
=K1] - 所有客户端都使用
AWSCURRENT
=K1
密钥轮换
- 为 PENDING 阶段设置一个新值 K2
- 等待 T 秒 -> 现在所有服务都接受 [
AWSCURRENT
=K1,AWSPENDING
=K2] - 添加
ROTATING
到 K1 版本 + 移动AWSCURRENT
到 K2 版本 +AWSPENDING
从 K2 中删除标签(似乎没有标签的原子交换)。直到 T 秒过去,一些客户端将使用 K2 和一些 K1,但所有服务都接受两者 - 等待 T 秒 -> 所有服务仍然接受 [
AWSCURRENT
=K2,AWSPENDING
=K1] 并且所有客户端使用AWSCURRENT
=K2 ROTATING
从 K1移除舞台。请注意,K1 仍然有AWSPREVIOUS
舞台。- T 秒后,所有服务将只接受 [
AWSCURRENT
=K2],K1 有效死亡。
这应该适用于单独的秘密和用于加密和解密的对称秘密。
不幸的是,我不知道如何为此使用内置的旋转机制,因为它需要几个步骤,中间有延迟。一个想法是发明一些自定义步骤并让该setSecret
步骤创建一个 CloudWatch cron 事件,该事件将在 T 秒后再次调用该函数,并使用 stepsswapPending
和调用它removePending
。如果 SecretsManager 可以自动支持这一点,那就太棒了,例如通过支持函数返回一个值,指示应该在 T 秒后调用下一步。
javascript - 在 HTML5 SPA 中进行有效负载签名的有效方法
我正在寻求实现一些有效(即具有良好性能)的逻辑,在我们的 Web 应用程序中进行有效负载签名。目标是让 HTML5 客户端保证接收到的有效负载的内容确实是我们后端生成的内容。
我们不想使用共享 salt 生成有效负载哈希,因为用户可以轻松打开 HTML5 源并找到 salt 短语。
我们现在已经实现了 RSA 签名,我们的后端使用其私钥添加有效负载签名,而我们的 HTML5 客户端使用其烘焙的公钥对其进行验证。然而,签名生成过程需要 250 毫秒(对于相对较小的有效负载),并且由于签名请求的性质,这个时间量是不可接受的。
唯一的另一个想法是在每次客户端初始化其与后端的会话时在运行时生成一个共享密钥。然而,这个秘密不能以明文形式发送,所以看起来我们将不得不实现一个 Diffie-Hellman 交换机制,如果可能的话,我们希望避免这种情况,或者使用现有的库实现自动化。
请记住,由于我们销售产品的性质,保密和加密需要在应用层完成。我们不希望加密我们的流量,这是我们的客户可能会或可能不会实施的东西(因为它是一个 Intranet 应用程序)。但是,我们必须避免将与我们的许可检查机制等相关的内容暴露给他们。后端不是基于云的,也不由我们控制,而是安装在客户的机器上,在本地。
前端是 Javascript,后端是 Java。
ios - 无法生成 App 特定的共享密码
in-app purchase
我必须在 ios 应用程序中实现自动更新,并且我有 " app manager
" 权限来访问我客户的app store connect
帐户。当我点击“ app specific shared secret
”时,它不会显示生成它的选项(请使用我评论中的图片链接)。Stackoverflow 要求 10 个上传图片的声誉,所以我在评论中添加了图片链接。
我还尝试了 master shared secret,它向我显示了生成它的选项,但是当我点击生成时,它会返回到 appstoreconnect 主屏幕。当我再次打开“ master shared secret
”查看代码时,它仍然没有显示任何代码。
我试过以下
- 我的客户的付费和免费应用程序合同有效并且他们的状态是有效的,
- 我的客户填写了税务信息、银行信息和联系信息。
- 我创建了 4 个包含完整元数据和评论信息的应用内购买。他们准备提交
- 我还提交了一个带有应用内购买的二进制文件并拒绝了它。所以应用内购买的当前状态是“
waiting for review
”。 - 在合同生效并且税务信息与银行信息一起提交后,我已经等待了 2-3 天。6 多次尝试生成共享密钥。
但它仍然无法正常工作。我不知道出了什么问题。
我是否需要“管理员”权限而不是“应用程序管理器”来生成共享密钥?
我是否需要等到应用内购买的当前状态变为“已批准”?如果状态不是“已批准”,我不能生成共享密钥吗?
这是我认为可能导致此问题的唯一两件事。如果还有其他可能的原因,请告诉我。
任何帮助表示赞赏。
提前致谢。
ios - 在哪里可以找到 iOS App Store 收据验证的共享密钥?
我不知道在哪里可以找到验证常规应用内购买所需的共享秘密。
大约一年前,我创建了一个服务器脚本,从我的 iOS 应用程序调用它来验证 Apple.../verifyReceipt
端点的 App Store 收据。
这在去年工作得很好,现在我想扩展脚本来为第二个应用程序做同样的事情。
问题:我不记得在哪里可以找到必须与收据一起发送给 Apple的应用程序共享机密。
第一个应用程序(“MyApp”)的秘密存储在脚本中。但我无法在 App Store Connect 中重新找到它。
- 登录 App Store Connect
- 转到“我的应用程序/我的应用程序/功能”
- 单击“应用内购买”列表上方的“应用特定共享密钥”链接。
这显示了信息,即 MyApp 没有特定于应用程序的共享密钥,而只有一个主共享密钥。我可以显示主共享密钥,但它与验证脚本中存储的不同。
此外,信息文本说,应用程序特定的共享密钥用于验证自动更新订阅。与消耗性或非消耗性 IAP 无关。
因此,我假设这不是我正在寻找的共享秘密。但是我还能在哪里找到正确的共享秘密(已经存储在我的脚本中的那个?)
我在哪里可以找到我的新应用程序的秘密?
ios13 - SecKeyCopyKeyExchangeResult 在 iOS 13.0 中不起作用
SecKeyCopyKeyExchangeResult
无论提供什么参数,调用都会引发下一个错误。它在 iOS 13.0 上运行良好。
缺少 kSecKeyKeyExchangeParameterRequestedSize
我的代码:
参数数据:
错误:
identityserver4 - 如何为 IdentityServer4 创建共享密钥?
我见过的所有文档和示例都使用 C# 代码来生成密钥,如下所示:
这对于初始设置并在启动时插入数据库来说很好,但是如果我想在运行时直接向数据库添加秘密怎么办。最好我想向不涉及任何代码的客户提供说明。
我尝试使用在线工具对字符串进行哈希处理,然后对字符串进行 Base64 编码,但它与代码生成的内容不匹配,所以我认为我错过了一步。
c# - NSec.Cryptography 使用 ChaCha20Poly1305 和 SharedSecret 加密和解密
我正在尝试使用 NSec.Cryptography 加密(和解密)从一台设备发送到另一台设备的消息,但我发现文档有点含糊。据我了解,我分别需要设备 A 和 B 的 aKey
和PublicKey
。我可以把这些变成SharedSecret
:
但是,此共享密钥似乎对加密没有用处,因为该Encrypt(...)
方法要求在其参数中输入密钥:
我有多个问题:
- SharedSecret 不能用来加密有什么用?
- 如果该
ChaCha20Poly1305.Encrypt
方法使用一个不能作为共享密钥的密钥,该方法有何用处? - 如何使用 A 的私钥和 B 的公钥加密消息(如 libsodium 中的盒子和秘密盒子)?
注意:我想使用 X25519 键。
gitignore - VS 2019 中的 C# .NET Framework 4.7.2 - 保留我的 clientID 和客户端机密/gitignore/Key Vault
我是#C 的新手,因此请原谅我的问题,这对您来说可能很容易。我试图让我的 clientID、clientSecret 和tenantID 脱离主源代码控制,但我完全不知道该怎么做。我在 Visual Studio 中看到了一些用于 .NET Core 和 Connected Services 的方法,但这对于 .NET Framework 4.7.2 并不真正可用。我对设置配置文件也没有信心。我在 Azure 门户上创建了一个资源组,但我不确定如何让这个密钥保管库工作。
下面的代码表示获取令牌的工作代码,我遇到的问题是隐藏那些硬编码的字符串。
非常感谢您的回答