基于openswan klips的IPsec实现分析(九)加密算法维护

本文介绍了Linux内核中基于openswan klips的IPsec实现中加密算法的维护,包括数据结构、相关函数接口,以及如何增加新的加密算法支持,如3DES。内容涵盖了struct ipsec_alg、register_ipsec_alg()、ipsec_alg_insert()和pfkey_list_insert_supported()等关键组件和函数。
摘要由CSDN通过智能技术生成

基于openswan klips的IPsec实现分析(九)加密算法维护

转载请注明出处:http://blog.csdn.net/rosetta

    本节将介绍klips加密算法的维护,并介绍如何增加新加密算法的支持,下一节将讲认证算法维护和增加。

    这里说的加密算法是指对称加密算法,是在通信过程中对传送的信息加解密时使用的,比如:AES,3DES,sm4等。

    加密算法对应的数据结构tructipsec_alg,其信息也是放在哈希表中:

    static structlist_head ipsec_alg_hash_table[IPSEC_ALG_HASHSZ];

相关数据结构

#define IPSEC_ALG_ST_SUPP   0x01

#define IPSEC_ALG_ST_REGISTERED 0x02

#define IPSEC_ALG_ST_EXCL   0x04

 

#define IPSEC_ALG_TYPE_AUTH14

#define IPSEC_ALG_TYPE_ENCRYPT  15

 

struct ipsec_alg_supported// pfkey_supported_list[]数据的每一个成员为此结构体。

{

         uint16_tias_exttype;//算法类型:加密或认证,IPSEC_ALG_TYPE_*

         uint8_t  ias_id;//算法ID,比如3des为3,aes为12。

         uint8_t  ias_ivlen;//IV长度,单位是bit,比如SM4的IV长度为128bit

         uint16_tias_keyminbits; //密钥支持最小位数。

         uint16_tias_keymaxbits;  //密钥支持最大位数。

       char    *ias_name;

};

 

struct ipsec_alg {

         unsignedixt_version;       /* only allow thisversion (or 'near')*/\  //IPSEC_ALG_VERSION

         structlist_head ixt_list;  /* dlinked list */ \  //内核标志的链表结构

         structmodule *ixt_module;    /* THIS_MODULE */ \ //THIS_MODULE

         unsignedixt_state;          /* state flags */ \ // IPSEC_ALG_ST_*三种

         atomic_tixt_refcnt;        /* ref. count whenpointed from ipsec_sa */ \ //被sa引用的次数

         charixt_name[16];  /* descriptive short name,eg. "3des" */ \ //算法名字,比如“3des”

         void*ixt_data;                   /* privatefor algo implementation */ \

         uint8_t  ixt_blocksize;   /* blocksize in bytes */ \//CBC模式分块大小,比如3des为8;SM4为16。

         structipsec_alg_supported ixt_support;

};

/*

 *   Note the const in cbc_encrypt IV arg:

 *   some ciphers like to toast passed IV (eg.3DES): make a local IV copy

 */

struct ipsec_alg_enc {

         structipsec_alg ixt_common;

         unsignedixt_e_keylen;             /* raw keylength in bytes */原始密钥长度,单位为字节,比如SM4为16.

         unsignedixt_e_ctx_size;          /*sa_p->key_e_size *///这个不知道什么用,SM4为16.

         int(*ixt_e_set_key)(struct ipsec_alg_enc *alg, __u8 *key_e, const __u8 *key,size_t keysize);

         //设置密钥函数指针

         __u8*(*ixt_e_new_key)(struct ipsec_alg_enc *alg, const __u8 *key, size_t keysize);

         void(*ixt_e_destroy_key)(struct ipsec_alg_enc *alg, __u8 *key_e);

         //销毁密钥函数指针

         int(*ixt_e_cbc_encrypt)(struct ipsec_alg_enc *alg, __u8 *key_e, __u8 *in, intilen, const __u8 *iv, int encrypt);

         //加密函数指针

};

相关函数接口

函数调用关系:

ipsec_klips_init()

->ipsec_alg_init()

->ipsec_3des_init()

  -> register_ipsec_alg_enc()

 

//内核增加加密算法支持

static inline int register_ipsec_alg_enc(structipsec_alg_enc *ixt) {

   return register_ipsec_alg((struct ipsec_alg*)ixt);

}          

//内核撤销此加密算法支持

static inline intunregister_ipsec_alg_enc(struct ipsec_alg_enc *ixt) {

   return unregister_ipsec_alg((struct ipsec_alg*)ixt);

}

register_ipsec_alg()函数

