信息安全基础

基础加密方式

1. 通信方式和流程的简单梳理

信息安全重点关注两大类问题:信息的防泄露和信息的防篡改。下面也重点围绕这两点展开。

1.1 加密方式-对称加密

对称加密的概念实际就是通讯双方都拿一样的密钥。对称加密的算法核心就是信息的加密和解密都用同一个密钥。对称加密的方法简单,高效。这种简单的对称加密方式唯一的漏洞就是双方建立通讯前如何保证密钥的安全传输。在任何传输路径中,密钥都有被窃取的可能。使用非对称加密的方法就有方案规避这一漏洞。

1.2 加密方式-非对称加密

非对称加密是通讯的一方通过PKI生成一对儿密钥,其中一个留在自己手里的叫私钥,另一个传递给给通讯对象的叫公钥。因为私钥在本地,相对来讲比较安全;而公钥要通过通讯链路传递出去,有传输就有泄漏的风险,因此也可以认为传输出去的就是公开的。
非对称加密的特点就是公钥加密,只有私钥才能解密;私钥加密,也只有公钥才能解密。基于这个特点以及公私密钥的开放情况可知:私钥加密,公钥解密,是为了防篡改;公钥加密,私钥解密是为了防泄漏。非对称加密算法最普遍的就是RSA算法。RSA算法的安全性基于大数分解的难度,其公钥和私钥是一对大素数(100到200位十进制数或更大)的函数。如果用公钥加密形成密文后,想从一个公钥和密文推算出私钥的难度等价于分解两个大素数之积,这是一个公认的数学难题;
请添加图片描述

如果只有client一端集成了PKI,如上图第二部分所示,则client发给server的消息会被泄露,但是无法被篡改,也即私钥加密,公钥解密是签名验签的流程;而server拿到公钥后发给client的消息可能会被篡改掉,但不会被泄露,因为第三方没有私钥,永远无法解密,也即公钥加密,私钥解密是加密防信息泄露流程
如果client 和 server 端都集成了PKI,如上图第三部分所示。通信双方都利用对方的公钥加密后传递,就保证了信息的保密性。
但这种方式也不是十分完美的,如果第三方也有PKI的情况下,如上图第四 部分所示。在通信双方交换公钥的时候,第三方动了手脚,来了个偷梁换柱,把双方的公钥都换成自己的公钥,这个时候通信双方是没有察觉到。通信的双方都把原始信息用第三方的公钥Y进行了加密,第三方就可以用自己的私钥X解析出原始信息,从而达到获取信息或篡改信息的目的。这种方案也存在漏洞,但是如果我能察觉到对方给我的公钥被偷梁换柱了就可以避免这种问题了。那如何才能做到这一点呢?因此引入了数字证书认证机构(Certificate Authority,CA),便有了下面的方案。请添加图片描述
这套流程的前提是CA一定是及其权威且可信任的。server端将自己的公钥D发给CA机构请求签名(即发送CSR)。CA校验CSR的正确性后用自己的私钥J对其中的公钥D做签名并加入一些辅助信息形成证书Certificate返回给server端。此时server端将带着自己公钥D信息的证书发给client。client通过CA释放的公钥K验证收到证书的可靠性,即判断其有没有被篡改,如果被篡改过,验签一定不会通过,也就知道server传过来的公钥D被动了手脚。通过这一步确保了client端收到的server端的公钥D是可靠的。后面client端再用server端的公钥D对通信密钥M进行加密传输,server端拿到后用私钥C解密后得到通信密钥M。至此对称加密的密钥M安全的握在了通信双方的手里,没有第三个人知道了。后面通信双方就可以使用对称加密的方式来保证信息的安全性了。

2.常用相关算法

2.1对称加密算法

2.1.1 AES128 ECB with Nopadding

Advanced Encryption Standard (AES)
python实现的代码如下:

#################### Algorithm2-AES128 ECB nopadding ######################
def AES_encryption(message,pkeys):
    message_byte = bytearray.fromhex(message)
    pkeys_byte = bytearray.fromhex(pkeys)
    aes = AES.new(pkeys_byte,AES.MODE_ECB)
    encryption_data = aes.encrypt(message_byte) # This function does not add any padding to the plaintext.
    encryption_data = encryption_data.hex().upper()
    #print(encryption_data)
    return encryption_data
###########################################################################

2.2非对称加密算法

2.2.1 私钥加密公钥解密

这种方式主要用在软件签名验签方面。涉及到的一些主要算法如下:
Hash算法常使用SHA-256算法,该算法定义在<FIPS PUB 180-4, Secure Hash Standard (SHS), March 2012>
公钥算法要使用<PKC#1 v2.2: RSA Crytopgraphy Standard, RSA Laboratories, October 27, 2012>. 其中要使用RSA-PSS签名算法,同时加入与hash值相同的盐,这样就保证了对同一文件在不同时间签名的结果不同。
私钥部分信息要由ASN.1表示。RSAPrivateKey定义在《PKCS #1 v2.2: RSA Cryptography Standard, RSA Laboratories, October 27, 2012》中。私钥要按照PEM格式(Base64编码)储存。此种格式定义在RFC1421中。

python 中涉及到的非对称加密的重要库如下:
from Crypto.PublicKey import RSA
from Crypto.Hash import SHA256
from Crypto.Signature import PKCS1_PSS as PKCS1_signature
from Crypto.Signature.pss import MGF1

相关示例代码后续完善。

  • 15
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值