使用Rutoken技术在系统中注册和授权用户的经验(第1部分)

下午好我想分享我在这个话题上的经验。

Rutoken是身份验证、信息安全和电子签名领域的硬件和软件解决方案。 本质上,这是一个闪存驱动器,可以存储用户用于登录系统的身份验证数据。

本例中使用Rutoken EDS 2.0。

要使用此 Rutoken,您需要 在 Windows 上安装驱动程序.

对于 Windows,仅安装一个驱动程序可确保安装所需的所有内容,以便操作系统可以看到您的 Rutoken 并可以使用它。

您可以通过多种方式与 Rutoken 互动。 您可以从应用程序的服务器端或直接从客户端访问它。 此示例将着眼于从应用程序的客户端与 Rutoken 进行交互。

应用程序的客户端部分通过 rutoken 插件与 rutoken 进行交互。 这是一个单独安装在每个浏览器上的程序。 对于 Windows,您只需下载并安装插件, 位于此链接.

就是这样,现在我们可以从应用程序的客户端与 Rutoken 进行交互。

本示例讨论使用挑战-响应方案在系统中实现用户授权算法的想法。

这个想法的本质如下:

  1. 客户端向服务器发送授权请求。
  2. 服务器通过发送随机字符串来响应来自客户端的请求。
  3. 客户端用随机 32 位填充该字符串。
  4. 客户端使用其证书对接收到的字符串进行签名。
  5. 客户端将收到的加密消息发送到服务器。
  6. 服务器通过接收原始未加密消息来验证签名。
  7. 服务器从收到的未加密消息中去除最后 32 位。
  8. 服务器将收到的结果与请求授权时发送的消息进行比较。
  9. 如果消息相同,则认为授权成功。

上面的算法中有一个证书这样的东西。 对于这个例子,您需要了解一些密码学理论。 在哈布雷上有 关于这个主题的好文章.

在本例中,我们将使用非对称加密算法。 要实现非对称算法,您必须拥有密钥对和证书。

密钥对由两部分组成:私钥和公钥。 私钥,顾名思义,必须是秘密的。 我们用它来解密信息。 公钥可以分发给任何人。 该密钥用于加密数据。 因此,任何用户都可以使用公钥加密数据,但只有私钥的所有者才能解密该信息。

证书是一种电子文档,其中包含有关拥有该证书的用户的信息以及公钥。 有了证书,用户可以对任何数据进行签名并将其发送到服务器,服务器可以验证签名并解密数据。

为了使用证书正确签署消息,您需要正确创建它。 为此,首先在 Rutoken 上创建密钥对,然后必须将证书链接到该密钥对的公钥。 证书必须具有位于 Rutoken 上的公钥,这一点很重要。 如果我们只是立即在应用程序的客户端创建密钥对和证书,那么服务器如何解密此加密消息呢? 毕竟,他对密钥对或证书一无所知。

如果您深入研究这个主题,您可以在互联网上找到有趣的信息。 我们显然信任某些认证机构。 这些证书颁发机构可以向用户颁发证书;他们将这些证书安装在其服务器上。 此后,当客户端访问该服务器时,他会看到这个证书,并且看到它是由证书颁发机构颁发的,这意味着该服务器是可以信任的。 互联网上还有大量有关如何正确设置所有内容的信息。 例如,你可以从这个开始.

如果我们回到我们的问题,解决方案似乎是显而易见的。 您需要以某种方式创建自己的认证中心。 但在此之前,你需要弄清楚认证中心应该根据什么给用户颁发证书,因为他对此一无所知。 (例如,他的名字、姓氏等)有一种叫做证书请求的东西。 有关此标准的更多信息可以在例如维基百科上找到 ru.wikipedia.org/wiki/PKCS
我们将使用版本 1.7 - PKCS#10。

让我们描述一下Rutoken上生成证书的算法(原始来源: 文件):

  1. 我们在客户端创建密钥对并将其保存在 Rutoken 上。 (自动保存)
  2. 我们在客户端上创建一个证书请求。
  3. 我们从客户端将此请求发送到服务器。
  4. 当我们在服务器上收到证书请求时,我们会从证书颁发机构颁发证书。
  5. 我们将此证书发送给客户。
  6. 我们将 Rutoken 证书保存在客户端上。
  7. 证书必须绑定到第一步中创建的密钥对。

现在很清楚服务器如何解密客户端的签名,因为它自己向客户端颁发了证书。

在下一部分中,我们将仔细研究如何基于成熟的开源加密库 openSSL 设置证书颁发机构。

来源: habr.com

添加评论