/*

 *Generic (enc, auth) registration entry point

 */

int register_ipsec_alg(structipsec_alg *ixt)

{

         intret=

OpenSwan是一个IPSec实现,它允许您建立安全的虚拟专用网络(VPN)连接来保护您的网络通信。在本教程中,我们将介绍如何使用OpenSwan部署IPSec。我们将讨论每个配置文件的详细信息,并解释第一阶段和第二阶段的认证和加密算法如何配置。 步骤1:安装OpenSwan 在开始之前,请确保您已在Linux系统上安装了OpenSwan。您可以使用以下命令在Ubuntu上安装OpenSwan: ``` sudo apt-get update sudo apt-get install openswan ``` 步骤2:配置IPSec 下面是IPSec的配置文件。您可以在/etc/ipsec.conf中找到它。 ``` config setup protostack=netkey nat_traversal=yes virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12 oe=off nhelpers=0 interfaces=%defaultroute plutodebug=all plutostderrlog=/var/log/openswan.log dumpdir=/var/run/pluto/ lockdir=/var/run/pluto/ conn %default ikelifetime=60m keylife=20m rekeymargin=3m keyingtries=1 authby=secret pfs=no conn vpn-to-site left=192.168.1.1 leftsubnet=192.168.1.0/24 right=203.0.113.2 rightsubnet=10.0.0.0/24 auto=start ``` 让我们逐个解释每个配置项: - protostack:指定协议堆栈。在这种情况下,我们使用netkey协议堆栈。 - nat_traversal:启用NAT遍历。如果您的VPN连接将通过NAT进行,则应启用此选项。 - virtual_private:指定内部网络的IP地址段。在这种情况下,我们指定了三个IP地址段:10.0.0.0/8,192.168.0.0/16和172.16.0.0/12。 - oe:关闭超时。如果您的VPN连接长时间处于非活动状态,则关闭此选项可能会更安全,因为它不会在非活动状态下发送任何消息。 - nhelpers:指定NAT助手的数量。在这种情况下,我们将其设置为0。 - interfaces:指定默认路由接口。 - plutodebug:指定调试级别。在这种情况下,我们将其设置为all,以便记录所有信息。 - plutostderrlog:指定日志文件的位置。 - dumpdir:指定该进程的转储目录。 - lockdir:指定该进程的锁定目录。 接下来,我们定义了一些默认连接参数。这些参数将应用于我们所有的连接。 - ikelifetime:指定IKE的生存期。 - keylife:指定IPSec密钥的生存期。 - rekeymargin:指定重新生成密钥的时间差。 - keyingtries:指定尝试建立连接的次数。 - authby:指定身份验证方式。在这种情况下,我们使用预共享密钥(PSK)。 - pfs:指定完美的前向保密性。在这种情况下,我们将其禁用。 最后,我们定义了我们的第一个连接,它将使用我们之前定义的默认参数。 - conn vpn-to-site:指定连接的名称。 - left:指定本地IP地址。 - leftsubnet:指定本地IP地址段。 - right:指定远程IP地址。 - rightsubnet:指定远程IP地址段。 - auto:指定连接类型。在这种情况下,我们将其设置为start,以便在启动时自动启动连接。 步骤3:配置PSK 现在,让我们创建一个预共享密钥(PSK)。您可以在/etc/ipsec.secrets中找到它。 ``` 192.168.1.1 203.0.113.2 : PSK "myvpnpassword" ``` 在这里,我们将本地IP地址和远程IP地址与PSK绑定。在这种情况下,我们将其设置为“myvpnpassword”。 步骤4:配置IKE 下面是IKE的配置文件。您可以在/etc/ike.conf中找到它。 ``` ikev1=enable esp=3des-sha1 ike=3des-sha1-modp1024 phase2=esp ``` 让我们逐个解释每个配置项: - ikev1:启用IKEv1。 - esp:指定ESP的加密算法。在这种情况下,我们使用3DES和SHA1。 - ike:指定IKE的加密算法。在这种情况下,我们使用3DES,SHA1和MODP1024。 - phase2:指定第二阶段的协议。在这种情况下,我们使用ESP。 现在,我们已经完成了所有配置。您可以使用以下命令启动IPSec服务: ``` sudo service ipsec start ``` 您可以使用以下命令停止IPSec服务: ``` sudo service ipsec stop ``` 总结 在本教程中,我们介绍了如何使用OpenSwan部署IPSec。我们逐个解释了每个配置文件,并解释了第一阶段和第二阶段的认证和加密算法如何配置。现在,您可以使用OpenSwan建立安全的VPN连接来保护您的网络通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值