630 likes | 787 Views
Internet 安全协议与标准 第 4 课. 唐礼勇 博士 tly@infosec.pku.edu.cn. 安全协议基础. Agenda. 何谓协议 Base64 编码 加密算法同明文相关的几个问题 一个简单协议的分析. 安全消息系统 - 发送方. 安全消息系统 - 接收方. 安全消息系统 - 存在的问题. 对单条消息工作得很好 可方便地用于电子邮件、文件等的安全传送 对要传输任意信息不适用 交互式应用 引入一个简单的安全协议 (TSP: Toy Security Protocol) 不需为每个数据包都动用昂贵的公开密钥操作 实现证书发现.
E N D
Internet安全协议与标准第4课 唐礼勇 博士 tly@infosec.pku.edu.cn
Agenda • 何谓协议 • Base64编码 • 加密算法同明文相关的几个问题 • 一个简单协议的分析 Internet安全协议及标准
安全消息系统-发送方 Internet安全协议及标准
安全消息系统-接收方 Internet安全协议及标准
安全消息系统-存在的问题 • 对单条消息工作得很好 • 可方便地用于电子邮件、文件等的安全传送 • 对要传输任意信息不适用 • 交互式应用 • 引入一个简单的安全协议(TSP: Toy Security Protocol) • 不需为每个数据包都动用昂贵的公开密钥操作 • 实现证书发现 Internet安全协议及标准
TSP (1) • 基本步骤 • 假设通信双方:Alice, Bob • 握手(Handshake) • Alice和Bob使用他们的证书和私钥来对对方进行身份鉴别并交换共享密钥 • 导出密钥(Key derivation) • Alice和Bob使用他们达成一致的共享密钥导出一组用于保护将要传输的数据的密钥 • 数据传输(Data transfer) • 将要传输的数据分割成一系列的记录,并对每条记录加以保护 • 关闭连接(Connection closure) • 使用特殊的、经过保护的关闭消息,安全地关闭连接 Internet安全协议及标准
Hello Certificate Encrypt(Bob,MS)=EMS TSP (2) • 握手阶段(Handshake) Bob Alice 单向鉴别 Internet安全协议及标准
Hello Certificate,nonce Sign(Alice,Encrypt(Bob,MS)) TSP (2) • 握手阶段(Handshake) Bob Alice 双向鉴别 Internet安全协议及标准
TSP (3) • 制作一组密钥 • 原则上,使用同一个密钥来完成不同类型的加密操作被认为是糟糕的思想 • 每个方向上需要两个密钥,分别用于加密和消息鉴别(MAC) • 可通过密钥导出函数(KDF)由MS和nonce导出 • KDF一般基于Hash算法 • 一种最简单的KDF可能(当然现实的协议应该用更好的)如下: • Ecs=Hash(MS,nonce,”ECS”) • Mcs=Hash(MS,nonce,”MCS”) • Esc=Hash(MS,nonce,”ESC”) • Msc=Hash(MS,nonce,”MSC”) Internet安全协议及标准
TSP (4) • 数据记录 • 如何对数据打包 • 设想成在传输数据时对恒定的数据流加密 • MAC如何处理?放最后吗? • 解决方法 • 将数据分割成一系列记录,每个记录自带MAC • 记录大小 • 定长:不经济 • 理想的应是变长记录,加上长度字段 • 记录格式 • 长度 + 数据 + MAC • MAC计算 • M=MAC(Mx,D) Internet安全协议及标准
TSP (5) • 序号 • 重放、删除、重排攻击 • 需要增加序号 • 序号必须是MAC输入的一部分 • 可以放在记录中 • 在基于TCP的连接中,也可以使用隐含序号 • MAC的计算 • M=MAC(Mx, Sequence || D) Internet安全协议及标准
TSP (6) • 控制信息 • 如何防止攻击者恶意切断连接 • 需要有一种机制使得Alice能告诉Bob(或反之),她已完成数据传送 • 两种方法 • 传送长度为0的记录 • 增加类型字段 • 增加类型字段后的记录格式 • 长度 + 序号 + 类型 + 数据 + MAC • 类型为0:普通数据 • 类型为1:结束记录 • 类型为其他:报告错误信息 • MAC的计算 • M=MAC(Mx, Sequence || Type || D) Internet安全协议及标准
Hello Type 0, Seq 1, Data Type 0, Seq 2, Data Type 0, Seq 3, Data Type 1, Seq 4, Close Type 0, Seq 1, Data Type 1, Seq 2, Close Certificate,nonce Sign(Alice,Encrypt(Bob,MS)) TSP – 完整图示 Bob Alice Internet安全协议及标准
TSP – 小结 • 实际上,TSP已经包含了SSL绝大多数的核心功能 • 握手 • 密钥交换 • 双向鉴别 • 保密传输 • 遗漏的部分 • 不完整,不包括具体实现细节 • 数据结构定义 • 每一字段大小 • 使用何种算法 • 涉及到数据结构表示、翻译等问题 • 更重要的是 • 缺少协商(negotiation)功能 • 涉及到Policy/Mechanism的问题 Internet安全协议及标准
协议实现中的同消息传递有关的问题 • 可靠传输/不可靠传输 • 发送方能否知道传输中的错误 • 如果不能保证可靠传递,应用程序必须自己处理应答 • 阻塞/非阻塞 (Blocking/Nonblocking) • 非阻塞 • 发出消息,然后返回 • 更加灵活,但难以调试 • 阻塞 • 发出消息,等待发送成功 Internet安全协议及标准
Agenda • Abstract Syntax Notation One (ASN.1) • Overview • 类型和值定义 • 简单类型 • 构造类型 • Basic Encoding Rules (BER) • Overview • Type-Length-Value/Identifier-Length-Content • 编码示例 • 其他编码方式 • Distinguished Encoding Rules (DER) • ASN.1开发流程 Internet安全协议及标准
ASN.1 - Overview • 一种独立于机器的描述语言,用于描述在网络上传递的消息 • ITU-T(X.680)和ISO (ISO 8824-1)标准 • 定义应用程序数据的抽象语法 • 定义应用程序数据结构和表示协议数据单元(PDUs) • 独立于机器、语言及应用程序内部表示 • ASN.1特别适合表示现代通信应用中那些复杂的、变化的及可扩展的数据结构 • 类似标准有 • IDL • XDR • XML • ASN.1 可分为两个部分 • 语法规则:从数据类型、内容顺序或结构等方面来描述消息的内容 • 编码规则:如何编码实际消息中的数据 Internet安全协议及标准
ASN.1定义示例 • 表达简单和复杂类型的能力 • 可对类型根据大小及(或)数值进行约束 • 也可以施加更强的约束 • 字段可标记为 OPTIONAL • 大写开头表示类型名,小写开头的表示变量名/字段名 Age ::= INTEGER (0..120) User ::= SEQUENCE { name IA5String (SIZE(1..128)), age Age DEFAULT 18, address IA5String OPTIONAL, ... } Internet安全协议及标准
使用ASN.1的标准及应用 • X.400消息处理系统/X.500目录服务 • 基于LDAP的目录服务/X.509数字证书 • RSA公开密码标准 • 密钥的存储及传递/证书 • SET • 安全电子商务 • H.323/T.120多媒体通信标准 • Unicode标准 • 简单网络管理协议(SNMP) • MIB • SNMP PDUs Internet安全协议及标准
ASN.1术语 • 抽象语法(Abstract Syntax) • 描述通用数据结构 • 允许定义数据类型和值 • 数据类型(Data Type) • 值的集合,可以是简单类型或结构类型 • 可以对数据类型命名 • 编码(Encoding) • 用于表示数据值的字节序列 • 编码规则(Encoding Rules) • 给出从一种语法到另一种的映射方法 • 传输语法(Transfer Syntax) • 位模式(Bits pattern) • 描述数据是在传输时是如何表示的 Internet安全协议及标准
User User user presentation mapping user presentation mapping Local storage (e.g, MIB) Local storage (e.g, MIB) Application component Application component local mapping local mapping Abstract Syntax (e.g., ASN.1) encoding rules encoding rules data transfer component (e.g, TCP, OSI session) data transfer component (e.g, TCP, OSI session) Transfer Syntax (e.g., BER) Abstract & Transfer Syntaxes Internet安全协议及标准
ASN.1模块定义 • 模块(module):ASN.1规范中的基本构造块 • 模块定义格式如下: <modulereference> DEFINITIONS ::= BEGIN EXPORTS IMPORTS AssignmentList END Definitions in this module that may be imported by other modules. Definitions that are to be imported from other modules. Type assignments, value assignments, and macro definitions that are defined in this module. Internet安全协议及标准
ASN.1简单类型(1) • 基本类型 • BOOLEAN • INTEGER • ENUMERATED • REAL • BIT STRING • OCTET STRING • 字符串类型(ISO10646-1的子集) • NumericString (0-9,<space>) • PrintableString (0-9,A-Z,a-z,<space>,<s[ecial> • VisibleString • GraphicString • UTF8String • IA5String (ASCII) Internet安全协议及标准
ASN.1简单类型(2) • 对象类型 • OBJECT IDENTIFIER • 对象标识符:一个任意长的非负整数序列,用于标记对象(如算法等) • ObjectDescriptor • 其它类型 • NULL • 空值 • UTCTime • yymmdd hhmm[ss] <local offset from UTC> • GeneralizedTime • yyyymmdd hhmm[ss] <local offset from UTC> • 强制从2050年开始 Internet安全协议及标准
ASN.1类型定义 • 语法: <type name> ::= <type> • 示例: Counter ::= INTEGER IpAddress ::= OCTET STRING Months ::= ENUMERATED { january (1), february (2), march (3), april (4), may (5), june (6), july (7), august (8), september (9), october (10), november (11), december(12) } Internet安全协议及标准
ASN.1子类型定义 • 语法:<subtype name> ::= <type> (<constraint>) • 示例: Counter ::= INTEGER (0..65536) IpAddress ::= OCTET STRING ( SIZE(4) ) Spring ::= Months (march | april | may) Summer ::= Months (june | july | august ) SmallPrime ::= INTEGER ( 2 | 3 | 5 | 7 | 11 ) ExportKey ::= BIT STRING ( SIZE(40) ) Internet安全协议及标准
ASN.1赋值(1) • 语法:<value name> <type> ::= <value> • 示例: ipInReceives Counter ::= 2450 ipRouteMask IpAddress ::= ‘FFFFFF00’H currentMonth Months ::= july currentTime UTCTime ::= “030708094018+0800” name VisibleString ::= “John” married BOOLEAN ::= TRUE faxMessage BIT STRING ::= ‘01100001101’B Internet安全协议及标准
ASN.1赋值(2)OBJECT IDENTIFIER internet OBJECT IDENTIFIER ::= { iso(1) org(3) dod(6) 1 } private OBJECT IDENTIFIER ::= { internet 4 } RSA公司Security OID: { iso(1) member-body(2) US(840) 113549 } Internet安全协议及标准
ASN.1结构类型(1)SEQUENCE • 对应于C语言中的struct • 类型定义 UserAccount ::= SEQUENCE { username PrintableString, password PrintableString, accountNr INTEGER } • 赋值 myAccount UserAccount ::= { username “tly”, password “guesswhat”, accountNr 2345 } Internet安全协议及标准
ASN.1结构类型(2)SEQUENCE OF • 对应于C语言中的数组 • 类型定义 MemberCountries ::= SEQUENCE OF PrintableString AccountRegistry ::= SEQUENCE OF UserAccount • 赋值 eastAsia MemberCountries ::= { “China”, “Japan”, “Korean”, “DPR” } Internet安全协议及标准
ASN.1结构类型(3)SET • 类似于SEQUENCE,但不考虑分量顺序 • 类型定义 UserAccount ::= SET { username [0] PrintableString, password [1] PrintableString, accountNr [2] INTEGER } • 赋值 myAccount UserAccount ::= { accountNr 2345, username “tly”, password “guesswhat” } Internet安全协议及标准
ASN.1结构类型(3)SET OF • 集合类型,每一分量类型相同,不考虑顺序 • 类型定义 Keywords ::= SET OF PrintableString • 赋值 someASN1Keywords Keywords ::= { “INTEGER”, “BOOLEAN”, “REAL” } Internet安全协议及标准
BER-Overview • BER – 基本编码规则(Basic Encoding Rules) • ITU-T(X.690)和ISO(8825-1)标准 • 一种编码规格说明 • 描述如何将ASN.1类型的值编码成字节串(string of octets)的方法 • 基于一种称为type-length-value (TLV)结构的方法,在ASN.1中,也称identifier-length-content(ILC) Internet安全协议及标准
BER基本编码方法 Internet安全协议及标准
Basic Encoding RulesA Schematic Representation Internet安全协议及标准
ASN.1类型标记(1)Universal Class Tags Internet安全协议及标准
ASN.1类型标记(2)Application Class Tags Internet安全协议及标准
BER中的Identifier字段 (1)Tag number < 31 Internet安全协议及标准
BER中的Identifier字段 (2)Tag number >= 31 Internet安全协议及标准
BER中的Length字段(1) Internet安全协议及标准
BER中的Length字段(2) • 短格式 • 既可用于基本类型,也可用于内容长度不超过128的构造类型 • 长格式 • 既可用于基本类型,也可用于构造类型 • 通常内容长度大于或等于128 • 不定长格式 • 仅用于构造类型 • EOC字节可看作是tag为0的基本类型,内容长度为0 Internet安全协议及标准
BER编码示例 (1)INTEGER Internet安全协议及标准
BER编码示例 (2)INTEGER • BER coding of two’s complement integers • -129: 1111 1111 0111 1111 = 0202 FF 7F • -128: 1111 1111 1000 0000 = 0201 80 • -127: 1111 1111 1000 0001 = 0201 81 • -1: 1111 1111 1111 1111 = 0201 FF • 0: 0000 0000 0000 0000 = 0200 • 1: 0000 0000 0111 1111 = 0201 01 • 127: 0000 0000 0111 1111 = 0201 7F • 128: 0000 0000 1000 0000 = 0202 00 80 • 129: 0000 0000 1000 0001 = 0202 00 81 Internet安全协议及标准
BER编码示例 (3)SEQUENCE Internet安全协议及标准
BER编码示例 (4)OBJECT IDENTIFIER Internet安全协议及标准
BER编码示例 (5)OBJECT IDENTIFIER • Coding of OID Root • ccitt(0): Z = Y {0..39} • iso(1): Z = 40 + Y {40..79} • joint-iso-ccitt(2): Z= 80 + Y {80..119} • Coding of OID nude numbers • 类似于Identifier字段中的Tag编码 • Range {0..127}: • 0XXX XXXX • Range {128..16383}: • 1XXX XXXX 0XXX XXXX • Range {16384..2097151}: • 1XXX XXXX 1XXX XXXX 0XXX XXXX • 例:RSA数据安全公司 {1 2 840 113549} • 06062a86 4886 f7 0d Internet安全协议及标准
BER编码存在的问题 • 不唯一 • 同一个值可能有超过1种合法的编码; 灵活,但容易造成混淆 • 示例 • BIT STRING值 01101110 01011101 11 • BIT STRING编码中,在长度字段后的第一个字节给出了最后一个字节中未用到的位数(本例中为6) • 0304 06 6e 5d c0 (用0填充,短格式) • 0304 06 6e 5d e0 (用100000填充) • 0381 04 06 6e 5d e0 (长格式) • 2309 (构造式编码) 0303 00 6e 5d (“0110111001011101”+”11”) 0302 06 c0 • 解决方案(两种方向) • DER: BER子集,只使用定长编码 • CER: BER子集,基于不定长编码 Internet安全协议及标准
DER – Distinguished Encoding Rules • DER (Distinguished Encoding Rules) • BER的子集,增加某些限制 • DER附加规则 • 当长度在0到127之间时,长度字段必须使用短格式 • 当长度是128或者更长时,长度字段必须使用长格式,同时长度必须以最小数目的八位组来编码 • 对于从简单字符串类型衍生出来的简单字符串类型和隐式标记类型,必须使用基本的定长方法 • 对于结构类型、从结构类型衍生出来的隐式标记类型,以及从任何类型衍生出来的显式标记类型,必须使用构造的定长方法 • 对于特殊类型,另有限制 • BIT STRING: 必须用0填充 • SEQUENCE [OF]中的OPTIONAL和DEFAULT限定符 • SET [OF]除同SEQUENCE相同的规定外,各分量要求以标记的升序排列 Internet安全协议及标准