安全传输平台项目扩展——项目延展

在学习安全传输平台项目总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。

11-安全传输平台项目扩展-第03天(项目延展-项目演说)

目录:
一、复习
二、安全传输平台项目扩展——项目延展

 

一、复习

》4大基础组件:

    1)统一报文编码解码    libmessagereal.so .h ---> .dll .lib .h
    2)统一通信组件socket    --- windows socket 通信        
    3)共享内存        --- windows shm 机制
    4)数据库访问    (客户端无需数据库)

》物理组件集成:

    统一报文编解码组件: 
        messagereal.lib 、messagereal.dll 、 keymng_msg.h
        集成动态库到项目中。 属性 → 配置属性 → 连接器 → 输入 → 附加依赖项 → 编辑 → messagereal.lib
        messagereal.dll 放置到 .exe 所在目录位置。
        messagereal.lib 放置到 .cpp 所在目录位置。

    共享内存组件:
        myipc_shm.cpp 、myipc_shm.h
        集成源码到项目中。 属性 → 配置属性 → C/C++ → 常规 → SDL检查 → “否(/sdl-)”

    Socket通信组件:
        poolsocket.cpp 、poolsocket.h 、 socketlog.cpp 、 socketlog.h 、 socketutil.cpp 、 socketutil.h
        集成源码到项目中。
-----将 Linux 业务代码移植到win下:-------------------------------------------------------------------------

    添加与客户端相关的源码:
        keymng_shmop.c        → keymng_shmop.cpp
        keymngclient.c        是在Linux 下组织文字界面的,不需要。
        keymngclientop.c    → keymngclientop.cpp   
        keymnglog.c        → keymnglog.cpp       
        keymng_shmop.h
        keymngclientop.h   
        keymnglog.h
        去除 cpp文件 #include 中 Linux 专用 头文件。
        添加    #define  _CRT_SECURE_NO_WARNINGS
            #include "stdafx.h"

    修改 源码对接平台差异错误:
        open(fileName,     O_WRONLY|O_CREAT|O_APPEND, 066)   →   (int) fopen(fileName,"w+")
        pNode = mapaddr + i*sizeof(NodeSHMInfo);   →    pNode = (NodeSHMInfo *)mapaddr + i*sizeof(NodeSHMInfo);
        ICLevelName    →    ICKeyMngLogName;

----- 整合图形客户端业务:-----------------------------------------------------------------------------------

    实现“系统初始化”Button 功能 :  ( initUpdate() )
        引入头文件:keymngclientop.h → ViewClient.cpp
        定义全局变量:MngClient_Info pCltInfo; → ViewClient.cpp  ---- 只读。
        调用:MngClient_InitInfo(&mngClientInfo); 初始化。    AfxMessage().显示错误信息。

        【注意】:修改 MngClient_InitInfo 中,服务器IP地址。

    实现“密钥协商”Button 功能:   
        调用:MngClient_Agree(&mngClientInfo); 协商密钥。AfxMessage().显示错误信息。

        【注意】:内存释放 MFC 中验证严格, ===== 把握:谁开辟,谁释放 原则。
        msgKey_Req_Data:是在报文编码过程中 使用 MsgEncode() 函数创建的内存。
                 应使用 MsgMemFree() 释放。 如:
                 MsgMemFree((void **)&msgKey_Req_Data, 0);
        msgKey_Res_Data:是在数据通信过程中 使用 sckClient_rev() 函数创建的内存。
                 应使用 sck_FreeMem() 释放。 如:
                 sck_FreeMem((void **)&msgKey_Res_Data);   

    实现“密钥校验”Button 功能:   
        调用:MngClient_Check(&mngClientInfo); 协商密钥。AfxMessage().显示错误信息。   

    实现“密钥注销”Button功能:   
        调用:MngClient_Revoke(&mngClientInfo); 协商密钥。AfxMessage().显示错误信息。   

》内存释放:

    原则:谁开辟,谁释放。       
    创建库时,如有函数开辟了内存,必须提供对应的内存释放函数给用户。       
    int poolget(int **cache(传出));      int free(int *cache(传入));

------外联接口设计思想:----------------------------------------------------------------------------------------

    .so / .dll 和 .h
    项目中外联接口主要有两个作用:    1. 读共享内存。    2. 加解密数据。

    函数接口:
        int DataEnc(char *clientid, char *serverid, unsigned char *indata, int indatalen, unsigned char *oudata, int *outdatalen);
        int DataDec(char *clientid, char * serverid, unsigned char *indata, int indatalen, unsigned char *outdata, int *outdatalen);
        int tag = 0 / 1; 加密, 解密。
        int DataEncAndDec(char *clientid, char *serverid, unsigned char *indata, int indatalen, unsigned char *outdata, int outdatalen);

    操作共享内存时, 需要使用到keyid。它可以以两种方式传入到函数接口中:

        1)直接作为函数接口,传递到函数中。
            int DataEncAndDec(char *clientid, char *serverid, unsigned char *indata, int indatalen,
                      unsigned char *outdata, int outdatalen, int keyid, int maxnode);
        2)接口读配置文件获取。
            配置文件应存放在: $(HOME)/etc/1.ini   e.g. KEYID=1111 、 MAXNODE=10
            这样,直接调接口效率会比较低。所以应封装初始化函数和结束函数给用户。
            int DataEncAndDec_init(char *filename);        //读配置文件,获取数据存入全局变量中。
            int DataEncAndDec(char *clientid, char *serverid, unsigned char *indata, int indatalen,
                      unsigned char *outdata, int outdatalen);
            int DataEncAndDec_finish();

    项目开发中,不同的用户需求,选用不同的接口封装方式,效率几近相同。没有孰优孰劣之分。

