Open Supervised Device Protocol (OSDP) 总结

简介性资料

What Is OSDP?

开放监视设备协议(OSDP)是安全行业协会(SIA)为提高访问控制和安全产品之间的互操作性而开发的访问控制通信标准。OSDP v2.1.7目前正在成为美国国家标准协会(ANSI)认可的标准,并且OSDP正在不断改进以保持行业领先地位。

Benefits of OSDP

与普通的低安全性传统协议相比,新兴的OSDP标准提供:

  1. 安全性更高
  1. OSDP比最常见的访问控制通信协议更安全。
  2. OSDP安全通道支持高端AES-128加密
  3. OSDP持续监控布线以防范攻击威胁。
  1. 高级功能
  1. 支持先进的智能卡技术应用,包括PKI / FICAM和生物识别技术
  2. 支持设备之间的双向通信
  3. OSDP支持高级用户界面,包括欢迎消息和文本提示。
  4. OSDP使用2线而不是12线允许多点安装,监控连接以指示读卡器故障,以及连接更多现场设备的可扩展性
  1. 使用方便
  1. 视听用户反馈机制提供丰富的,以用户为中心的访问控制环境。
  2. 由于预定义了加密和身份验证,因此消除了猜测。
  3. 嵌入式设备的低成本实施。
  1. 更多互操作性
  1. 使用OSDP可以实现不同制造商的设备和解决方案之间的通信
  2. 该标准适用于外设设备(PD),如读卡器和连接安全的门及其控制面板(CP)上的其他设备。
  3. SIA在制造商和InteropFest的常规“plugfest”中推广标准 - 每年春天在内华达州拉斯维加斯举行的ISC West展会上举办的年度互操作性活动。
  4. 当TCP / IP,USB或其他常见协议不适合应用程序时,建议使用OSDP规范。
  5. OSDP规范可扩展到IP环境,OSDP WG正在努力尽快部署基于IP的OSDP。

 

所有消息,无论来源如何,都共享相同的结构。

字节

名称

含义

0

SOM

消息开始

0x53

1

ADDR

物理地址

0x00 - 0x7E

(0x7F可配置)

2

LEN_LSB

数据包长度低字节

 

3

LEN_MSB

数据包长度高字节

 

4

CTRL

消息控制信息

 

 

SEC_BLK_LEN(可选)

安全控制块的长度

 

 

SEC_BLK_TYPE(可选)

安全块类型

 

 

SEC_BLK_DATA(可选)

安全块数据

 

 

DATA(可选)

数据块

 

 

MAC [0]

Mac地址

 

 

MAC [1]

 

 

 

MAC [2]

 

 

 

MAC [3]

 

 

 

CKSUM / CRC_LSB

校验和,或CRC-16低字节

 

 

CRC_MSB(可选)

CRC-16高字节

 

通讯流程

初始化加密流程

 

 

Open Supervised Device Protocol (OSDP) 总结_第1张图片Open Supervised Device Protocol (OSDP) 总结_第2张图片 

加密通信流程讲解:

    OSDP加密通信的流程:采样对称加密的方式:使用的是AES128算法加密,AES常见的对称加密算法。还有非对称加密算法,如RSA等,还有哈希散列算法,如MD5 SHA256等(注,散列算法不属于加密算法,主要做数字签名等,具有不可逆性。

CP 主控设备 PD 子控设备
1) CP在本地生成一个随机数RND.A(8个字节的随机数),通过OSDP_CHLG(0x76)命令将RND.A传递给PD设备;
2) PD在收到CP的OSDP_CHLG命令后,在本地生成一个随机数RND.B(8个字节的随机数);然后根据RND.A、RND.B
    SCBK三个值,生成一组加密密钥组:
    S-ENC(数据机密性密钥)  = Enc({0x01,0x82,RND.A[0-5], 0,...共16字节}, SCBK);
    S-MAC1(消息认证密钥1)  = Enc({0x01,0x01,RND.A[0-5], 0,...共16字节}, SCBK);
    S-MAC2(消息认证密钥2)  = Enc({0x01,0x02,RND.A[0-5], 0,...共16字节}, SCBK);
    SERVER-CRYPTOGRAM(服务端密钥) = Enc(RND.B[0-8] || RND.A[0-8], S-ENC);
    CLIENT-CRYPTOGRAM(客服端密钥) = Enc(RND.A[0-8] || RND.B[0-8], S-ENC);
    然后将PD的cUID(客服端的序列号)和RND.B及CLIENT-CRYPTOGRAM通过OSDP_CCRYPT(0x76)命令发送给CP。
