为啥 RSA 签名通常不用于 RESTful api?

Posted

技术标签:

【中文标题】为啥 RSA 签名通常不用于 RESTful api?【英文标题】:Why isn't RSA signing usually used in RESTful apis?为什么 RSA 签名通常不用于 RESTful api? 【发布时间】:2014-05-20 02:17:21 【问题描述】:

我开发了一个简单的应用程序,它不使用(至少一开始)任何第三方授权。我想创建一个 RESTful api 供 ios/android/任何客户端使用,所以我阅读了一堆有关 RESTful API 实现的信息。然而,实现它们的常用方法包括发送某种用于签署请求的安全“令牌”;这使得 API 容易受到中间人攻击,推荐的应对方法是使用 HTTPS。

但是,阅读所有这些内容让我想知道,为什么不使用私钥/公钥签名(如 RSA)来进行此操作。这样,客户端会根据密码生成私钥和公钥,在注册时发送公钥并将私钥保存在客户端,即使有人掌握了服务器和客户端之间的所有通信,他仍然不会不能冒充客户。

但是我对密码学和安全性几乎一无所知,所以我想不到为什么不使用这种方法,对吧?

【问题讨论】:

【参考方案1】:

目前不存在允许从密码导出非对称密钥对的方案。

另一个问题是公钥注册。进行身份验证存在问题,因为任何人都可以拥有非对称密钥对,因此必须提供一些附加信息。 公钥证书可以是这样的信息,但是,这要求客户端是一些公钥基础设施的用户。在实践中使用的另一个选项是预先将客户端公钥/证书提供给服务器。

最后,TLS (HTTPS) 已经在使用非对称密钥来执行身份验证和交换会话密钥。客户端验证服务器的公钥证书(服务器身份验证),服务器可以选择对客户端的公钥证书(客户端身份验证)进行相同的操作。

【讨论】:

以上是关于为啥 RSA 签名通常不用于 RESTful api?的主要内容,如果未能解决你的问题,请参考以下文章

使用RSA算法对接口参数签名及验签

ssl证书的加密算法?

RSA加密算法

接口测试加解密与多环境测试

RSA加密、解密、签名、验签的原理及方法

RSA非对称加密,私钥用于签名公钥用于验签;公钥用于加密私钥用于解密