1、书 书 书犐 犆犛 犔 中 华 人 民 共 和 国 国 家 标 准犌犅犜 信息安全技术犛犕标识密码算法第部分:算法犐 狀 犳 狅 狉犿犪 狋 犻 狅 狀狊 犲 犮 狌 狉 犻 狋 狔狋 犲 犮 犺 狀 狅 犾 狅 犵 狔犐 犱 犲 狀 狋 犻 狋 狔 犫 犪 狊 犲 犱犮 狉 狔 狆 狋 狅 犵 狉 犪 狆 犺 犻 犮犪 犾 犵 狅 狉 犻 狋 犺犿狊犛犕犘 犪 狉 狋:犃 犾 犵 狅 狉 犻 狋 犺犿狊 发布 实施国 家 市 场 监 督 管 理 总 局国 家 标 准 化 管 理 委 员 会发 布书 书 书目次前言引言范围规范性引用文件术语和定义符号算法参数与辅助函数 概述 系统参数组 辅助函
2、数数字签名生成和验证算法及流程 系统签名主密钥和用户签名密钥的产生 数字签名生成算法 数字签名生成算法流程 数字签名验证算法 数字签名验证算法流程密钥交换协议及流程 系统加密主密钥和用户加密密钥的产生 密钥交换协议 密钥交换协议流程 密钥封装机制及流程 系统加密主密钥和用户加密密钥的产生 密钥封装算法 密钥封装算法流程 解封装算法 解封装算法流程 加密算法及流程 系统加密主密钥和用户加密密钥的产生 加密算法 加密算法流程 解密算法 解密算法流程 附录(资料性附录)算法示例 犌犅犜 前言 信息安全技术标识密码算法分为两个部分: 第部分:总则; 第部分:算法。本部分为 的第部分。本部分按照 给出的
3、规则起草。请注意本文件的某些内容可能涉及专利。本文件的发布机构不承担识别这些专利的责任。本部分由全国信息安全标准化技术委员会( )提出并归口。本部分起草单位:国家信息安全工程技术研究中心、北京国脉信安科技有限公司、深圳奥联信息安全技术有限公司、中国科学院软件研究所、武汉大学、中科院信息工程研究所。本部分主要起草人:陈晓、程朝辉、张振峰、叶顶峰、胡磊、陈建华、季庆光、袁文恭、刘平、马宁、袁峰、李增欣、王学进、杨恒亮、张青坡、马艳丽、浦雨三、唐英、孙移盛、安萱、封维端、张立圆。犌犅犜 引言 在 年提出了标识密码( )的概念,在标识密码系统中,用户的私钥由密钥生成中心()根据主密钥和用户标识计算得出
4、,用户的公钥由用户标识唯一确定,由标识管理者保证标识的真实性。与基于证书的公钥密码系统相比,标识密码系统中的密钥管理环节可以得到适当简化。 年, 、 和 在日本提出了用椭圆曲线对( )构造基于标识的密钥共享方案; 年, 和 ,以及 、 和 等人独立提出了用椭圆曲线对构造标识公钥加密算法。这些工作引发了标识密码的新发展,出现了一批用椭圆曲线对实现的标识密码算法,其中包括数字签名算法、密钥交换协议、密钥封装机制和公钥加密算法等。椭圆曲线对具有双线性的性质,它在椭圆曲线的循环子群与扩域的乘法循环子群之间建立联系,构成了双线性、双线性逆、判定性双线性逆、双线性逆和 双线性逆等难题,当椭圆曲线离散对数问
5、题和扩域离散对数问题的求解难度相当时,可用椭圆曲线对构造出安全性和实现效率兼顾的标识密码。犌犅犜 信息安全技术犛犕标识密码算法第部分:算法范围 的本部分规定了标识密码算法中数字签名算法、密钥交换协议、密钥封装机制和加密算法。本部分适用于标识密码算法工程化的实现,指导标识密码算法相关产品的研制和检测。规范性引用文件下列文件对于本文件的应用是必不可少的。凡是注日期的引用文件,仅注日期的版本适用于本文件。凡是不注日期的引用文件,其最新版本(包括所有的修改单)适用于本文件。 信息安全技术分组密码算法的工作模式 信息安全技术密码杂凑算法 信息安全技术分组密码算法 信息安全技术二元序列随机性检测规范 信息
6、安全技术标识密码算法第部分:总则术语和定义 界定的以及下列术语和定义适用于本文件。为了便于使用,以下重复列出了 中的一些术语和定义。 加密主密钥犲 狀 犮 狉 狔 狆 狋 犻 狅 狀犿犪 狊 狋 犲 狉犽 犲 狔处于标识密码密钥分层结构最顶层的密钥,内容为加密主私钥和加密主公钥,其中加密主公钥公开,加密主私钥由密钥生成中心()秘密保存。用加密主私钥和用户的标识生成用户的加密私钥。在标识密码中,加密主私钥一般由通过随机数发生器产生,加密主公钥由加密主私钥结合系统参数产生。 标识犻 犱 犲 狀 狋 犻 狋 狔由实体无法否认的信息组成,如实体的可识别名称、电子邮箱、身份证号、电话号码、街道地址等,可
7、唯一确定一个实体的身份。 ,定义 发起方犻 狀 犻 狋 犻 犪 狋 狅 狉在一个协议的操作过程中发送首轮交换信息的用户。 初始向量值犻 狀 犻 狋 犻 犪 犾 犻 狕 犪 狋 犻 狅 狀狏 犲 犮 狋 狅 狉犻 狀 犻 狋 犻 犪 犾 犻 狕 犪 狋 犻 狅 狀狏 犪 犾 狌 犲;犐 犞在密码变换中,为增加安全性或使密码设备同步而引入的用于数据变换的起始数据。犌犅犜 从犃到犅的密钥确认犽 犲 狔犮 狅 狀 犳 犻 狉犿犪 狋 犻 狅 狀犳 狉 狅犿犃狋 狅犅使用户确信用户拥有特定秘密密钥的保证。 签名消息狊 犻 犵 狀 犲 犱犿犲 狊 狊 犪 犵 犲由消息以及该消息的数字签名部分所组成的一组数
8、据元素。 签名密钥狊 犻 犵 狀 犪 狋 狌 狉 犲犽 犲 狔在数字签名生成过程中由签名者专用的秘密数据元素,即签名者的私钥。 签名主密钥狊 犻 犵 狀 犪 狋 狌 狉 犲犿犪 狊 狋 犲 狉犽 犲 狔系统的签名根密钥,内容为签名主私钥和签名主公钥,其中签名主公钥公开,签名主私钥由秘密保存。用签名主私钥和用户的标识生成用户的签名私钥。在标识密码中,签名主私钥一般由通过随机数发生器产生,签名主公钥由签名主私钥结合系统参数产生。 密钥交换犽 犲 狔犲 狓 犮 犺 犪 狀 犵 犲在通信实体之间安全地交换密钥的方案,可以使通信双方在非安全通信线路上为信息传送安全地交换密钥。 密钥协商犽 犲 狔犪 犵
9、狉 犲 犲犿犲 狀 狋多个用户之间建立一个共享秘密密钥的过程,其中的任何一个用户都不能预先确定该密钥的值。 密钥派生函数犽 犲 狔犱 犲 狉 犻 狏 犪 狋 犻 狅 狀犳 狌 狀 犮 狋 犻 狅 狀通过作用于共享秘密和双方都知道的其他参数,产生一个或多个共享秘密密钥的函数。 响应方狉 犲 狊 狆 狅 狀 犱 犲 狉在一个协议的操作过程中不是发送首轮交换信息的用户。 秘密密钥狊 犲 犮 狉 犲 狋犽 犲 狔在密码体制中收发双方共同拥有的而第三方不知道的一种密钥。 消息认证码犿犲 狊 狊 犪 犵 犲犪 狌 狋 犺 犲 狀 狋 犻 犮 犪 狋 犻 狅 狀犮 狅 犱 犲;犕犃犆一种认证算法作用于特定的
10、密钥和消息比特串所得出的一段码字,以用来鉴别数据的来源和检验数据的完整性。用于求取消息认证码的函数称作消息认证码函数。符号下列符号适用于本文件。,:使用标识密码系统的两个用户。犮 犳:椭圆曲线阶相对于犖的余因子。犮 犻 犱:用一个字节表示的曲线的识别符,其中 表示犉狆(素数狆 )上常曲线(即非超奇异曲线) , 表示犉狆上超奇异曲线, 表示犉狆上常曲线及其扭曲线。犱 狊:用户的签名私钥。犌犅犜 犲:从犌犌到犌犜的双线性对。犲 犻 犱:用一个字节表示的双线性对犲的识别符,其中 表示 对, 表示 对, 表示 对, 表示 对。犌犜:阶为素数犖的乘法循环群。犌:阶为素数犖的加法循环群。犌:阶为素数犖的加
11、法循环群。犵狌:乘法群犌犜中元素犵的狌次幂,即犵狌犵犵犵烐烏烑狌个,狌是正整数。犎狏() :密码杂凑函数。犎() ,犎() :由密码杂凑函数派生的密码函数。犺 犻 犱:用一个字节表示的签名私钥生成函数识别符,由选择并公开。(犺,犛) :发送的签名。(犺,犛) :收到的签名。犐犇:用户的标识,可以唯一确定用户的公钥。犽 狊:签名主私钥。犕:待签名消息。犕:待验证消息。 狀:模狀运算。示例: 。犖:循环群犌、犌和犌犜的阶,为大于 的素数。犘狆狌 犫 狊:签名主公钥。犘:群犌的生成元。犘:群犌的生成元。犘 :由元素犘生成的循环群。狌犘:加法群犌、犌中元素犘的狌倍。狓:顶函数,不小于狓的最小整数。示例
12、:, 。狓:底函数,不大于狓的最大整数。示例: , 。狓狔:狓与狔的拼接,狓和狔是比特串或字节串。狓,狔 :不小于狓且不大于狔的整数的集合。:扭曲线参数。算法参数与辅助函数 概述第章规定了一个用椭圆曲线对实现的基于标识的数字签名算法。该算法的签名者持有一个标识和一个相应的签名私钥,该签名私钥由密钥生成中心通过签名主私钥和签名者的标识结合产生。签名者用自身签名私钥对数据产生数字签名,验证者用签名者的标识验证签名的可靠性。在签名的生成和验证过程之前,应用密码杂凑函数对待签消息犕和待验证消息犕进行杂凑计算。第章规定了一个用椭圆曲线对实现的基于标识的密钥交换协议。参与密钥交换的发起方用户和响应方用户各
13、自持有一个标识和一个相应的加密私钥,加密私钥均由密钥生成中心通过加密主私钥和用户的标识结合产生。用户和通过交互的信息传递,用标识和各自的加密私钥来商定一个只犌犅犜 有他们知道的秘密密钥,用户双方可以通过可选项实现密钥确认。这个共享的秘密密钥通常用在某个对称密码算法中。该密钥交换协议能够用于密钥管理和协商。在现代密码系统中,密钥是控制密码变换的重要参数,而且密码的安全性极大地依赖于对密钥的安全保护。密钥封装机制使得封装者可以产生和加密一个秘密密钥给目标用户,而唯有目标用户可以解封装该秘密密钥,并把它作为进一步的会话密钥。第章规定了一个用椭圆曲线对实现的基于标识的密钥封装机制。解封装用户持有一个标
14、识和一个相应的加密私钥,该加密私钥由密钥生成中心通过加密主私钥和解封装用户的标识结合产生。封装者利用解封装用户的标识产生并加密一个秘密密钥给对方,解封装用户则用相应的加密私钥解封装该秘密密钥。第章规定了一个用椭圆曲线对实现的基于标识的公钥加密算法。该公钥加密算法是上述密钥封装机制和消息封装机制的结合,消息封装机制包括基于密钥派生函数的序列密码以及结合密钥派生函数的分组密码算法两种类型,该算法可提供消息的机密性。在基于标识的加密算法中,解密用户持有一个标识和一个相应的加密私钥,该加密私钥由密钥生成中心通过加密主私钥和解密用户的标识结合产生。加密用户用解密用户的标识加密数据,解密用户用自身加密私钥
15、解密数据。附录给出了数字签名算法、密钥交换协议、密钥封装机制和公钥加密算法示例。 系统参数组系统参数组包括曲线识别符犮 犻 犱;犖椭圆曲线基域犉狇的参数;椭圆曲线方程参数犪和犫;扭曲线参数(若犮 犻 犱的低位为) ;曲线阶的素因子犖和相对于犖的余因子犮 犳;曲线犈(犉狇)相对于犖的嵌入次数犽;犈(犉狇 犱) (犱整除犽)的犖阶循环子群犌的生成元犘;犈(犉狇 犱) (犱整除犽)的犖阶循环子群犌的生成元犘;双线性对犲的识别符犲 犻 犱; (选项)犌到犌的同态映射?。双线性对犲的值域为犖阶乘法循环群犌犜。系统参数的详细描述见 中的附录。 辅助函数 概述本部分规定基于标识的密码算法计算中涉及辅助函数。
16、 密码杂凑函数 密码杂凑函数犎狏()密码杂凑函数犎狏()的输出是长度恰为狏比特的杂凑值。本部分规定使用国家密码管理部门批准的密码杂凑函数,见 。 密码函数犎()密码函数犎(犣,狀)的输入为比特串犣和整数狀,输出为一个整数犺,狀 。犎(犣,狀)需要调用密码杂凑函数犎狏() 。关于密码杂凑函数犎狏() ,应符合 的规定。密码函数犎(犣,狀) :输入:比特串犣,整数狀。输出:整数犺,狀 。计算步骤为:)初始化一个 比特构成的计数器犮 狋 。)计算犺 犾 犲 狀( 狀) ) 。犌犅犜 )对犻从犺 犾 犲 狀狏执行:)计算犎犪犻犎狏( 犣犮 狋) ;)犮 狋。)若犺 犾 犲 狀狏是整数,令犎犪!犺 犾
17、犲 狀狏犎犪犺 犾 犲 狀狏,否则令犎犪!犺 犾 犲 狀狏为犎犪犺 犾 犲 狀狏最左边的(犺 犾 犲 狀(狏犺 犾 犲 狀狏) )比特。)令犎犪犎犪犎犪?犎犪犺 犾 犲 狀狏犎犪!犺 犾 犲 狀狏,按照 中 和 给出的细节将犎犪的数据类型转换为整数。)计算犺(犎犪 (狀) )。 密码函数犎()密码函数犎(犣,狀)的输入为比特串犣和整数狀,输出为一个整数犺,狀 。犎(犣,狀)需要调用密码杂凑函数犎狏() 。关于密码杂凑函数犎狏() ,应符合 的规定。密码函数犎(犣,狀) :输入:比特串犣,整数狀。输出:整数犺,狀 。计算步骤为:)初始化一个 比特构成的计数器犮 狋 。)计算犺 犾 犲 狀( 狀)
18、 ) 。)对犻从犺 犾 犲 狀狏执行:)计算犎犪犻犎狏( 犣犮 狋) ;)犮 狋。)若犺 犾 犲 狀狏是整数,令犎犪!犺 犾 犲 狀狏犎犪犺 犾 犲 狀狏,否则令犎犪!犺 犾 犲 狀狏为犎犪犺 犾 犲 狀狏最左边的(犺 犾 犲 狀(狏犺 犾 犲 狀狏) )比特。)令犎犪犎犪犎犪?犎犪犺 犾 犲 狀狏犎犪!犺 犾 犲 狀狏,按照 中 和 给出的细节将犎犪的数据类型转换为整数。)计算犺(犎犪 (狀) )。 随机数发生器应使用符合 的随机数发生器。 分组密码算法分组密码算法包括加密算法犈狀 犮(犓,犿)和解密算法犇犲 犮(犓,犮) 。犈狀 犮(犓,犿)表示用密钥犓对明文犿进行加密,其输出为密文比特串
19、犮;犇犲 犮(犓,犮)表示用密钥犓对密文犮进行解密,其输出为明文比特串犿或“错误” 。密钥犓的比特长度记为犓犾 犲 狀。应使用符合国家密码管理部门批准的分组密码算法。 消息认证码函数消息认证码函数犕犃犆(犓,犣)的作用是防止消息数据犣被非法篡改,它在密钥犓的控制下,产生消息数据比特串犣的认证码,密钥犓的比特长度记为犓犾 犲 狀。在本部分的基于标识的加密算法中,消息认证码函数使用密钥派生函数生成的密钥对密文比特串求取消息认证码,从而使解密者可以鉴别消息的来源和检验数据的完整性。消息认证码函数需要调用密码杂凑函数。设密码杂凑函数为犎狏() ,其输出是长度恰为狏比特的杂凑值。消息认证码函数犕犃犆(犓
20、,犣) ,其中:犌犅犜 输入:比特串犓(比特长度为犓犾 犲 狀的密钥) ,比特串犣(待求取消息认证码的消息) 。输出:长度为狏的消息认证码数据比特串犓。犓犎狏(犣犓) 。 密钥派生函数密钥派生函数的作用是从一个共享的秘密比特串中派生出密钥数据。在密钥协商过程中,密钥派生函数作用在密钥交换所获共享的秘密比特串上,从中产生所需的会话密钥或进一步加密所需的密钥数据。密钥派生函数需要调用密码杂凑函数。设密码杂凑函数为犎狏() ,其输出是长度恰为狏比特的杂凑值。密钥派生函数犓犇犉(犣,犽 犾 犲 狀) ,其中:输入:比特串犣(双方共享的数据) ,整数犽 犾 犲 狀表示要获得的密钥数据的比特长度,要求该值
21、小于( )狏 。输出:长度为犽 犾 犲 狀的密钥数据比特串犓。计算步骤为:)初始化一个 比特构成的计数器犮 狋 。)对犻从犽 犾 犲 狀狏执行:)计算犎犪犻犎狏(犣犮 狋) ;)犮 狋。)若犽 犾 犲 狀狏是整数,令犎犪!犽 犾 犲 狀狏犎犪犽 犾 犲 狀狏,否则令犎犪!犽 犾 犲 狀狏为犎犪犽 犾 犲 狀狏最左边的(犽 犾 犲 狀(狏犽 犾 犲 狀狏) )比特。)令犓犎犪犎犪?犎犪犽 犾 犲 狀狏犎犪!犽 犾 犲 狀狏。数字签名生成和验证算法及流程 系统签名主密钥和用户签名密钥的产生产生随机数犽 狊,犖作为签名主私钥,计算犌中的元素犘狆狌 犫 狊犽 狊犘作为签名主公钥,则签名主密钥对为(犽
22、狊,犘狆狌 犫 狊) 。秘密保存犽 狊,公开犘狆狌 犫 狊。选择并公开用一个字节表示的签名私钥生成函数识别符犺 犻 犱。用户的标识为犐犇,为产生用户的签名私钥犱 狊,首先在有限域犉犖上计算狋犎(犐犇犺 犻 犱,犖)犽 狊,若狋则需重新产生签名主私钥,计算和公开签名主公钥,并更新已有用户的签名私钥;否则计算狋犽狋,然后计算犱 狊狋犘。 数字签名生成算法设待签名的消息为比特串犕,为了获取消息犕的数字签名(犺,犛) ,作为签名者的用户应实现以下运算步骤:计算群犌犜中的元素犵犲(犘,犘狆狌 犫 狊) ;:产生随机数狉,犖 ;:计算群犌犜中的元素狑犵狉,按照 中 和 给出的细节将狑的数据类型转换为比特串
23、;:计算整数犺犎(犕狑,犖) ;:计算整数犾(狉犺) 犖,若犾则返回;:计算群犌中的元素犛犾犱 狊;:按照 中 给出的细节,将犺的数据类型转换为字节串,按照 中 给出的细节将犛的数据类型转换为字节串,消息犕的签名为(犺,犛) 。犌犅犜 数字签名生成算法流程数字签名生成算法流程如图所示。图数字签名生成算法流程 数字签名验证算法为了检验收到的消息犕及其数字签名(犺,犛) ,作为验证者的用户应实现以下运算步骤: :按照 中 给出的细节将犺的数据类型转换为整数,检验犺,犖是否成立,若不成立则验证不通过; :按照 中 给出的细节将犛的数据类型转换为椭圆曲线上的点,按 中 给出的细节检验犛犌是否成立,若不
24、成立则验证不通过; :计算群犌犜中的元素犵犲(犘,犘狆狌 犫 狊) ; :计算群犌犜中的元素狋犵犺; :计算整数犺犎(犐犇犺 犻 犱,犖) ; :计算群犌中的元素犘犺犘犘狆狌 犫 狊; :计算群犌犜中的元素狌犲(犛,犘) ; :计算群犌犜中的元素狑 狌狋,按照 中 和 给出的细节将狑 的数据类型转换为比特串; :计算整数犺犎(犕狑 ,犖) ,检验犺犺 是否成立,若成立则验证通过;否则验证不通过。犌犅犜 数字签名验证算法流程数字签名验证算法流程如图所示。图数字签名验证算法流程犌犅犜 密钥交换协议及流程 系统加密主密钥和用户加密密钥的产生产生随机数犽 犲,犖作为加密主私钥,计算犌中的元素犘狆狌 犫
25、 犲犽 犲犘作为加密主公钥,则加密主密钥对为(犽 犲,犘狆狌 犫 犲) 。秘密保存犽 犲,公开犘狆狌 犫 犲。选择并公开用一个字节表示的加密私钥生成函数识别符犺 犻 犱。用户和用户的标识分别为犐犇和犐犇。为产生用户的加密私钥犱 犲,首先在有限域犉犖上计算狋犎(犐犇犺 犻 犱,犖)犽 犲,若狋则需重新产生加密主私钥,计算和公开加密主公钥,并更新已有用户的加密私钥;否则计算狋犽 犲狋,然后计算犱 犲狋犘。为产生用户的加密私钥犱 犲,首先在有限域犉犖上计算狋犎(犐犇犺 犻 犱,犖)犽 犲,若狋则需重新产生加密主私钥,计算和公开加密主公钥,并更新已有用户的加密私钥;否则计算狋犽 犲狋,然后计算犱 犲狋
26、犘。 密钥交换协议设用户和用户协商获得密钥数据的长度为犽 犾 犲 狀比特,用户为发起方,用户为响应方。用户和用户双方为了获得相同的密钥,应实现如下运算步骤:用户:计算群犌中的元素犙犎(犐犇犺 犻 犱,犖) 犘犘狆狌 犫 犲;:产生随机数狉,犖 ;:计算群犌中的元素犚狉犙;:将犚发送给用户。用户: :计算群犌中的元素犙犎(犐犇犺 犻 犱,犖) 犘犘狆狌 犫 犲; :产生随机数狉,犖 ; :计算群犌中的元素犚狉犙; :按照 中 给出的细节验证犚犌是否成立,若不成立则协商失败;否则计算群犌犜中的元素犵犲(犚,犱 犲) ,犵犲(犘狆狌 犫 犲,犘)狉,犵犵狉,按照 中 和 给出的细节将犵,犵,犵的数据
27、类型转换为比特串; :按照 中 和 给出的细节把犚和犚的数据类型转换为比特串,计算犛犓犓犇犉(犐犇犐犇犚犚犵犵犵,犽 犾 犲 狀) ; : (选项)计算犛犎犪 狊 犺( 犵犎犪 狊 犺(犵犵犐犇犐犇犚犚) ) ; :将犚、 (选项犛)发送给用户。用户:按照 中 给出的细节验证犚犌是否成立,若不成立则协商失败;否则计算群犌犜中的元素犵犲(犘狆狌 犫 犲,犘)狉,犵犲(犚,犱 犲) ,犵(犵)狉,按照 中 和 给出的细节将犵,犵,犵的数据类型转换为比特串;:按照 中 和 给出的细节把犚和犚的数据类型转换为比特串,(选项)计算犛犎犪 狊 犺( 犵犎犪 狊 犺(犵犵犐犇犐犇犚犚) ) ,并检验犛犛是否
28、成立,若等式不成立则从到的密钥确认失败;:计算犛犓犓犇犉(犐犇犐犇犚犚犵犵犵,犽 犾 犲 狀) ;: (选项)计算犛犎犪 狊 犺( 犵犎犪 狊 犺(犵犵犐犇犐犇犚犚) ) ,并将犛发送犌犅犜 给用户。用户: : (选项)计算犛犎犪 狊 犺( 犵犎犪 狊 犺(犵犵犐犇犐犇犚犚) ) ,并检验犛犛是否成立,若等式不成立则从到的密钥确认失败。 密钥交换协议流程密钥交换协议流程如图所示。图密钥交换协议流程密钥封装机制及流程 犌犅犜 系统加密主密钥和用户加密密钥的产生产生随机数犽 犲,犖作为加密主私钥,计算犌中的元素犘狆狌 犫 犲犽 犲犘作为加密主公钥,则加密主密钥对为(犽 犲,犘狆狌 犫 犲) 。秘密
29、保存犽 犲,公开犘狆狌 犫 犲。选择并公开用一个字节表示的加密私钥生成函数识别符犺 犻 犱。用户和的标识分别为犐犇和犐犇。为产生用户的加密私钥犱 犲,首先在有限域犉犖上计算狋犎(犐犇犺 犻 犱,犖)犽 犲,若狋则需重新产生加密主私钥,计算和公开加密主公钥,并更新已有用户的加密私钥;否则计算狋犽 犲狋,然后计算犱 犲狋犘。为产生用户的加密私钥犱 犲,首先在有限域犉犖上计算狋犎(犐犇犺 犻 犱,犖)犽 犲,若狋则需重新产生加密主私钥,计算和公开加密主公钥,并更新已有用户的加密私钥;否则计算狋犽 犲狋,然后计算犱 犲狋犘。 密钥封装算法为了封装比特长度为犽 犾 犲 狀的密钥给用户,作为封装者的用户需
30、要执行以下运算步骤:计算群犌中的元素犙犎(犐犇犺 犻 犱,犖) 犘犘狆狌 犫 犲;:产生随机数狉,犖 ;:计算群犌中的元素犆狉犙,按照 中 和 给出的细节将犆的数据类型转换为比特串;:计算群犌犜中的元素犵犲(犘狆狌 犫 犲,犘) ;:计算群犌犜中的元素狑犵狉,按照 中 和 给出的细节将狑的数据类型转换为比特串;:计算犓犓犇犉(犆狑犐犇,犽 犾 犲 狀) ,若犓为全比特串,则返回;:输出(犓,犆) ,其中犓是被封装的密钥,犆是封装密文。 密钥封装算法流程密钥封装算法流程如图所示。 犌犅犜 图密钥封装算法流程 解封装算法用户收到封装密文犆后,为了对比特长度为犽 犾 犲 狀的密钥解封装,需要执行以下
31、运算步骤: :按照 中 给出的细节验证犆犌是否成立,若不成立则报错并退出; :计算群犌犜中的元素狑犲(犆,犱 犲) ,按照 中 和 给出的细节将狑的数据类型转换为比特串; :按照 中 和 给出的细节将犆的数据类型转换为比特串,计算封装的密钥犓犓犇犉(犆狑犐犇,犽 犾 犲 狀) ,若犓为全比特串,则报错并退出; :输出密钥犓。 解封装算法流程解封装算法流程如图所示。 犌犅犜 图解封装算法流程加密算法及流程 系统加密主密钥和用户加密密钥的产生产生随机数犽 犲,犖作为加密主私钥,计算犌中的元素犘狆狌 犫 犲犽 犲犘作为加密主公钥,则加密主密钥对为(犽 犲,犘狆狌 犫 犲) 。秘密保存犽 犲,公开犘狆
32、狌 犫 犲。选择并公开用一个字节表示的加密私钥生成函数识别符犺 犻 犱。用户和的标识分别为犐犇和犐犇。为产生用户的加密私钥犱 犲,首先在有限域犉犖上计算狋犎(犐犇犺 犻 犱,犖)犽 犲,若狋则需重新产生加密主私钥,计算和公开加密主公钥,并更新已有用户的加密私钥;否则计算狋犽 犲狋,然后计算犱 犲狋犘。为产生用户的加密私钥犱 犲,首先在有限域犉犖上计算狋犎(犐犇犺 犻 犱,犖)犽 犲,若狋则需重新产生加密主私钥,计算和公开加密主公钥,并更新已有用户的加密私钥;否则计算狋犽 犲狋,然后计算犱 犲狋犘。 加密算法设需要发送的消息为比特串犕,犿犾 犲 狀为犕的比特长度,犓犾 犲 狀为分组密码算法中密钥
33、犓的比特长度,犓犾 犲 狀为函数犕犃犆(犓,犣)中密钥犓的比特长度。为了加密明文犕给用户,作为加密者的用户应实现以下运算步骤:计算群犌中的元素犙犎(犐犇犺 犻 犱,犖) 犘犘狆狌 犫 犲。 犌犅犜 :产生随机数狉,犖 。:计算群犌中的元素犆狉犙,按照 中 和 给出的细节将犆的数据类型转换为比特串。:计算群犌犜中的元素犵犲(犘狆狌 犫 犲,犘) 。:计算群犌犜中的元素狑犵狉,按照 中 和 给出的细节将狑的数据类型转换为比特串。:按加密明文的方法分类进行计算:)如果加密明文的方法是基于密钥派生函数的序列密码算法,则:)计算整数犽 犾 犲 狀犿犾 犲 狀犓犾 犲 狀,然后计算犓犓犇犉(犆狑犐犇,犽
34、犾 犲 狀) 。令犓为犓最左边的犿犾 犲 狀比特,犓为剩下的犓犾 犲 狀比特,若犓为全比特串,则返回;)计算犆犕犓。)如果加密明文的方法是结合密钥派生函数的分组密码算法,则:)计算整数犽 犾 犲 狀犓犾 犲 狀犓犾 犲 狀,然后计算犓犓犇犉(犆狑犐犇,犽 犾 犲 狀) 。令犓为犓最左边的犓犾 犲 狀比特,犓为剩下的犓犾 犲 狀比特,若犓为全比特串,则返回;)计算犆犐犞犈狀 犮(犓,犕,犐犞) ,犆的结构中前 个字节为犐犞值,且仅当分组密码算法模式为非(见 )时初始化向量犐犞才有效,其中犈狀 犮分组密码算法遵循 ,填充方式为将密钥模长度犽(明文长度犾 犽)值,即作为填充数,也作为填充个数,填充方
35、式示例:填充内容明文长度犾与密钥长度犽的计算 犾 犽犽 犾 犽犽犽犽犽犽犾 犽:计算犆犕犃犆(犓,犆) 。:输出密文犆犆犆犆。 加密算法流程加密算法流程如图所示。 犌犅犜 图加密算法流程 解密算法设犿犾 犲 狀为密文犆犆犆犆中犆的比特长度,犓犾 犲 狀为分组密码算法中密钥犓的比特长度,犓犾 犲 狀为函数犕犃犆(犓,犣)中密钥犓的比特长度。为了对犆进行解密,作为解密者的用户应实现以下运算步骤: :从犆中取出比特串犆,按照 中 和 给出的细节将犆的数据类型转换为椭圆曲线上的点,按照 中 给出的细节验证犆犌是否成立,若不成立则报错并退出。 :计算群犌犜中的元素狑犲(犆,犱 犲) ,按照 中 和 给出
36、的细节将狑的数据类型转换为比特串。 :按加密明文的方法分类进行计算: 犌犅犜 )如果加密明文的方法是基于密钥派生函数的序列密码算法,则:)计算整数犽 犾 犲 狀犿 犾 犲 狀犓犾 犲 狀,然后计算犓犓犇犉(犆狑犐犇,犽 犾 犲 狀) 。令犓为犓最左边的犿 犾 犲 狀比特,犓为剩下的犓犾 犲 狀比特,若犓为全比特串,则报错并退出;)计算犕犆犓。)如果加密明文的方法是结合密钥派生函数的分组密码算法,则:)计算整数犽 犾 犲 狀犓犾 犲 狀犓犾 犲 狀,然后计算犓犓犇犉(犆狑犐犇,犽 犾 犲 狀) 。令犓为犓最左边的犓犾 犲 狀比特,犓为剩下的犓犾 犲 狀比特,若犓为全比特串,则报错并退出;)计算犕
37、犇犲 犮(犓,犆) 。 :计算狌犕犃犆(犓,犆) ,从犆中取出比特串犆,若狌犆,则报错并退出。 :输出明文犕。 解密算法流程解密算法流程如图所示。图解密算法流程 犌犅犜 附录犃(资料性附录)算 法 示 例犃 概述本附录选用 给出的密码杂凑函数,其输入是长度小于 的消息比特串,输出是长度为 比特的杂凑值。本附录中,所有用 进制表示的数,左边为高位,右边为低位。本附录中,消息采用 进行编码。犃 数字签名与验证 犌犅犜 犌犅犜 犌犅犜 犌犅犜 犃 密钥交换 犌犅犜 犌犅犜 犌犅犜 犌犅犜 犌犅犜 犌犅犜 犌犅犜 犌犅犜 犌犅犜 犃 密钥封装 犌犅犜 犌犅犜 犌犅犜 犃 公钥加解密 犌犅犜 犌犅犜 犌犅犜 犌犅犜 犌犅犜