我正在使用 sveltekit 构建一个应用程序,并且我决定实现密钥作为一种身份验证形式。
因此,我开始研究它们,发现它们的基础是非对称密钥对的概念(仅客户端签名的private密钥,以及存储在服务器上用于验证密钥的public密钥) “挑战”)。
我对私钥感兴趣,因为我想用它来加密其他一些数据并在客户端上进行一些实验。不过网上查了一下,问了Claude AI,好像是不可能拿到私钥的……
因此,正如我提到的,我的 Web 应用程序是在 SvelteKit 中构建的,而且我使用
simplewebauthn/server
和 simplewebauthn/browser
在我的应用程序中实现密钥身份验证。那么,在调用 await startRegistration(options)
或 await startAuthentication(options)
后,有什么方法可以将私钥作为内存变量进行访问吗?
这是我想要使用的代码(注册示例):
async function handlePasskeyRegistration() {
const optionsResponse = await fetch(endpoint,init);
const options = (await optionsResponse.json()).options
const result = await startRegistration(options)
const privateKey = somehowGetPrivateKey()
console.log(privateKey)
}
正如其名称所示,密钥的私钥是私有的,依赖方无法访问。
WebAuthn 是用于验证用户身份的 API。尽管有一些建议添加此功能,但当前无法使用原始签名。对于某些加密用例,您可以使用 PRF 扩展导出秘密,但请记住,这是脆弱的,如果用户删除密钥,可能会产生很大的爆炸半径。