=======对称加密:   加密秘钥和解密密钥一致。===================================

    加密三要素:
        y = ax + b   明文、密文, 密钥, 算法。

    常见对称加密体系:
        AES    DES    3DES    SM3/n 

    分组加密原理:   
        采用分组加密的方式:对 不满足 8 字节部分,打padding。 但,从补丁明文恢复到原始明文时,有问题。无法区分原始明文和补丁明文。
        缺几补几。
        补丁长度 = 分组数据长度 - 数据长度 % 8   (缺8补8)    0-7   打补丁
            只对一整块数据,只做一次 padding 操作,        缺几补几。 
            大数据要分块传输、存储。无论多大的数据,只对最后一个分组进行 padding 操作。在中间不能进行该操作。
            一般加密供应商给用户应提供两个API函数: 一个打padding的函数、一个不打padding的API函数。 

           大多数用户不了解加密过程,通常对其隐藏实现细节。只提供加密、解密接口。

-------加密大文件加解密案例:-----------------------------------------------------------------------

        cryptproj-文件加密项目

-------外联接口的使用:--------------------------------------------------------------------------------
        appinterface/

=======非对称加密:===============================================
    特征:加密密钥 和 解密密钥,不一样。 密钥对( 公钥、私钥 )。   

    银行开户:
        1)提交身份证
        2)柜员 审核 ---> 人为管理
            (1)调用银行内部密钥生成系统,得到密钥对(公钥、私钥)。
            (2)将私钥灌入 KEY 中。(网银key、U盾)
            (3)将 公钥 + 个人身份信息 ---> 数字证书。     (包含“公钥”和“个人身份信息”两部分内容)

    数字证书:
        简单理解成“网络身份证”。解决了虚拟世界(网络世界)中,两端之间身份识别问题。
    示例:
        360 → 菜单 → “选项” → “高级设置” → “管理证书”
        MicroSoft edge → 菜单 → “使用 Internet Explorer 打开” → “工具” → “Internet 选项” → “内容”标签页 → “证书”
        可导出证书,选择.BER格式 或者 base64编码格式 (将DER编码后得到的可见字符格式)。

    查看证书:
        详细信息中,包含公钥和使用者相关身份信息。

    公钥的作用:

       1)验证身份                B → 验证 → A
            (1)A 产生随机数 r1, 用私钥加密 r1 → r1S                        (签名)
            (2)A 将 r1和r1S 给 B。 则B有了明文:r1 和 密文:r1S
            (3)B 从公共网点上下载 A 的证书。 若 B 无法下载,A也可以将自己的证书一起给B。
            (4)B 用 A的证书中的“公钥”,解密 密文:r1S → r2 。 校验 r1 和 r2 是否相等。         (验证签名)
            (5)若相等,则能确定,数据加密动作,是 A 完成的。
            签名,类似公司加盖公章。具有法律效力(电子签名法)。  
        2)数据加密:                C 、 D
            (1)C 用 D 的公钥加密,将加密数据给D
            (2)D 用自己的私钥解密。

项目 模块 简析:
    1)基础组件 模块  (报文编解码、通信组件、共享内存、数据库操作组件)
    2)密钥相关 模块  (server、client、 shm、 DB)
    3)管理终端 模块  (MFC图形界面、win 数据库、配置文件)
    4)外联接口 模块  (数据加解密、封装)

 

二、安全传输平台项目扩展——项目延展

》项目框架图:

------项目的思考:------------------------------------------------------------------------------------

1)更换密钥 如何保证外联应用业务的 连续性?

  冗余密钥

2)安全传输平台解决的最主要的问题?

  (1)密钥的问题        解决对称密钥体系中 密钥的安全分发
  (2)数据加密的问题    对主流密码设备的群调度     调度平台
  (3)网点 信息系统管理

3)如何保证对称密钥协商过程中的安全性?
具体一点:如何保证r1  r2 两个随机数的安全性?

  采用非对称密钥体系 来保证对称密钥r1 r2的产生
  RSA ECC                DES3
  (1)给A B两个结点产生A(公私密钥对)  B(公私密钥对)
  (2) A _ B之间 双向身份认证
  (3)r1 r2 A要给B发送r1  要保证r1数据的安全?
            A 产生r1
            A 用 B 的公钥加密r1 扔给B
            B 用自己的私钥解密,得到 r1 
            同样的道理 r2 也可以按照这个方法 保证r2的安全传输

4)如果服务器是一个集群
        A            A1  -- A6
        B
如何保证 A的密钥和 A1-A6的密钥一致?    


  (1)实时密钥同步。 协商后A分发, A1-A6 上部署密钥同步服务器的接收端。
  (2)A1-A6 主动从A上下载密钥。 或定时下载。   

5)结点和结点上下级联?

  在终端上,同时部署 keymngserver 和 keymngclient(通过IP+port唯一识别)

 

 

在学习安全传输平台项目总结了笔记,并分享出来。有问题请及时联系博主:Alliswell_WP,转载请注明出处。

posted on 2020-08-05 21:36  Alliswell_WP  阅读(344)  评论(0编辑  收藏  举报

导航