渗透测试简介

目标

  • 找到基础设施或应用的安全漏洞,防止被利用从而造成损失
  • 评估安全性级别
  • 识别薄弱环节
  • 提出详细的带有建议的应对措施目录

合法性

  • 法律保障:需要书面形式的委托书,在哪一时间段对哪个目标执行哪些测试,明确测试范围和过程等。
  • 定义好的范围(defined scope)
  • 定义好的测试过程(defined test process)
    • 特定的测试点
    • 可复现的结果

范围定义

攻击者模型

描述可能的攻击者、他们的访问方式、权限、前提等。

确定攻击者模型:系统需要防范哪种攻击者?

  • 外部人员,无特权(最常见的攻击者类型,没有任何系统相关的密码,不知道IP对应的系统运行什么)
  • 外部人员,有特权
  • 内部人员,无特权
  • 内部人员,低权限
  • 内部人员,高权限(系统管理员)

测试计划中需要明确一个或多个角度,从而推导出测试覆盖面(test coverage)和测试深度(test depth)。

测试覆盖

确定有多少组件、哪些组件需要被测试,确定测试中被研究的测试对象,例如:

  • 单个组件(Web应用、服务器)
  • 单个接口(API、无线通信接口/Funkschnittstelle/air interface)
  • 端到端测试(从设备、API、到Web应用,检查系统中涉及到的所有组件和接口)

部分系统测试:例如构建新的组件时对不同供应商的产品进行评估。不够全面。

端到端测试:考虑系统整体。但是开销更大、更昂贵。

增量测试(delta test):适合对于经过少量更新的系统进行测试。

继续阅读“渗透测试简介”

接收方匿名性保护

Broadcast

广播是保护接收者匿名性的方法,通过广播所有参与者都能收到消息,即使发送者也不知道接收者的身份。

性能

通常广播相比点到点通信会需要更高的吞吐量。

寻址

  • 显式地址(explicit address):并不总是必要的,例如IP协议的广播地址。用于减小广播的代价,但是难以提供匿名性。

  • 隐式地址(implicit address):接收者(addressee)站的属性,用于进一步处理。

    • 不可见地址(invisible address):即使同一个地址发送两次,也没有观察者能发现,即地址的重用看起来就像使用了另一个地址。

    实现方法:发送方和接收方协商密钥(公钥或私钥),解密后如果消息有意义,则就是发给自己的。

    • 可见地址(visible address):与不可见地址相反,观察者可以发现某些信息的地址相同。

    实现方法:发送方和接受方协商一个随机数添加在明文消息里,其他人就不知道消息是发送给谁的。

一些要注意的问题:

  • 使用不可见的隐式地址,如何判断解密后的消息有意义?

    1. 加tag,使用长度足够的tag就可以抗碰撞(生日悖论)

    2. 使用哈希或消息认证码,计算

      enc(random_num, msg, hash(random_num, msg))

      enc(key, msg, MAC(key, msg))

  • 使用可见的隐式地址,随机数的生成?

    • 需要注意每个随机数只能用一次,否则会导致linkable的问题
    • 因此通信双方可以协商使用同一个seed生成随机数
  • 不可见地址的代价比可见地址高很多,因为前者涉及到对每一条消息的解密,而后者只需要对比随机数。

地址分发(address distribution):根据地址与身份的关联性公开与否,可以将地址分为公开地址(public address)私有地址(private address)

public address private address
implicit invisible address 使用公钥加密,开销非常大。但是可以用于第一次通信时双方交换对称密钥或随机数seed。 私钥加密。开销大(但是当然比公钥加密小一点)。
implicit visible address 地址可见,且地址与身份之间的关联性是公开的,会暴露信息。不应该被使用。 获得对称密钥或随机数生成seed后可以使用。使用后需要更换随机数。

不可见公开地址的最高效的实现方法就是采用公钥加密系统

不可见私有地址的实现方法是私钥加密,因为私钥只有通信双发持有(private),且通信的地址是明文经过私钥加密生成的(invisible)。

可见私有地址的实现方法就是使用同一个seed生成伪随机数,每次通信使用不同的随机数。

继续阅读“接收方匿名性保护”

隐私增强技术基础

安全与密码学II的课程主要关注隐私增强技术,这是课程第一部分,关于基础概念、保护目标和攻击者模型等的介绍。

上学期的SaC I主要介绍了安全与密码学的基础知识,包括保护目标、攻击者模型以及保护机制,根据保护目标把方法分为两类——认证和加密,介绍了不同的密码学方法和实现原理。这学期的SaC II主题为“匿名和不可观测通信(Anonymous & Unobservable Communication)”。

隐私增强技术(Privacy Enhancing Technologies, PETs)

包含两个子领域:

  • 信息抑制工具(information suppression tools):又称为不透明工具(opacity tools),关注匿名化、假名化(pseudonymization)、混淆(obfuscation)。通过移除不重要的数据,防止攻击者学习到重要的信息。
  • 透明性增强工具(transparency-enhancing tools, TETs)
    • 告知用户收集了哪些数据、收集目的等
    • 告知数据收集的影响,需要“informed consent”
    • 检查数据收集是否符合法律规范
    • 各种技术:Secure Logging, Audits, Quality Seals, Policies…