3) CP收到PD的序列号、随机数B及客服端密钥后,根据RND.A、RND.B和SCBK三个值,同样生成一组加密密钥组:
    S-ENC(数据机密性密钥)  = Enc({0x01,0x82,RND.A[0-5], 0,...共16字节}, SCBK);
    S-MAC1(消息认证密钥1)  = Enc({0x01,0x01,RND.A[0-5], 0,...共16字节}, SCBK);
    S-MAC2(消息认证密钥2)  = Enc({0x01,0x02,RND.A[0-5], 0,...共16字节}, SCBK);
    SERVER-CRYPTOGRAM(服务端密钥) = Enc(RND.B[0-8] || RND.A[0-8], S-ENC);
    CLIENT-CRYPTOGRAM(客服端密钥) = Enc(RND.A[0-8] || RND.B[0-8], S-ENC);
    然后判断生成的CLIENT-CRYPTOGRAM(客服端密钥)与接收的客服端密码是否相同,若相同则通过OSDP_SCRYPT命
    令将CP生成的SERVER-CRYPTOGRAM(服务端密钥)发送给PD设备。
4) PD接收到CP的服务器密钥,将其与本地生成的服务器密钥比较,若相同则通过OSDP_MAC_I命令返回MAC_I
    发送给CP设备。MAC_I = Enc(S-MAC1, S-SERVERCRYPTOGRAM, S-MAC2)

5) CP接收到PD是MAC_I(16个字节)数据,将其保存到CP的维护R-MAC中。使用OSDP的加密通信,在会话完成后,
    进行数据通信是一定要带上MAC,这里的MAC有点像哈希散列的效果,主要用于数据内容的数据摘要,即校验
    数据是否被修改。并且是使用上次是MAC作为当前MAC计算的依据,保证了数据包的连续性,及若其中一包消
    息,则数据通信立即停止。
    C-MAC: Command MAC (for packets from CP to PD)
    R-MAC: Reply MAC (for packets from PD to CP)
    注意:CP和PD分别各自都维护两个MAC,C-MAC和R-MAC。
    在CP中的R-MAC作为存放PD回复的R-MAC使用,并为发送的C-MAC提供加密参数。
        C-MAC = Enc(R-MAC, S-MAC1, S-MAC2, DATA, DATA_LEN);
    在PD中的C-MAC作为存放CP请求的C-MAC使用,并为发送的R-MAC提供加密参数。
        R-MAC = Enc(C-MAC, S-MAC1, S-MAC2, DATA, DATA_LEN);


    注意:在OSDP中使用加密通信时,加密块SEC_BLK_DATA[0]的值(0:代表使用SCBK_D加密,1:代表使用自定义SCBK加密)
               SEC_BLK_DATA[1]-SEC_BLK_DATA[16]为加密的SCBK的值;
    SEC_BLK_TYPE为加密的通道类型:
        0x11:新建一个会话连接,CP->PD
        0x12:回复新建会话连接,PD->CP
        0x13:确认当前会话连接,CP->PD
        0x14:回复确认会话连接,PD->CP (代表会话已完成)
        0x15:安全会话消息. 带上MAC, PAYLOAD不加密,CP->PD
        0x16:安全会话消息. 带上MAC, PAYLOAD不加密,PD->CP
        0x17:安全会话消息. 带上MAC, PAYLOAD加密,CP->PD
        0x18:安全会话消息. 带上MAC, PAYLOAD加密,PD->CP
    SEC_BLK_TYPE = 0x17 和 0x18的时候,需要对PAYLOAD数据进行加密,这个加密也是使用AES加密。
        在CP中:加密时:ICV = ~R-MAC,解密时:ICV = ~C-MAC
        在PD中:加密时:ICV = ~C-MAC,解密时:ICV = ~R-MAC
        PAYLOAD的加密:PAYLOAD-ENC = Enc(ICV, S-ENC, DATA, DATA_LEN);
        PAYLOAD的解密:PAYLOAD-DEC = Dec(ICV, S-ENC, DATA, DATA_LEN);

    由此可知:服务器密钥和客服端密钥是在会话期间使用,用于验证CP和PD之间的连接。S-MAC1 S-MAC2主要用于生成
    R-MAC和C-MAC,用于消息摘要检验。而S-ENC主要用于PAYLOAD数据加解密使用的。

一些常见术语解释:

CUID:客户端唯一标示符(可以理解为序列号),推荐为供应商代码(3),型号(1),版本(1),序列号LSB(3)。

MK:主密钥,仅在会话初始化期间使用。
SCBK: 安全通道基本密钥, 仅在会话初始化期间使用。

SCBK = Enc(cUID ||(~cUID),MK)

RND.A[8]:CP生成的8位随机数。

