openswan klips数据加解密过程

本文档介绍了KLIPS在内核中如何处理IP数据包的加密和解密,涉及ipsec_tunnel_start_xmit、ipsec_rcv等关键函数,以及加密过程中ixt_e_cbc_encrypt的实际调用。解密过程以ESP为例,通过ipsec_rcv_decap_once完成解密,并将解密后的数据交给上层协议栈处理。
本文档的Copyleft归rosetta所有,使用GPL发布,可以自由拷贝、转载,转载时请保持文档的完整性。

        klips实现IP数据包的安全接受或发送的进程。在内核域中运行,主要负责控制管理SA及密钥,同时处理数据包的加密和解密工作。

数据加密过程:
        ipsec_tunnel_start_xmit()
                ->ipsec_xmit_encap_bundle()
                        ->ipsec_sa_getbyid()//获取sa
                        ->ipsec_xmit_encap_once()  
                                ->ipsec_alg_esp_encrypt()
                                        ->struct ipsec_alg_enc *ixt_e=sa_p->ips_alg_enc
                                        ->ixt_e->ixt_e_cbc_encrypt()//真正的加密处理
                                        //此加密函数指针是在ipsec_xmit_encap_bundle()中获取sa后赋的值。
                                        // ixt_e=ixs->ipsp->ips_alg_enc;
                ->ipsec_tunnel_send()//发送数据         
                    ->NF_HOOK(PF_INET, NF_IP_LOCAL_OUT, ixs->skb, NULL, ixs->route->u.dst.dev,ipsec_tunnel_xmit2);
                    //这里安装一个发包勾子。最终数据由ipsec_tunnel_xmit2发出。

数据解密过程(以esp为例):
        ipsec_rcv()
         ->ipsec_rcv_decap()
                ->ipsec_rcv_decap_once()//proto_funcs = esp_xform_funcs(当然这里还有ah,ipcomp对应的结构体指针赋值)
                        ->proto_funcs->rcv_checks
                        ->proto_funcs->rcv_setup_auth
                        ->proto_funcs->rcv_decrypt
                        解完密后由  netif_rx(irs->skb);发送给上层协议栈处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值