C x25519使用OpenSSL生成和验证曲线密钥

C x25519使用OpenSSL生成和验证曲线密钥,c,openssl,elliptic-curve,C,Openssl,Elliptic Curve,我正在使用C中的OpenSSL来编写客户端和服务器,它们必须相互验证密钥。我想使用x25519曲线进行密钥交换,密钥交换需要经过身份验证 我知道EVP接口提供了这样的功能,但我在某处找不到任何示例(有一定程度的冗长) 如何使用OpenSSL执行x25519曲线密钥生成和身份验证;我如何进行交换?任何形式的帮助都将不胜感激 x25519用于密钥交换,而不是身份验证。要进行身份验证,您还需要使用其他东西。那么你实际上想做什么:密钥交换;认证;或者密钥交换和身份验证?我正在编写一个客户端和一个服务器,

我正在使用C中的OpenSSL来编写客户端和服务器,它们必须相互验证密钥。我想使用x25519曲线进行密钥交换,密钥交换需要经过身份验证

我知道EVP接口提供了这样的功能,但我在某处找不到任何示例(有一定程度的冗长)


如何使用OpenSSL执行x25519曲线密钥生成和身份验证;我如何进行交换?任何形式的帮助都将不胜感激

x25519用于密钥交换,而不是身份验证。要进行身份验证,您还需要使用其他东西。那么你实际上想做什么:密钥交换;认证;或者密钥交换和身份验证?我正在编写一个客户端和一个服务器,它将使用带有x25519曲线的临时密钥。客户端或服务器应该生成一个共享秘密,以便当双方中的一方发送有效负载时,另一方应该验证发送方的身份。我在这方面有什么问题吗?密钥交换(即生成共享秘密)和身份验证这两个概念是完全不同的。X25519专门涉及共享秘密的生成。每一方产生一个公共价值和一个私人价值。它们交换公共值,然后使用自己的私有值和来自对等方的公共值,它们中的每一个都可以生成一个窃听者无法计算的共享秘密。这并不以任何方式提供身份验证,使一方能够验证另一方的身份。仅使用X25519,您就知道您可以安全地与某人通信,但无法与此人通信。要对它们进行身份验证,您需要将其与ECDSA、RSA或Ed25519(尽管OpenSSL目前不支持后一种机制——下一个版本将支持这种机制)相结合。如果我理解正确,那么在导出共享密钥后,双方都可以使用它进行通信,但消息交换不安全(?)。ECDSA、RSA或Ed25519对消息进行加密以提供前向保密性。x25519用于密钥交换,而不是身份验证。要进行身份验证,您还需要使用其他东西。那么你实际上想做什么:密钥交换;认证;或者密钥交换和身份验证?我正在编写一个客户端和一个服务器,它将使用带有x25519曲线的临时密钥。客户端或服务器应该生成一个共享秘密,以便当双方中的一方发送有效负载时,另一方应该验证发送方的身份。我在这方面有什么问题吗?密钥交换(即生成共享秘密)和身份验证这两个概念是完全不同的。X25519专门涉及共享秘密的生成。每一方产生一个公共价值和一个私人价值。它们交换公共值,然后使用自己的私有值和来自对等方的公共值,它们中的每一个都可以生成一个窃听者无法计算的共享秘密。这并不以任何方式提供身份验证,使一方能够验证另一方的身份。仅使用X25519,您就知道您可以安全地与某人通信,但无法与此人通信。要对它们进行身份验证,您需要将其与ECDSA、RSA或Ed25519(尽管OpenSSL目前不支持后一种机制——下一个版本将支持这种机制)相结合。如果我理解正确,那么在导出共享密钥后,双方都可以使用它进行通信,但消息交换不安全(?)。ECDSA、RSA或Ed25519对消息进行加密以提供转发保密性。