CN104484153A - 一种应用层获取真随机数的方法 - Google Patents

一种应用层获取真随机数的方法 Download PDF

Info

Publication number
CN104484153A
CN104484153A CN201410837653.5A CN201410837653A CN104484153A CN 104484153 A CN104484153 A CN 104484153A CN 201410837653 A CN201410837653 A CN 201410837653A CN 104484153 A CN104484153 A CN 104484153A
Authority
CN
China
Prior art keywords
random number
true random
application layer
interface
user space
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201410837653.5A
Other languages
English (en)
Other versions
CN104484153B (zh
Inventor
段敏涛
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Allwinner Technology Co Ltd
Original Assignee
Allwinner Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Allwinner Technology Co Ltd filed Critical Allwinner Technology Co Ltd
Priority to CN201410837653.5A priority Critical patent/CN104484153B/zh
Publication of CN104484153A publication Critical patent/CN104484153A/zh
Application granted granted Critical
Publication of CN104484153B publication Critical patent/CN104484153B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种应用层获取真随机数的方法,包括步骤:A1、应用层调用OpenSSL库中获取随机数的接口函数;A2、所述接口函数调用OpenSSL库的引擎插件;A3、所述引擎插件访问随机数用户态接口;A4、所述随机数用户态接口通过Crypto框架获取真随机数;A5、所述随机数用户态接口将所述真随机数返回所述引擎插件;A6、所述引擎插件将所述真随机数返回所述应用层。本发明使得应用层通过crypto架构获取硬件的真随机数,并且能够无缝支持用户态OpenSSL库,具有较好的兼容性和可扩展性。

Description

一种应用层获取真随机数的方法
技术领域
本发明涉及数据加密技术领域,具体涉及一种应用层获取真随机数的方法。
背景技术
目前许多硬件芯片都支持真随机数(TRNG)特性,而真随机数在安全类应用中尤为重要,由芯片内部硬件产生密钥,密钥的随机程度更加抗干扰和可靠,这也是一个系统安全性的关键所在。
如图1所示,Linux内核中的crypto框架管理了内核中所有的加解密算法,包括MD5、SHA1、AES、DES、RNG等,Crypto框架最初是为了内核中网络安全套接层SSL协议而设计的,不支持直接给用户态使用。后期内核为了满足用户态使用crypto的需求,借助网络协议中socket通讯协议族的管理机制实现此功能。所以,增加了一种AF_ALG协议的socket,目前可以给用户态使用的算法有AES类和摘要类(MD5和SHA1等)算法,但并不支持RNG(随机数)算法。
发明内容
本发明要解决的技术问题在于,针对现有技术的不足,提供一种应用层获取真随机数的方法,克服现有技术Linux应用层不能使用硬件芯片生成的真随机数的缺陷。
本发明为解决上述技术问题所采用的技术方案为:
一种应用层获取真随机数的方法,包括步骤:
A1、应用层调用OpenSSL库中获取随机数的接口函数;
A2、该接口函数调用OpenSSL库的引擎插件;
A3、该引擎插件访问随机数用户态接口;
A4、该随机数用户态接口通过Crypto框架获取真随机数;
A5、该随机数用户态接口将该真随机数返回该引擎插件;
A6、该引擎插件将该真随机数返回该应用层。
根据本发明的实施例,该步骤A3包括步骤:该引擎插件通过AF_ALG协议的套接字socket访问该随机数用户态接口。
根据本发明的实施例,该步骤A4包括步骤:该随机数用户态接口通过套接字socket操作集访问Crypto框架。
根据本发明的实施例,该步骤A4还包括步骤:该Crypto框架通过真随机数驱动程序获取该真随机数。
根据本发明的实施例,该随机数用户态接口执行如下步骤:
B1、申请Crypto框架资源;
B2、申请rng算法上下文;
B3、获取该真随机数;
B4、释放该Crypto框架资源。
根据本发明的实施例,该引擎插件通过一数据结构封装调用接口。
实施本发明的技术方案,具有以下有益效果:本发明使得应用层通过crypto架构获取硬件的真随机数,并且能够无缝支持用户态OpenSSL库,具有较好的兼容性和可扩展性。
附图说明
下面通过参考附图并结合实例具体地描述本发明,本发明的优点和实现方式将会更加明显,其中附图所示内容仅用于对本发明的解释说明,而不构成对本发明的任何意义上的限制,在附图中:
图1为现有技术crypto架构使用方法示意图;
图2为本发明的应用框架示意图;
图3为本发明流程图;
图4为本发明获取真随机数过程示意图。
具体实施方式
如图2所示,应用程序是OpenSSL的安全类用户应用层,安全应用的场景很广,包括流媒体、签名、证书等。应用层之前一般都使用伪随机数,通过本发明应用层可以调用OpenSSL库中获取随机数的接口函数来获取真随机数,OpenSSL是用户空间的一个开源的安全算法库,本发明在OpenSSL库中设置engine(引擎)插件,rng用户态接口处于Linux内核中,介于内核Crypto框架和用户态之间,使用网络socket的方式和用户态交互数据,Linux内核中的crypto框架,负责管理内核中所有的加解密算法,TRNG驱动是真随机数驱动程序,通过控制硬件的真随机数发生器来产生随机数,并返回给Crypto框架。
如图3所示,本发明应用层获取真随机数的方法包括步骤:
A1、应用层调用OpenSSL库中获取随机数的接口函数;
A2、该接口函数调用OpenSSL库的引擎插件;
A3、该引擎插件访问随机数用户态接口;
A4、该随机数用户态接口通过Crypto框架获取真随机数;
A5、该随机数用户态接口将该真随机数返回该引擎插件;
A6、该引擎插件将该真随机数返回该应用层。
根据本发明的实施例,步骤A3包括步骤:该引擎插件通过AF_ALG协议的套接字socket访问该随机数用户态接口。步骤A4包括步骤:随机数用户态接口通过套接字socket操作集访问Crypto框架。步骤A4还包括步骤:Crypto框架通过真随机数驱动程序获取真随机数。
如图4所示,本发明随机数用户态接口执行如下步骤:
B1、申请Crypto框架资源;
B2、申请rng算法上下文;
B3、获取真随机数;
B4、释放Crypto框架资源。
随机数用户态接口的AF_ALG协议socket的操作集如下:
bind():调用crypto_alloc_rng(),匹配算法类型(即AF_ALG协议socket的类型),并申请用于Crypto框架管理的资源;
accept():申请rng算法的一个上下文结构,此结构将用于管理rng算法的私有数据。并注册一个析构接口到socket->sk_destruct(),便于在关闭socket时释放私有数据的资源。
recvmsg():获取随机数。根据用户指定的长度,调用crypto_rng_get_bytes()(其内部调用硬件的真随机数驱动)从底层获取随机数,然后将随机数返回给应用层指定的缓冲区buf。
release():调用crypto_free_rng(),释放bind接口申请的相关Crypto框架资源。
OpenSSL中的算法引擎实现一个RAND_METHOD结构,此结构是OpenSSL中注册随机数引擎的标准数据接口。算法引擎通过ENGINE_set_RAND()向OpenSSL中传入RAND_METHOD结构,RAND_METHOD结构封装的接口bytes(),可用于获取指定长度的随机数。接口bytes()中的处理流程是,首先创建一个AF_ALG协议的侦听socket,通过bind()指定rng类型,然后accept()获取一个传输socket,从此socket中读取指定长度的数据,最后关闭socket资源。
对于OpenSSL的应用层来说,使用真随机数的接口只有一个:RAND_bytes()。调用RAND_bytes()时,OpenSSL会进入引擎插件已注册的真随机数引擎bytes()接口,然后再通过socket与Linux内核交互数据。
本领域技术人员不脱离本发明的实质和精神,可以有多种变形方案实现本发明,以上所述仅为本发明较佳可行的实施例而已,并非因此局限本发明的权利范围,凡运用本发明说明书及附图内容所作的等效结构变化,均包含于本发明的权利范围之内。

Claims (6)

1.一种应用层获取真随机数的方法,其特征在于,包括步骤:
A1、应用层调用OpenSSL库中获取随机数的接口函数;
A2、所述接口函数调用OpenSSL库的引擎插件;
A3、所述引擎插件访问随机数用户态接口;
A4、所述随机数用户态接口通过Crypto框架获取真随机数;
A5、所述随机数用户态接口将所述真随机数返回所述引擎插件;
A6、所述引擎插件将所述真随机数返回所述应用层。
2.根据权利要求1所述的应用层获取真随机数的方法,其特征在于,所述步骤A3包括步骤:所述引擎插件通过AF_ALG协议的套接字socket访问所述随机数用户态接口。
3.根据权利要求1所述的应用层获取真随机数的方法,其特征在于,所述步骤A4包括步骤:所述随机数用户态接口通过套接字socket操作集访问Crypto框架。
4.根据权利要求3所述的应用层获取真随机数的方法,其特征在于,所述步骤A4还包括步骤:所述Crypto框架通过真随机数驱动程序获取所述真随机数。
5.根据权利要求4所述的应用层获取真随机数的方法,其特征在于,所述随机数用户态接口执行如下步骤:
B1、申请Crypto框架资源;
B2、申请rng算法上下文;
B3、获取所述真随机数;
B4、释放所述Crypto框架资源。
6.根据权利要求1所述的应用层获取真随机数的方法,其特征在于:所述引擎插件通过一数据结构封装调用接口。
CN201410837653.5A 2014-12-29 2014-12-29 一种应用层获取真随机数的方法 Active CN104484153B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410837653.5A CN104484153B (zh) 2014-12-29 2014-12-29 一种应用层获取真随机数的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410837653.5A CN104484153B (zh) 2014-12-29 2014-12-29 一种应用层获取真随机数的方法

Publications (2)

Publication Number Publication Date
CN104484153A true CN104484153A (zh) 2015-04-01
CN104484153B CN104484153B (zh) 2017-07-07

Family

ID=52758701

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410837653.5A Active CN104484153B (zh) 2014-12-29 2014-12-29 一种应用层获取真随机数的方法

Country Status (1)

Country Link
CN (1) CN104484153B (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108234114A (zh) * 2016-12-22 2018-06-29 中标软件有限公司 一种基于硬件加密算法的ssl的实现方法
CN111708762A (zh) * 2020-06-18 2020-09-25 北京金山云网络技术有限公司 一种权限认证方法、装置及服务端设备

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1381813A (zh) * 2001-04-19 2002-11-27 香港城市大学 用于随机数和流密码生成的小型密码引擎
CN101620523A (zh) * 2009-07-29 2010-01-06 深圳国微技术有限公司 一种随机数发生器电路
CN102609237A (zh) * 2011-01-06 2012-07-25 微软公司 可扩展的随机数生成

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1381813A (zh) * 2001-04-19 2002-11-27 香港城市大学 用于随机数和流密码生成的小型密码引擎
CN101620523A (zh) * 2009-07-29 2010-01-06 深圳国微技术有限公司 一种随机数发生器电路
CN102609237A (zh) * 2011-01-06 2012-07-25 微软公司 可扩展的随机数生成

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
YXRYKDS: "怎样安全的生成随机数", 《开源中国社区HTTPS://MY.OSCHINA.NET/TEN/BLOG/204105#COMMENT-LIST》 *
黄枫等: "基于CryptoAPI的生物医学真随机数的生成器", 《第四军医大学学报》 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108234114A (zh) * 2016-12-22 2018-06-29 中标软件有限公司 一种基于硬件加密算法的ssl的实现方法
CN111708762A (zh) * 2020-06-18 2020-09-25 北京金山云网络技术有限公司 一种权限认证方法、装置及服务端设备
CN111708762B (zh) * 2020-06-18 2023-09-01 北京金山云网络技术有限公司 一种权限认证方法、装置及服务端设备

Also Published As

Publication number Publication date
CN104484153B (zh) 2017-07-07

Similar Documents

Publication Publication Date Title
US9807066B2 (en) Secure data transmission and verification with untrusted computing devices
CN108345806B (zh) 一种硬件加密卡和加密方法
US20190036693A1 (en) Controlled access to data in a sandboxed environment
CN110266639B (zh) 用于安全环境中的端点硬件辅助的网络防火墙的系统和方法
TWI740399B (zh) 資料處理方法、裝置和電子設備
CN109726598A (zh) 基于云服务器的嵌入式安全加密芯片
US10769272B2 (en) Technology to protect virtual machines from malicious virtual machine managers
CN104378649B (zh) 一种利用国密sm1算法对视频流进行实时加密的方法及系统
US20160285892A1 (en) Protecting a memory
CN106326751B (zh) 一种可信道系统及其实现方法
US10262146B2 (en) Application-to-application messaging over an insecure application programming interface
CN111274611A (zh) 数据脱敏方法、装置及计算机可读存储介质
CN107634946A (zh) 一种微服务节点合法性验证方法和装置
CN103136458A (zh) 一种Linux操作系统的代码保护方法及其模块
CN114124364A (zh) 密钥安全处理方法、装置、设备及计算机可读存储介质
CN111181944B (zh) 通信系统及信息发布方法、装置、介质、设备
Liu et al. Secure Video Streaming with Lightweight Cipher PRESENT in an SDN Testbed.
CN111241492A (zh) 一种产品多租户安全授信方法、系统及电子设备
CN104484153A (zh) 一种应用层获取真随机数的方法
US20170118197A1 (en) Sharing data between sandboxed applications with certificates
CN102970134B (zh) 将硬件密码设备的算法用于pkcs#7数据封装的方法及系统
WO2019223098A1 (zh) 一种文件的读写方法及设备
CN103150523B (zh) 一种简易的嵌入式可信终端系统及方法
Saarinen Simple AEAD hardware interface (SÆHI) in a SoC: implementing an on-chip Keyak/WhirlBob coprocessor
Mandebi Mbongue et al. Domain isolation in FPGA-accelerated cloud and data center applications

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant