IKEv2使用RSA-PSS签名

RSA-PSS全称为:RSA Probabilistic Signature Scheme,在IKEv2协议的报文交互中,Authentication载荷可携带由RSA-PSS算法签名的验证数据。以下根据strongswan代码中的testing/tests/swanctl/rw-cert-pss/中的测试环境,来看基于X.509证书的RSA-PSS签名配置和认证流程。拓扑结构如下:

在这里插入图片描述

拓扑图中使用到的设备包括:虚拟主机carol和dave,以及虚拟网关moon。

虚拟主机配置

carol主机的配置文件:/etc/swanctl/swanctl.conf,内容如下。其中home连接中的本地local段配置中auth设置了rsa/pss-sha512的值。

connections {

   home {
      local_addrs  = 192.168.0.100
      remote_addrs = 192.168.0.1

      local {
         auth = rsa/pss-sha512
         certs = carolCert.pem
         id = carol@strongswan.org
      }
      remote {
         auth = pubkey
         id = moon.strongswan.org
      }
      children {
         home {
            remote_ts = 10.1.0.0/16

            updown = /usr/local/libexec/ipsec/_updown iptables
            esp_proposals = aes128gcm128-x25519
         }
      }
      version = 2
      proposals = aes128-sha256-x25519
   }
}

secrets {

   rsa-carol {
      file = carolKey.pem
      secret = "nH5ZQEWtku0RJEZ6"
   }
}

dave主机的配置与carol基本相同,区别在于dave的验证数据使用rsa/pss-sha384签名算法,不同于carol使用的sha512哈希算法,这里使用sha384哈希算法。

connections {

   home {
      local_addrs  = 192.168.0.200
      remote_addrs = 192.168.0.1

      local {
         auth = rsa/pss-sha384
         certs = daveCert.pem
         id = dave@strongswan.org
      }
      remote {
         auth = pubkey
         id = moon.strongswan.org
      }
      children {
         home {
            remote_ts = 10.1.0.0/16

            updown = /usr/local/libexec/ipsec/_updown iptables
            esp_proposals = aes128gcm128-x25519
         }
      }
      version = 2
      proposals = aes128-sha256-x25519
   }
}

网关配置

moon网关的配置文件:/etc/swanctl/swanctl.conf,内容如下。配置使用pubkey认证。

connections {

   rw {
      local_addrs  = 192.168.0.1

      local {
         auth = pubkey
         certs = moonCert.pem
         id = moon.strongswan.org
      }
      remote {
         auth = pubkey
      }
      children {
         net {
            local_ts  = 10.1.0.0/16

            updown = /usr/local/libexec/ipsec/_updown iptables
            esp_proposals = aes128gcm128-x25519
         }
      }
      version = 2
      proposals = aes128-sha256-x25519
   }
}

moon网关的配置文件:/etc/strongwan.conf,内容如下,字段rsa_pass设定为yes,表明使用RSA-PSS填充算法(PKCS #1 v2.1),而不是默认的RSA-PKCS #1 v1.5。前者比后者在数理上更具安全性,但是后者也是安全的。

swanctl {
  load = pem pkcs1 x509 revocation constraints pubkey openssl random
}

charon-systemd {
  load = random nonce sha1 sha2 mgf1 aes hmac pem pkcs1 x509 revocation constraints pubkey curve25519 gmp curl kernel-netlink socket-default updown vici

  rsa_pss = yes
}

连接建立流程

操作流程如下,首先在两个虚拟主机carol和dave上,以及网关moon上启动strongswan进程。再者,在carol和dave上创建名称为home的子连接。

moon::systemctl start strongswan
carol::systemctl start strongswan
dave::systemctl start strongswan
moon::expect-connection rw
carol::expect-connection home
carol::swanctl --initiate --child home 2> /dev/null
dave::expect-connection home
dave::swanctl --initiate --child home 2> /dev/null

接下来,查看以下carol主机上strongswan进程的日志信息,可见carol自身使用的验证算法:RSA_EMSA_PSS_SHA2_512_SALT_64,以及网关moon使用的验证算法:RSA_EMSA_PSS_SHA2_256_SALT_32。

carol charon-systemd: 10[IKE] authentication of 'carol@strongswan.org' (myself) with RSA_EMSA_PSS_SHA2_512_SALT_64 successful
carol charon-systemd: 15[IKE] authentication of 'moon.strongswan.org' with RSA_EMSA_PSS_SHA2_256_SALT_32 successful

在看一下dave主机上strongswan进程的日志信息,与以上介绍的配置相同,dave使用了RSA-EMSA-PSS验证算法,其中采用SHA384哈希算法;而moon网关选择了SHA256算法。

dave charon-systemd: 08[IKE] authentication of 'dave@strongswan.org' (myself) with RSA_EMSA_PSS_SHA2_384_SALT_48 successful
dave charon-systemd: 16[IKE] authentication of 'moon.strongswan.org' with RSA_EMSA_PSS_SHA2_256_SALT_32 successful

在carol建立连接的初始IKE_SA_INIT请求报文中,SIGNATURE_HASH_ALGORITHMS载荷指定了本端可接受的签名哈希算法,包括:SHA2-256、SHA2-384、SHA2-512和Identity。在moon回复的IKE_SA_INIT请求报文中,具有相同的SIGNATURE_HASH_ALGORITHMS载荷。如下图所示:

在这里插入图片描述

以下为carol在IKE_AUTH请求报文中携带的Authentication认证载荷的值,其中认证方法为Digital Signature(14/0xe)。整个authentication载荷的长度为460字节,去掉头部的8个字节长度,认证数据的长度为452个字节,其中开始的部分为0x43长的认证算法信息。

在这里插入图片描述

这部分数据采用ASN.1编码,解析之后内容如下。

在这里插入图片描述

首先是RSA-PSS的标识符Identifier:1.2.840.113549.1.1.10(参见RFC7427 A.4.1定义)。之后为三部分参数,如RFC3447 A.2.3中的定义,第一部分为hashAlgorithm算法标识,表明认证数据使用的哈希算法,此处为SHA512: 2.16.840.1.101.3.4.2.3;第二部分为maskGenAlgorithm标识(1.2.840.113549.1.1.8),算法也是使用SHA521: 2.16.840.1.101.3.4.2.3;第三部分为saltLength长度值,为64。

在这里插入图片描述

以下为dave主机发送的IKE_AUTH请求报文中携带的认证数据的解析结果,可见其使用的SHA2-384哈希算法,标识为:2.16.840.1.101.3.4.2.2。

在这里插入图片描述

strongswan测试版本: 5.8.1

END

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页