zoukankan      html  css  js  c++  java
  • 01.安全-加密

    如果通信过程具备了四个特性,就可以认为是“安全”的,
    这四个特性是:

    安全传输4特性
    • 机密性
    • 完整性
    • 身份认证
    • 不可否认

    1.机密性(Secrecy/Confidentiality)

    是指对数据的“保密”,只能由可信的人访问,对其他人是不可见的“秘密”,简单来说就是不能让不相关的人看到不该看的东西

    比如小明和小红私下聊天,但“隔墙有耳”,被小强在旁边的房间里全偷听到了,这就是没有机密性。我们之前一直用的 Wireshark ,实际上也是利用了 HTTP 的这个特点,捕获了传输过程中的所有数据

    2.完整性(Integrity,也叫一致性)

    是指数据在传输过程中没有被篡改,不多也不少,“完完整整”地保持着原状。

    机密性虽然可以让数据成为“秘密”,但不能防止黑客对数据的修改,黑客可以替换数据,调整数据的顺序,或者增加、删除部分数据,破坏通信过程。

    比如,小明给小红写了张纸条:“明天公园见”。小强把“公园”划掉,模仿小明的笔迹把这句话改成了“明天广场见”。小红收到后无法验证完整性,信以为真,第二天的约会就告吹了

    3.身份认证(Authentication)

    是指确认对方的真实身份,也就是“证明你真的是你”,保证消息只能发送给可信的人。

    如果通信时另一方是假冒的网站,那么数据再保密也没有用,黑客完全可以使用冒充的身份“套”出各种信息,加密和没加密一样。比如,小明给小红写了封情书:“我喜欢你”,但不留心发给了小强。小强将错就错,假冒小红回复了一个“白日做梦”,小明不知道这其实是小强的话,误以为是小红的,后果可想而知。

    4.不可否认(Non-repudiation/Undeniable)

    也叫不可抵赖,意思是不能否认已经发生过的行为,不能“说话不算数”“耍赖皮

    使用前三个特性,可以解决安全通信的大部分问题,但如果缺了不可否认,那通信的事务真实性就得不到保证,有可能出现“老赖”。比如,小明借了小红一千元,没写借条,第二天矢口否认,小红也确实拿不出借钱的证据,只能认倒霉。另一种情况是小明借钱后还了小红,但没写收条,小红于是不承认小明还钱的事,说根本没还,要小明再掏出一千元

    机密性由对称加密AES保证,完整性由SHA384摘要算法保证,身份认证和不可否认由RSA非对称加密保证

    非对称加密

    • 公钥加密,私钥解密
    • 私钥加密,公钥验签
    私钥加密,用公钥解是为了做身份认证(能解开说明是私钥持有者发给我的公钥) 不可抵赖,因为默认私钥只有持有人知道
    混合加密:用非对称加密,加密对称加密的私钥。 对称加密的私钥又是会话级的随机数=一次会话一个私钥。就算别人暴力破解也只是破解了一个会话。

    公钥的传输必须使用证书,把公钥和持有者身份绑在一起,否则就会有信任问题,容易被别人冒充。

    私钥加密的作用是签名,实现身份认证而不是数据保密,签名是公开的,所以不存在安全问题

    非对称加密缺点
    • 非对称加密基于大数运算,比如大素数或者椭圆曲线,是复杂的数学难题,所以消耗计算量,运算速度慢
    • 除了慢,可能还有一个缺点就是需要更多的位数,相同强度的对称密钥要比非对称密钥短,
      对称密钥一般都128位、256位,而rsa一般要2048位,不过椭圆曲线的会短一点

    数字签名的原理

    就是把公钥私钥的用法反过来,之前是公钥加密、私钥解密,现在是私钥加密、公钥解密

    但又因为非对称加密效率太低,所以私钥只加密原文的摘要,这样运算量就小的多,而且得到的数字签名也很小,方便保管和传输。

    签名和公钥一样完全公开,任何人都可以获取。


    但这个签名只有用私钥对应的公钥才能解开,拿到摘要后,再比对原文验证完整性,就可以像签署文件一样证明消息确实是你发的

    当你的系统接入支付宝的时候,支付宝会要求你生成一对你的公私钥,然后私钥你自己藏好了,公钥上传到支付宝(这个过程相当于支付宝有了你的公钥),然后再你上传完你的公钥后,支付宝会返回给你支付宝的公钥。
    其中当你使用RSA普通版本的时候,所有商户得到的支付宝公钥都是同一个,当你使用RSA2的时候,每个商户收到的支付宝公钥都是不尽相同的。

    1.你给支付宝发信息时用支付宝的公钥加密,只要持有支付宝私钥的支付宝才能解开

    2.支付宝给你发消息时分2种

    • 1.用支付宝的私钥加密,所有持有支付宝的公钥的人都能解开(验签)
    • 2.用你的公钥加密,只有持有私钥的你才能解开(签名)
    openssl genrsa -out rsa_private_key.pem 1024
    openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
    
    ssl_certificate certs/3340027_www.cn.pem;
    ssl_certificate_key certs/3340027_www.cn.key;
    ssl_session_timeout 5m;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4:!DH:!DHE;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    
  • 相关阅读:
    C++ generic tools -- from C++ Standard Library
    18 12 18 给服务器添加logging 日志功能
    18 12 14 python提高 装饰器
    18 12 `12 WSGI 协议
    18 12 07 MySQL 与python 的交互
    转 SQL 的数据库 架构规范 之 58到家数据库30条军规解读
    18 12 06 sql 的 基本语句 查询 条件查询 逻辑运算符 模糊查询 范围查询 排序 聚合函数 分组 分页 连接查询 自关联 子查询
    18 12 4 SQL 的基本 语法
    clion 的 安装 变量配置的 搬运工(有点基础应该能看 大家看不懂 就是我自己看 哈哈哈哈哈哈)
    18 11 27 高级的服务器连接 epoll
  • 原文地址:https://www.cnblogs.com/HKUI/p/13866641.html
Copyright © 2011-2022 走看看