保护目标

SaC II主要学习的是隐私增强技术,隐私是我们的保护目标,但是没有明确的定义。所以我们通过保护匿名性不可观测性来实现保护隐私性。

  • 匿名性(Anonymity):确保用户在使用一个资源或服务时不会暴露他的身份,即使是通信参与者也不能发现对方的身份。
  • 不可观测性(Unobservability):确保用户在使用一个资源或服务时,他人无法观测到正在使用的资源或者服务。未参与通信者既不能观察到消息的发送也不能观察到消息的接收。

还有一个保护目标为隐藏性(Hiding),它与不可观测性的区别在于,前者强调消息的内容是隐藏的,后者强调使用资源这一事实无法被观测到。

继续阅读“隐私增强技术基础”

基于模二次剩余的对称与非对称加密算法

首先介绍有关模二次剩余的相关数论基础。然后介绍了BBS伪随机数发生器的构造以及使用BBS PRNG的对称机密系统。此外介绍因数分解假设以外的另一种假设——二次剩余假设在公钥密码系统的应用,即Rabin算法。

二次剩余的数论基础

二次剩余的定义

QR_n \coloneqq {x \in Z_n^* \ | \ \exists y \in Z_n^*: y^2 \equiv x \ \ mod \ n}

给定模n乘法群,如果对于x \in Z_n^*,存在群元素y满足y^2 = x,则x是一个二次剩余,此时y是x的一个根。QR_n是模n二次剩余的集合。

一个元素不是二次剩余就是二次非剩余,集合记作QNR_n

QR_n乘法群

对于QR_n的元素x_1x_2有以下性质:

  • x_1 \cdot x_2 \in QR_n

    两个群元相乘结果仍在群中

  • x_1^{-1} \in QR_n

    存在逆元

素数模二次剩余Z_p^*

当p>2且为素数时,Z_p^*中每个二次剩余都有两个平方根。因此平方取模的函数具有“二对一”的映射关系,这意味着Z_p*中恰好有一半的元素为二次剩余,也即|QR_p| = \frac{p-1}{2}

讲义上给出的是Z_p域,有小于等于2个根。

x \not\equiv 0, p \ne 2时,有0或2个根。

Jacobi符号

设p>2且为素数,x \in Z_p^*,Jacobi符号定义为:

\Bigl(\frac{x}{p}\Bigr) \coloneqq \begin{cases}
    1 &\text{if } x \in QR_p\\
    -1 &\text{else}
\end{cases}

实际上还有一个符号称为Legendre符号,要求模数必须为奇素数。而Jacobi符号的模数可以是任何正整数。所以Jacobi符号是Legendre符号的推广,当模数为奇素数时,Jacobi符号等于Legendre符号。

欧拉准则 Euler Criterion(模p二次剩余的判断)

\Bigl(\frac{x}{p}\Bigr) \equiv x^{\frac{p-1}{2}} mod p

欧拉准则用于判断x是否是素数p的二次剩余

继续阅读“基于模二次剩余的对称与非对称加密算法”

Basics of Cryptology 密码学基础

本文介绍密码学基础,对称及非对称算法用于加解密或身份认证、密钥生成和密钥分发问题。

保护目标

密码学可实现的保护目标:

  • 机密性,称为隐蔽(concealment)
  • 完整性,称为身份认证(authentication)

密码学无法实现的保护目标:

  • 可用性

Kerckhoff原则

加密方法一定不能是保密的,且一定要很容易被敌人获取到。

The cipher method must not be required to be secret, and it must be able to fall into the hands of the enemy without inconvenience.

因此:

  • 只能使用公开的、经过良好分析的算法和协议
  • 不要相信“超级安全”但保密的算法
  • 不要试图设计自己的算法(除非你是密码学专家)
  • 结合不同的安全模块并不一定会得到一个完全安全的系统,因此在组合时需要谨慎

    Combining secure building blocks does not neccessarily lead to a secure overall system.

继续阅读“Basics of Cryptology 密码学基础”

分组密码工作模式

根据每次加密的单位数据长度可以将对称加密算法分为流密码(Stream Cipher)和分组密码(Block Cipher)。本文讨论分组密码中算法对数据分组加解密的几种不同处理方式,称为分组密码的工作模式。

分组密码与流密码

分组密码

分组密码中,明文被分成长度相等的分组,若末尾不够组成一个分组则使用预设的内容进行填充,然后用相同的算法进行加密并组合形成密文。

分组密码包含以下几种常见的工作模式:

  • ECB(Electronic Codebook,电子密码本)
  • CBC(Cipher Block Chaining,密码分组链接)
  • CFB(Cipher Feedback,密码反馈)
  • OFB(Output FeedBack,输出反馈)
  • CTR(Counter,整数计数)
  • PCBC(Plain/Propagating Cipher Block Chaining,明文密码分组链接)
  • OCFB(Output Cipher FeedBack,输出密码反馈)

流密码

