IOT
last dance
SA
定义了key management , security protocols(AH,ESP), security policies(type of encryption and authentication to be used), direction of traffic(one-direction , inbound and outbound 都需要).
SA one-direction
Initiator(I) -> Responder(R)
transport mode
tunnel mode
IPsecs
- Transport Mode vs Tunnel Mode: transport只加密payload(数据),tunnel model 同时加密head和payload。 AH 无论用哪个model都不可以加密。上诉情况是指ESP。
- AH(Authentication Header):
- data origin authentication 数据来源认证
- data integrity 完整性
- anti-replay 防重放 (SequenceNumber),IPsec header中有一个每个data package 的唯一序列号。从SA第一个数据报开始。
- does not provide confidentiality protection 不提供保密性保护
- outboard(sender)
- SA lookup : SA 由key , security protocal(AH, ESP), security parameters index(SPI)组成。
- 生成序列号
- 计算MAC
- inboard(receiver)
- Resumably(重组):较大数据需要被分割fragmented, 所以收到后要reassemble重组。
- SA lookup : receiver 确定是正确的SA.
- Sequence Number Verification
- MAC 验证: 确保信息没有被修改。
- ESP(Encapsulating Security Payload):
- outboard SA lookup 后面加密。 encrypt-then-mac 比mac-then-encrypt 或者mac-and-encrypt 更安全。在密码文本上计算mac,防止padding oracle attack(填充神谕攻击)
- inboard MAC 之后解密。
- 比AH authentication认证更窄,因为AH保护所有数据,ESP不保护head。不需要confidentiality保密的时候AH是一个合适的协议。
CA 和 KDC
CA 是 asymmetric 的 , KDC 是 symmetric的。
Hash , MAC , HMAC
Mac 不能提供 confidentiality, 因为没有加密
HMAC 加密的Hash function 和 key
Security Requirements/Properties of Hahs(安全特性)
- Preimage resistant(one-way单向性): 无法反向。
- 2nd preimage resistant(week coliision resistance弱碰撞性): hash 很难对应两个plaintext。
- Collision resistance (strong collision resistance强抗碰撞): 两个plaintext 很难找到相同的hash。
HMAC
HMAC(K, M)= H[(K+ XOR opad) || H[(K+ XOR ipad) || M]];
CBC-MAC
Attack
Replay attack: eve拦截了data package 并且transmit很多次,让recipient以为自己收到了很多次。
padding oracle attack填充神谕攻击: eve利用解密过程中的错误信息来得到plaintext的内容。通常是mac直接通过plaintext得到而造成的。
meet-in-the-middle attack: 发生在双重加密之中。对前半段解密,后半段猜测为加密的信息进行加密。两者重合,寻找密钥。证明了双重加密无法提供两倍的安全性,所以三重。
cookie hijacking: 会话劫持,如果信息都暴露通常也伴随着被会话劫持。
brute force attack:
dictionary Attack: eve尝试生日,常见组合来破解密码。
rainbow table attack : 预先计算好的表,反转加密的hash function, 就是破解hash值的dictonary attack.
security properties
integrity : 完整性 Hash.
confidentiality : 保密性
authenticity : 验证来源,CA.
non-repudiation: 不可抵赖性, 通常通过digit signature.
authorization: 授权。不同的用户有不同的权限。
AES(block cipher)
DES 8 bytes block , AES 16 bytes block.
formula
- EDE2(triple DES using 2 keys) : C = EK1(DK2(EK1(M)))
- EDE3(triple DES using three keys): C = EK3(DK2(EK1(M)))
- AES
- ECB : Cn = E(K, Mn) ; Mn = D(K, Cn); n = {1, 2, …}. (别忘了padding)
- CBC : Ci = E(K , Mi XORCi-1), where C0 = IV (Initialization Vector) ; Mi = D(K, Ci) XOR Ci-1 , M0 = IV (别忘了padding)
- CTR : Ci = E(K, Counter + i) XOR Mi; i = {1, 2, …}. Mi = E(K, Counter + i) XOR Ci ; i = {1, 2, …}.
Stream Cipher
流密码是一种对称密钥加密算法,一次对明文数据进行加密,每次加密一个比特或字节。它们通过生成一个密钥流进行操作,密钥流是由秘密密钥产生的一个比特或字节序列。然后,密钥流与明文使用位XOR操作相结合,产生密码文本。å
优点
Bitwise XOR 效率高
缺点
- Key length 密钥必须和明文一样长,这在大多数应用场景中是不现实的
- 如果同一个密钥被用于多个明文,流密码就会受到攻击。能够获得两个明文的XOR(M1 XOR M2)的攻击者,如果能够获得另一个plaintext及其相应的密码文本(M1和C1),就可以恢复其中一个明文。这是因为将M1与C1进行XOR(即M1 XOR K)会得到密钥K,然后攻击者可以使用K来解密C2(即M2 XOR K)并恢复M2。
stream和block 的区别
- block 对字符块进行加密,stream对单个bit\character进行加密。
UNIX
etc/shadow 存放password,只有root才有权限查看
croe: 14mo31bmRY0Yg: 12:31:Cathy Roe: /home/croe:/bin/csh
- unix password file: /etc/passwd
- User Name : croe
- Password (14mo31bmRY0Yg) : salt value(14) + hash password
- User ID(UID) : 12
- Group ID(GID) : 31
- Home Directory (/home/croe)
- Shell (/bin/csh)
RSA step
two prime number p,q
f(n) = (p-1)(q-1)
1 < e < f(n)
d x e = 1 mod f(n)
KPU = {e,n}
KPR = {d,n}
encrypt: message M < n , C = M^e mod n
decrypt: M = C^d mod n
attack tree
shoulder surfing
false terminal
insiders
maintenacnce contractor
cryptanalysis DES
protocol failure
malware
stack overflow attack
攻击者向你的程序发送数据,通常是通过输入字段,其数量超过你的程序所期望的或可以处理的。
这些多余的数据会溢出到堆栈的邻近部分。如果攻击者精心设计了他们的输入,他们可以用他们输入的一些恶意代码的地址覆盖堆栈上的一个函数的返回地址。
当函数执行完毕后,它不是返回到它被调用的地方,而是返回到新的返回地址所指定的位置–这就是恶意代码。这可能允许攻击者获得对系统的未授权访问或造成其他类型的损害。
这就是为什么它被称为堆栈溢出攻击 – 因为攻击者用数据溢出了堆栈的一部分,导致它溢出并覆盖了关键信息。
这是对堆栈溢出攻击如何工作的一个非常基本的描述。这种攻击有许多变化,防御它可能很复杂。
prevent
Stackguard: 这个系统在函数的执行过程中,在返回地址之前的内存空间中插入一个已知的值,通常称为金丝雀。当函数结束时,将检查金丝雀的值。如果该值发生了变化,程序就知道发生了缓冲区溢出,可以停止执行,防止溢出造成更大的破坏
Data Execution Prevention: 这种机制将内存的区域标记为不可执行。这意味着,即使攻击者成功地将恶意代码注入这些区域,系统也不会执行它,从而挫败了攻击
Address Space Randomization: 这种技术将内存中不同元素(如堆栈、库等)的位置随机化。这使得攻击者更难预测在哪里注入恶意代码,或关键数据结构的位置,增加了成功执行缓冲区溢出攻击的难度