RND.B[8]:PD生成的8位随机数。

MAC_I:MAC_I是在安全信道会话期间使用的波动的MAC的初始值。它是通过使用S-MAC1加密在osdp_SCRYPT中接收的服务器密码来计算的,然后使用S-MAC2加密结果。

MAC_I = ENC((ServerCryptogram, S-MAC1), S-MAC2) //待验证

填充是必需的,因为AES-128算法仅在以16字节为位权的数据块上运行。
DATA字段的填充:
将字符0x80附加到数据块,然后继续附加所需的0x00字符数,以使数据块的大小可以被块大小16整除。若原始数据块的长度刚好可被16整除,如16, 32等,则将去填充扩大一倍,如原本数据块长度为16,则填充后是32。

 

安全通道建立会话示例:

共享SCBK_D密钥示例=“303132333435363738393A3B3C3D3E3F”

CP生成一个8字节的随机数:“B0B1B2B3B4B5B6B7”

osdp_CHLG(530013000D03110076B0B1B2B3B4B5B6B73177):

 在PD内:

- 生成8个字节的随机数;本次会话生成“A0A1A2A3A4A5A6A7”

- 生成会话密钥

o SMAC1 - 5e 86 c6 76 60 3b de e2 d8 be af e1 78 63 73 32

o SMAC2 - 6f da 86 e8 57 77 7e 81 13 20 35 75 82 39 17 2e

o ENC - bf 8d c2 a8 32 9a cb 8c 67 c6 d0 cd 9a 45 16 82

- 生成主机密码(保留在内存中):26 d3 35 6e 07 76 2d 26 28 01 fc 8e 66 65 a8 91

- 生成卡密码:fd e5 d2 f4 28 ec 16 31 24 71 ea 3c 02 bd 77 96

对osdp_CHLG的响应是:

53802B000D0312007600068E0000000000A0A1A2A3A4A5A6A7FDE5D2F428EC16312471EA3C02BD7796 F81E

 

 

osdp_SCRYPT(53001B000E0313007726D3356E07762D262801FC8E6665A89140B4):

在PD内:

- 验证主机(26D3356E07762D262801FC8E6665A891)发送的密码与存储在内存中的密码(请参阅osdp_CHLG)

- 生成RMAC。 RMAC是通过SMAC-1加密主机密码生成的,然后使用SMAC-2对该加密的结果进行加密。对于此示例会话,RMAC的值将为“b2 a3 00 57 eb 98 ba 22 29 ec 1f 87 56 62 b5 24”

对osdp_SCRYPT的响应是:

53801B000E03140178 B2A30057EB98BA2229EC1F875662B524 6EEB

 

解析

osdp_CHLG(530013000D03110076B0B1B2B3B4B5B6B73177):

0x53

0x00

0x13 0x00

0x0D // 1101   包含SB(1)、包含校验(1)、序列号为01

0x03 //SB长度

0x11 //SCS_11

0x00 //指定SCBK_D密钥

0x76 // osdp_CHLNG

B0B1B2B3B4B5B6B7 //8位随机数RND.A

0x31 0x73 //CRC校验码

 

对osdp_CHLG的响应是:

53802B000D0312007600068E0000000000 A0A1A2A3A4A5A6A7 FDE5D2F428EC16312471EA3C02BD7796 F81E

 

0x53

0x80 //0x00 + 0x80

0x2B 0x00

0x0D // 1101   包含SB(1)、包含校验(1)、序列号为01

0x03 //

0x12 //SCS_12

0x00 //指定SCBK_D

0x76 //osdp_CCRYPT

00068E0000000000 //8位cUID

A0A1A2A3A4A5A6A7 //8位随机数RND.B

FDE5D2F428EC16312471EA3C02BD7796 //16字节客户端密码

0xF8 0x1E //校验码

 

 

osdp_SCRYPT(53001B000E0313007726D3356E07762D262801FC8E6665A89140B4)

 

0x53

0x00

0x1B 0x00

0x0E //1110   包含SB(1)、包含校验(1)、序列号为2(10)

0x03

0x13 //SCS_13

0x00

0x77 // osdp_SCRYPT

26D3356E07762D262801FC8E6665A891 //16位服务器密码server Cryptogram

0x40 0xB4 //校验码

 

Respon 53801B000E03140178 B2A30057EB98BA2229EC1F875662B524 6EEB

0x53

0x80

0x1B

0x00

0x0E

0x03

0x14

0x01 //密码核对正确

0x78 // osdp_RMAC_I

B2A30057EB98BA2229EC1F875662B524 //16位R-MAC

0x6E 0xEB //校验码

你可能感兴趣的:(开发分享)