因为会介绍到具有流密码相似性质的CBC、CFB和OFB,所以顺便介绍一下流密码的分类。

流密码总体分为两类:同步流密码和自同步流密码(也即异步流密码)。

同步流密码
同步流密码指在该密码系统中,密钥流的生成独立明文消息和密文。同步要求严格,需要无错误传播,单个字符的错误不影响其他位。

自同步(self synchronization)流密码或异步流密码
其特点是具有记忆元件,密钥流由密钥和固定数量的之前的密文字符生成。自同步流密码在由于插入、删除或替换导致失去同步后,接受端接收到一定数量的正确密文后可以自动恢复同步,同步后的密文可以正常被解密。

继续阅读“分组密码工作模式”

RSA安全性的相关问题

语义安全性 Semantic Security

除了信息论安全、密码学健壮,我们还需要讨论算法的语义安全性。假设攻击者只具有有限的计算资源,语义安全性指在已知密文的情况下无法获得明文的信息。

基于游戏的证明(定义)

攻击者可以选择两个长度相同的明文m_0m_1交给挑战者进行加密,挑战者从两个明文中选择其一进行加密,然后攻击者根据加密后的数据判断哪一个明文被加密。

W_0W_1分别表示猜错和猜对,则攻击者的优势为:

Advantage [A, E] \coloneqq |Pr[W_0] - Pr[W_1]|

当对于所有高效的算法A,攻击者的优势Advantage[A, E]的值几乎为0(negligible),也即Pr[W_0] \thickapprox Pr[W_1]的时候,称加密方法E是语义安全的。

RSA的语义安全性

考虑RSA的语义安全性证明:攻击者可以对两个明文m_0m_1都进行加密,因为公钥是公开的,从而得到对应的密文x_0x_1。此时把x_0x_1x_b进行对比就可以知道挑战者对哪个明文进行了加密操作。

因此,传统RSA不具有语义安全性。导致这种缺陷的原因是,其加密算法具有确定性(deterministic),我们需要一种非确定性加密方案(例如概率加密)来解决这个问题。一种简单的思路是在加密前给明文添加随机数。

继续阅读“RSA安全性的相关问题”

密码学健壮的系统与RSA

Cryptographically Strong Systems

密码学健壮的系统:
使用复杂的数学问题设计密码系统,使破解密码系统的难度和求解此类数学问题的难度一样大。

数学秘密:用于解密、签名等等
素数在许多密码系统(尤其是非对称密码系统)中发挥重要作用

假设

因数分解假设(Factorization)
n = p \cdot q
已知n,难以找到p和q两个素数(当p、q足够大时难以暴力破解)
n是密钥对的公开部分。

此外还应该有一些特殊的属性:
例如模m同余:
a \equiv b \mod m

RSA算法中计算模反元素即找到与e同余的一个数

继续阅读“密码学健壮的系统与RSA”

Authentication 身份认证:Admission and Access Control

认证:准入与访问控制

Admission Control 准入控制:只与授权的对象通信

Access Control 访问控制:只能在授权的对象上执行操作

密码散列函数(Cryptographic Hash Function/哈希函数)

单向函数

对于单向函数f:

  • 计算f(x) = y很容易
  • 而计算f^{-1}(y) = x很难

密码散列函数是单向函数。

密码散列函数的属性

碰撞抗性 Collision resistance

很难找到一对x和y,使得h(y) = h(x)y \not = x

即无法从计算角度找到任何两个哈希值都相同的独特输入。

原像抗性 Preimage resistance

在集合论中,给定一个从集合X到集合Y的映射,x属于定义域X,y属于值域Y:

  • x在该映射下有f(x)=y,则y称为x在该映射下的像
  • x称为y的原像

此处原像指散列函数的输入。

因此原像抗性指:给定散列函数的输出y,从计算角度无法找到符合该输出的输入值x,即无法计算f^{-1}(y) = x

第二原像抗性/弱碰撞抗性 Second-preimage resistance/Weak collision resistance

第二原像指另一个输入x’,使h(x') = h(x),且x' \not = x

因此第二原像抗性(或称之为弱碰撞抗性)指:给定x和散列函数h,从计算角度无法找到任何与x有着相同输出的二次输入值x’。

继续阅读“Authentication 身份认证:Admission and Access Control”

信息安全基础

本文介绍了保护目标、攻击者模型以及保护方法中非密码学部分的基础知识。

学习目标

  • 诚实以及现实的自我评估

  • 对其他人、公司、组织等的评估

  • 收集信息安全和数据保护需求的能力

    • 保护目标
    • 攻击者模型与信任模型
  • Validation & Verification,及实际和理论限制

    Validation指是否满足需求,Verification指是否符合规范

    "Validation. The assurance that a product, service, or system meets the needs of the customer and other identified stakeholders. It often involves acceptance and suitability with external customers. Contrast with verification."
    "Verification. The evaluation of whether or not a product, service, or system complies with a regulation, requirement, specification, or imposed condition. It is often an internal process. Contrast with validation."

  • 信息安全和数据保护机制(理解并开发)

继续阅读“信息安全基础”