首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

openswan klips数据加解密进程

2012-06-20 
openswan klips数据加解密过程本文档的Copyleft归rosetta所有,使用GPL发布,可以自由拷贝、转载,转载时请保

openswan klips数据加解密过程
本文档的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);发送给上层协议栈处理。

热点排行