第十一节密码学基础
古典密码
古典密码学是密码学的一个分支,主要研究传统的加密和解密方法。这些方法在计算机时代之前使用,主要依赖于手工计算或简单的机械设备。古典密码学的目标是保护信息的机密性,确保只有授权方能够读取加密的信息。以下是几种典型的古典密码算法
- 凯撒密码(Caesar Cipher):
- 最简单的替换密码之一。
- 每个字母在字母表中按固定数目进行偏移。例如,偏移3个位置,A变为D,B变为E,依此类推。
- 弱点:只有25种可能的偏移量,容易被暴力破解。
- 维吉尼亚密码(Vigenère Cipher):
- 使用一个关键词来决定字母的偏移量。
- 每个字母的偏移量由对应的关键词字母决定,增强了安全性。
- 弱点:如果关键词较短,可能被频率分析破解。
- 仿射密码(Affine Cipher):
-
是凯撒密码的推广,使用线性变换公式 E(x)=(ax+b)modm 进行加密,其中 a 和 b 是密钥,m 是字母表的长度。
E(x)=(ax+b)mod mE(x) = (ax + b) \mod m
aa
bb
mm
-
增加了密钥空间,但如果知道密钥的某些特征,仍然可以被破解。
-
- 希尔密码(Hill Cipher):
- 使用线性代数中的矩阵乘法来进行加密。
- 明文被分成固定长度的块,每个块用一个矩阵进行加密。
- 需要矩阵行列式非零且互素,以确保逆矩阵存在。
- 换位密码(Transposition Cipher):
- 通过改变明文字母的顺序来加密。
- 例如列移换密码,将明文写成一个矩阵,然后按列读取密文。
- 这种方法本身不改变字母的频率,因此容易被频率分析破解。
现代密码
现代密码学是密码学的一个分支,致力于保护信息的机密性、完整性和真实性,主要依赖复杂的数学算法和计算机技术。以下是现代密码学的几个重要概念和算法:
对称加密
对称加密使用相同的密钥进行加密和解密。其主要特点是速度快,适合大数据量的加密。
- 高级加密标准(AES):
- 一种广泛使用的对称加密算法。
- 支持128位、192位和256位密钥。
- 采用多轮替换-置换网络,提高了安全性。
- 数据加密标准(DES)和三重DES(3DES):
- DES使用56位密钥,已被认为不安全。
- 3DES通过多次应用DES提高安全性,但速度较慢,逐步被AES取代。
非对称加密
非对称加密使用一对密钥:公钥用于加密,私钥用于解密。其主要特点是安全性高,适合密钥交换和数字签名。
- RSA:
- 基于大素数分解问题的安全性。
- 常用于密钥交换和数字签名。
- 由于密钥生成和加密速度较慢,不适合加密大数据量。
- 椭圆曲线密码学(ECC):
- 基于椭圆曲线离散对数问题。
- 在提供相同安全级别的情况下,使用较短的密钥,提高了效率。
- 被广泛用于移动设备和资源受限环境。
哈希函数
哈希函数将任意长度的数据映射为固定长度的摘要,用于数据完整性验证。
- SHA-256和SHA-3:
- SHA-256是SHA-2家族的一部分,输出256位摘要。
- SHA-3是NIST新标准,基于Keccak算法,提供了与SHA-2不同的结构和安全性。
- MD5和SHA-1:
- MD5输出128位摘要,SHA-1输出160位摘要。
- 由于发现了安全漏洞,这两种算法不再推荐使用。
数字签名
数字签名用于验证信息的真实性和完整性,通常结合非对称加密使用。
- RSA数字签名:
- 通过私钥签名,公钥验证。
- 安全性基于RSA加密算法。
- 椭圆曲线数字签名算法(ECDSA):
- 基于ECC,提供高效且安全的数字签名。
密钥交换
密钥交换用于在不安全信道上安全地交换加密密钥。
- Diffie-Hellman密钥交换(DH):
- 基于离散对数问题。
- 双方生成共享的对称密钥,用于后续通信加密。
- 椭圆曲线Diffie-Hellman(ECDH):
- 基于ECC,提高了效率和安全性。
量子密码学
量子密码学利用量子力学原理,提供了理论上无条件安全的通信手段。
- 量子密钥分发(QKD):
- 通过量子纠缠或量子叠加态分发密钥。
- 任何窃听行为都会被检测到,确保通信安全。
网安中的密码学
哈希
将一种任意长度的消息压缩到某一固定长度的密文
常见的:
- MD5(Message Digest Algorithm 5):
- 生成128位(16字节)的哈希值。
- 快速,但由于碰撞攻击(即不同的输入生成相同的哈希值),不再推荐用于安全性要求高的场景。
- SHA-1(Secure Hash Algorithm 1):
- 生成160位(20字节)的哈希值。
- 比MD5更安全,但同样受到碰撞攻击的威胁,已经被许多机构废弃。
- SHA-2(包括SHA-224、SHA-256、SHA-384、SHA-512):
- SHA-256生成256位(32字节)的哈希值。
- SHA-512生成512位(64字节)的哈希值。
- 目前仍然被广泛使用且安全性较高。
- SHA-3:
- 基于Keccak算法,是最新的SHA系列成员。
- 提供与SHA-2相同的位长度(224、256、384、512)。
- 设计目标是应对潜在的SHA-2弱点,但SHA-2目前仍然被认为是安全的。
- HMAC(Hash-based Message Authentication Code):
- 基于任何加密哈希函数(如SHA-256)构建,提供消息的完整性和真实性验证。
- 常用于认证和完整性检查,如在TLS和IPsec中使用。
- bcrypt:
- 基于Blowfish加密算法,专门为密码哈希设计。
- 引入了盐(salt)和工作因子(work factor),增加了抗暴力破解的难度。
- 常用于存储用户密码。
- scrypt:
- 专门为密码哈希设计,且比bcrypt更耗内存。
- 设计目标是增加暴力破解的难度,通过消耗大量内存和计算资源。
- Argon2:
- 是密码哈希大赛(PHC)中的获胜算法,分为Argon2d、Argon2i和Argon2id。
- 提供高安全性和灵活性,能够抵抗各种攻击(如侧信道攻击)。
哈希不可逆
彩虹表
加解密
对称加密
加解密key相同
非对称加密
加解密key不同
一个挖洞思路
抓小程序登陆包(手机号一键登录)——>找到session_key,偏移量iv—>利用脚本或者bp插件加密目标手机号——>修改数据包——>实现未授权访问
session
Session是在服务器端维护的用户状态。它通过一个唯一的会话ID(通常存储在Cookie中)将用户的每个请求关联起来。以下是一些关键点:
- 存储位置:Session数据存储在服务器端,通常在内存或数据库中。
- 数据量限制:Session数据量较大,不受客户端存储限制。
- 使用场景:
- 用户身份验证:在用户登录后维护其登录状态。
- 购物车:跟踪用户添加到购物车中的商品。
- 临时数据存储:在多步骤表单中保存临时数据。
- 生命周期:
- 会话超时:服务器会设置会话的超时时间,如果用户在指定时间内没有活动,会话将失效。
- 手动销毁:用户注销时,会话可以手动销毁。
- 安全性:Session数据存储在服务器端,比Cookie更安全,但需要保护会话ID不被劫持。
工作原理
- 创建会话:用户首次请求时,服务器创建一个会话并生成一个唯一的会话ID。
- 返回会话ID:服务器将会话ID返回给客户端,通常存储在Cookie中。
- 后续请求:客户端在后续请求中发送会话ID,服务器根据会话ID检索和维护会话数据。
cookie
Cookie是一种由服务器发送并存储在客户端浏览器中的小数据文件。它们用于在不同请求之间保持状态。以下是一些关键点:
- 存储位置:Cookie存储在客户端的浏览器中。
- 数据量限制:每个Cookie的大小通常限制为4KB。
- 使用场景:
- 身份验证:存储用户登录凭证。
- 用户偏好:保存用户选择的界面语言、主题等。
- 追踪和分析:用于广告跟踪和分析用户行为。
- 生命周期:
- 会话Cookie:在浏览器关闭时自动删除。
- 持久Cookie:指定了过期时间,可以在多个会话中保留。
- 安全性:Cookie数据容易被窃取或篡改,通常需要通过HTTPS传输和设置
HttpOnly
和Secure
属性来提高安全性。
比较与结合
- 存储位置:Cookie在客户端,Session在服务器端。
- 安全性:Session更安全,因为数据存储在服务器端;Cookie容易被窃取,需要额外的安全措施。
- 数据量:Cookie有存储限制(约4KB),Session可以存储更多数据。
- 生命周期:Cookie可以持久化,Session通常在会话结束时或超时后失效。
结合使用:
- 身份验证:登录时服务器创建会话,并将会话ID存储在Cookie中。后续请求中,服务器根据会话ID识别用户。
- 持久化会话:可以使用持久Cookie来保存会话ID,使得用户在关闭浏览器后重新打开时仍然保持登录状态。