具体实施方式
为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本说明书实施例中的附图,对本说明书实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本说明书一部分实施例,而不是全部的实施例。基于本说明书中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本说明书保护的范围。
考虑到基于现有的伪随机数获取方法,服务器往往对用于生成伪随机数的内存区域不作选择,直接在普通的内存区域中,读取并使用客户端设备所发送的随机数种子和随机数轮数,运行相应的为随机数生成器,以生成用户指定的伪随机数。这样在伪随机数的生成过程中,伪随机数以及与伪随机数生成相关的数据,例如,生成伪随机数的随机数种子和随机数轮数等,具有较高的风险被窃取,或者遭到泄漏,进而会对用户的数据安全造成威胁。
针对产生上述问题的根本原因,本说明书考虑利用一些服务器本身所具有的特性,充分利用并在服务器本身受保护的预设内存区域中建立伪随机数生成器,并读取用户通过客户端设备发送的随机数种子和随机数轮数,在该预设内存区域中基于上述随机数种子和随机数轮数运行伪随机数生成器生成用户所要求的伪随机数。由于伪随机数生成器的建立、运行,以及与伪随机数生成相关的数据的读取、使用都是在服务器受保护的预设内存区域中执行的,从而可以较为有效地降低伪随机数以及与伪随机数的生成相关的数据遭到泄漏或被窃取的风险,保护用户的数据安全。
基于上述思路,本说明书实施例提供一种伪随机数的获取方法,所述伪随机数的获取方法可以应用于包含有服务器和客户端设备的系统架构中。基于该系统架构,用户可以通过客户端设备与服务器进行数据交互。例如,用户可以通过客户端设备向服务器发送相应的伪随机数的代码文件,用户指定的随机数种子和随机数轮数等等,以指示服务器根据上述数据生成用户所要求的伪随机数。服务器在接收到上述数据后,可以利用本身所拥有的受保护的预设内存区域对上述数据进行解析读取,并在预设内存区域中根据上述随机数种子和随机数轮数运行对应的伪随机数生成器,以生成对应的伪随机数,再将伪随机数通过客户端设备反馈给用户。
在本实施例中,所述服务器可以是一种应用于业务平台(例如,为用户提供伪随机数生成服务的系统平台)一侧,能够实现数据传输、数据处理等功能的后台业务服务器。具体的,所述服务器可以为一个具有数据运算、存储功能以及网络交互功能的电子设备;也可以为运行于该电子设备中,为数据处理、存储和网络交互提供支持的软件程序。在本实施方式中,并不具体限定所述服务器的数量。所述服务器具体可以为一个服务器,也可以为几个服务器,或者,由若干服务器形成的服务器集群。需要补充的是,上述服务器具体可以是一种支持程序安全之星框架的服务器,这类服务器本身就拥有受保护的、可使用的内存区域。具体的,例如,上述服务器可以是一种支持SGX(Software Guard Extensions)的服务器。
在本实施例中,所述客户端设备可以是一种应用于用户一侧,能够实现数据采集、数据传输等功能的前端设备。具体地,所述客户端设备例如可以为台式电脑、平板电脑、笔记本电脑、智能手机、数字助理、智能可穿戴设备、导购终端、具有网络访问功能的电视机等。或者,所述客户端设备也可以为能够运行于上述电子设备中的软件应用。例如,可以是在手机上运行的某伪随机数生成APP等。
在一个场景示例中,具体可以参阅图1所示,应用本说明书实施例提供的伪随机数获取方法安全地生成并获取用户所要求的指定伪随机数。
具体的,用户可以使用自己的台式电脑等终端电子设备作为客户端设备。用户在进行例如多方安全计算等相关数据处理时,需要使用到大量的伪随机数,为了减轻客户端设备自行生成上述大量伪随机数的过程对设备资源的压力,用户可以利用负责提供伪随机数服务的业务平台的预设服务器来单独生成自己所需要的指定的伪随机数。具体实施时,用户可以先通过在客户端设备进行相应操作(例如输入伪随机数的获取指令,或者在客户端设备上触发获取伪随机数的指示按钮等),发起伪随机数获取请求。
在本实施例中,上述伪随机数也可以称为可重现的随机数,具体的可以理解为一种通过确定性算法计算出来的均匀分布的随机数序列。虽然伪随机数不是真正意义的随机数,即不是不可重现的随机数,但具有类似于不可重现的随机数的统计特征,例如伪随机数也同样具有均匀性、独立性等统计特征。通常只要用于生成伪随机数的伪随机生成器、伪随机数种子和伪随机数轮数确定,所生成的伪随机数往往也是确定的。
在本实施例中,上述伪随机数获取请求具体可以理解为一种响应用户操作生成的,用于指示获取用户指定的伪随机数的请求数据。其中,上述伪随机数获取请求中携带有所请求生成的伪随机数的特征信息,例如随机数种子和随机数轮数等等。基于上述伪随机数获取请求,客户端设备可以生成并将相应的随机数种子和随机数轮数提供给预设服务器以生成用户所需要的指定伪随机数。
具体实施时,用户可以在客户端设备上进行相应操作发起伪随机数获取请求,同时在客户端设备所提供的输入设置接口设置所想要的指定的伪随机数的随机数种子、随机数轮数等特征信息。进而客户端设备可以接收到上述包含有伪随机数的特征信息的伪随机数获取请求。当然,需要说明的是,上述所列举的用户发起伪随机数获取请求、客户端设备接收获取伪随机数获取请求的方式只是一种示意性说明。具体实施时,根据具体情况和应用场景,也可以采用其他合适的方式以便用户可以便利地发起伪随机数获取请求,客户端设备接收上述伪随机数获取请求。对此,本说明书不作限定。
在本实施例中,上述预设服务器具体可以是一种支持程序安全执行框架的服务器。具体的,上述预设服务器可以是支持SGX(Software Guard Extensions,一种Intel推出的程序安全执行框架)的服务器等。其中,基于上述SGX,上述预设服务器具有以下特性:在预设服务器的程序安全执行框架中会保留一个受保护的内存区域,即第一预设内存区域,例如Enclave等,具有较高的机密性和安全性。上述第一预设内存区域具体可以理解为一种预设服务器的内存区域中的飞地区域,即该第一预设内存区域是外界无法直接访问,不受外界影响,只与预设服务器本身进行数据交互的,安全度较高的内存区域。当然,需要说明的是,上述所列举的预设服务器只是为了更好地说明本说明书实施例。具体实施时,根据具体的应用场景和技术发展变化,也可以引入其他类似特性的服务器作为上述预设服务器。对此,本说明书不作限定。
在本实施例中,上述预设服务器具体可以是预先布设于负责提供伪随机数服务的业务平台的后台服务器。为了能够安全地为用户生成所需要的伪随机数,该平台可以预先选择选择上述支持程序安全执行框架的预设服务器作为平台数据处理服务器为用户生成并提供所需要的指定伪随机数。
在本实施例中,在用户发起伪随机数获取请求之前,用户可以先将关于伪随机数生成器的代码文件打包成动态库数据(例如,动态链接库等)。再将上述动态库数据通过有线或无线的方式发送至预设服务器。预设服务器在接收到上述动态库数据后,为了避免上述关于伪随机数生成器的代码文件被窃取或遭泄露,可以在受保护的第一预设的内存区域中解析上述动态库数据,得到对应的关于伪随机数生成器的代码文件。同时,又为了避免伪随机数生成器在建立过程中遭到第三方篡改,具体实施时,可以根据上述代码文件,在受保护的第一预设内存区域中建立所述伪随机数生成器。其中,上述伪随机数生成器具体可以理解为一种由用户设定、提供的,用于生成该用户所需要的一个或多个指定伪随机数的程序模块。
在本实施例中,为了进一步提高数据安全性,避免关于伪随机数生成器的代码文件在进入第一预设内存区域之前遭到第三方篡改,客户端设备在将上述关于伪随机数生成器的代码文件打包成动态库数据的同时,还可以对上述动态库进行签名,得到携带有签名的动态库数据,再将该携带有签名的动态库数据发送至预设服务器。这样预设服务器在第一预设的内存区域中解析上述动态库数据时,可以先检测该动态库数据所携带的签名是否与遭到破坏,或者是否与该用户的签名一致,如果该动态库数据所携带的签名已经遭到破坏,或者与该用户的签名不一致,则可以判断该动态库数据可能已经遭受到了第三方的篡改,基于这样动态库数据建立的伪随机数生成器可能并不是用于生成用户所需要的伪随机数的生成器,同时也具有相对较高的安全风险。这时预设服务器可以不根据该动态库数据建立伪随机数生成器,并指示客户端设备重新发送安全的动态库数据。如果该动态库数据所携带的签名没有遭到破坏,且与该用户的签名一致,则可以判断该动态库数据是安全的,没有遭到第三方的修改,这时可以按照上述方式根据动态库数据在第一预设内存区域中建立安全的伪随机数生成器。
客户端设备在接收到上述用户发起伪随机数获取请求后,进一步可以响应上述伪随机数获取请求,根据上述伪随机数获取请求中所携带的伪随机数的特征信息,生成对应用户想要获取的指定伪随机数的随机数种子和随机数轮数。
进一步,客户端设备可以将上述随机数种子和随机数轮数发送至预设服务器,以请求预设服务器在受保护的第一预设内存区域中,利用建立好的上述安全的伪随机数生成器根据上述随机数种子和随机数轮数,生成用户所需要的指定伪随机数。
预设服务器在接收到上述随机数种子和随机数轮数后,可以将所接收到随机数种子和随机数轮数发送至第一预设内存区域中,进而可以在第一预设内存区域中,调用并根据上述随机数轮数和随机数种子运行该用户之前提供的布设于第一预设内存区域中的伪随机数生成器,以生成用户所需要的指定伪随机数。由于伪随机数的生成过程是在受保护的第一预设内存区域中进行,且生成伪随机数的相关数据也是保存并在受保护的第一预设内存区域中使用的,因此,可以有效地避免了伪随机数,以及与伪随机数相关的数据遭到泄漏或被窃取,同时也降低了伪随机数在生成过程中遭到第三方篡改的风险,保证了伪随机数生成过程中的数据安全。
在预设服务器按照上述方式生成对应的伪随机数后,可以再通过有线或无线的方式将上述伪随机数发送给客户端设备。这样用户可以通过上述客户端设备和预设服务器,高效、安全地获取得到自己所需要的指定伪随机数。
客户端设备在得到上述伪随机数后,可以利用上述伪随机数参与多方安全计算等数据处理,得到相应的计算结果;再根据计算结果进行具体的交易数据处理。例如,可以根据多方安全计算的计算结果生成用户的交易签名,再以该交易签名作为交易数据的处理凭证,进行用户的账单数据的核销等等。
客户端设备在得到上述伪随机数,不再需要预设服务器运行上述伪随机数生成器时,还可以向预设服务器发送销毁指令,其中,上述销毁指令具体可以用于指示销毁预设服务器第一内存区域的伪随机数生成器。预设服务器在接收到上述销毁指令后,可以根据上述销毁指令销毁掉第一预设内存区域中的伪随机数生成器,避免与伪随机数相关的数据被泄漏,同时也会销毁掉之前所接收的与伪随机数相关的数据,例如,随机数种子、随机数轮数等等,避免上述数据被泄漏。完成上述处理后,预设服务器会还退出第一预设内存区域,释放该伪随机数生成器之前所占用的内存资源。
在另一个场景示例中,为了进一步提高伪随机数生成的安全性和机密性,客户端设备在将所述随机数种子和所述随机数轮数发送至预设服务器前,可以先按照预设的验证规则与预设服务器进行预设验证,以确定预设服务器的第一预设内存区域的运行环境是否可靠,之前发送并建立于第一预设内存区域的伪随机数生成器是否安全、是否遭到篡改。在确定预设服务器的第一预设内存区域的运行环境可靠,之前发送并建立于第一预设内存区域的伪随机数生成器是安全、没有遭到篡改的情况下,确定预设服务器验证通过,可以判断该预设服务器事故值得信任的,可以用于生成用户所需要的指定伪随机数。进而才会将随机数种子和随机数轮数等与伪随机数相关的数据发送至该服务器。如果通过上述预设验证,发现该预设服务器验证不通过,则可以判断当前该预设服务器不可信任,为了避免与伪随机数相关的数据遭到泄漏或窃取,可以不向该预设服务器发送随机数种子和随机数轮数,而是重新寻找预设服务器再进行预设验证。
在本实施例中,具体实施时,参阅图2所示,客户端设备可以按照以下方式根据预设的验证规则对预设服务器进行预设验证。
客户端设备可以先向预设服务器发送验证请求。预设服务器在接收到上述验证请求后,可以响应验证请求,根据第一预设内存区域的运行环境,以及在第一预设内存区域中建立的伪随机数据生成器的代码数据生成第一报告数据。其中,所述第一报告数据能够表征出预设服务器的第一预设内存区域的运行环境的具体状况。此外,所述第一报告数据还携带有第一哈希值,上述第一哈希值具体可以根据是预设服务器根据所述伪随机数生成器的代码数据生成的。所述第一哈希值能够表征出第一预设内存区域中的伪随机数生成器的具体状况。
考虑到客户端设备往往没有能力对预设服务器的第一预设内存区域的运行环境进行验证,为了能够准确地对预设服务器的第一预设内存区域进行验证,在预设验证过程中,还可以引入可靠的验证服务器为客户端设备对预设服务器的第一预设内存区域的运行环境进行验证。具体的,可以引入提供预设服务器所拥有的程序安全执行框架的提供方的服务器作为上述验证服务器。例如,预设服务器是支持SGX的服务器,而SGX是Intel推出的程序安全执行框架,因此可以将Intel的官方服务器作为验证服务器,当然,需要说明的是,上述所列举的验证服务器只是为了更好地说明本说明书实施例。具体实施时,根据具体的应用场景和预设服务器所基于的程序安全执行框架的提供方选择合适的服务器作为验证服务器。对此,本说明书不作限定。
在本实施例中,预设服务器在得到携带有第一哈希值的第一报告数据后,可以将第一报告数据发送至验证服务器进行验证。为了保证第一报告数据所包含的数据不被泄漏或窃取,预设服务器可以先利用第一私钥对上述第一报告数据进行加密后得到第一密文数据,再将上述第一密文数据通过有线或无线的方式发送至验证服务器。
需要补充的是,验证服务器和预设服务器预先通过密钥协商等方式生成了一对相互匹配的密钥对,即:第一私钥和第一公钥,其中,所述第一私钥由预设服务器保管,第一公钥由验证服务器保管。上述第一密文数据由于是预设服务器使用第一私钥加密后的加密数据,因此即使第三方截取了第一密文数据,由于没有解密的密钥也无法读取该数据所包含的具体内容,具有较高的安全性。
验证服务器在接收到第一密文数据后,可以使用所保管的第一公钥对第一密文数据进行解密处理,得到携带有第一哈希值的第一报告数据。由于第一哈希值是与伪随机数生成器相关的,用于表征第一预设内存区域中的伪随机数生成器状况的数据,因此验证服务器无法对第一哈希值进行验证,但验证服务器可以根据第一报告数据中所包含的关于预设服务器的第一预设内存区域的信息,对预设服务器的第一预设内存区域中的运行环境进行评价。具体的,验证服务器可以根据第一报告数据确定出预设服务器的第一预设内存区域的运行环境是否第一符合第一预设要求。例如,验证服务器可以根据第一报告数据,将预设服务器的第一预设内存区域的参数数据进行检测与标准参数数据进行比对,根据比对结果确定第一预设内存区域的参数数据是否被篡改,进而可以判断出预设服务器的第一预设内存区域的运行环境是否可靠,如果参数数据没有被篡改,运行环境可靠,则可以判断预设服务器的第一预设内存区域的运行环境符合第一预设要求。相反,如果根据比对结果,发现上述参数数据存在被篡改的迹象,则可以认为运行环境不可靠,可以判断不符合第一预设要求。验证服务器根据上述判断结果生成第二报告数据,其中,上述第二报告数据还携带有第一报告数据所携带的第一哈希值,所述第二报告数据用于指示预设服务器的第一预设内存区域的运行环境是否符合第一预设要求。
验证服务器在得到上述第二报告数据后,可以将上述第二报告数据发送给客户端设备,由客户端设备根据第一哈希值对预设服务器的第一预设内存区域中的伪随机数生成器进行验证,以最终确定预设服务器是否预设验证通过。
为保护第二报告数据不被泄漏或窃取,在将携带有第一哈希值的第二报告数据发送至客户端设备之前,验证服务器可以利用第二私钥对携带有第一哈希值的第二报告数据进行加密处理,得到第二密文数据,再将第二密文数据发送至客户端设备。需要说明的是,客户端设备和验证服务器事先也通过密钥协商等方式生成了一对相互匹配的密钥对,即第二私钥和第二公钥,其中,第二私钥由验证服务器进行保管,第二公钥由客户端设备进行保管。
客户端设备在接收到上述第二密文数据后,可以利用所保管的第二公钥对第二密文数据进行解密处理,得到携带有第一哈希值的第二报告数据。客户端设备可以先对第二报告数据进行解读,确定验证服务器的判断结果,即确定预设服务器的第一预设内存区域的运行环境是否符合第一预设要求。如果根据第二报告数据确定预设服务器的第一预设内存区域的运行环境不符合第一预设要求,则可以判定预设服务器的预设验证未通过,不再继续后续的验证。如果根据第二报告数据确定预设服务器的第一预设内存区域的运行环境符合第一预设要求,客户端设备可以对第一哈希值进行验证。具体的,由于伪随机数生成器的代码数据是由客户端设备预先提供给预设服务器的,因此,客户端设备可以对第一哈希值进行解读,根据第一哈希值确定预设服务器的第一预设内存区域中的伪随机数生成器是否被篡改。如果根据第一哈希值确定预设服务器的第一预设内存区域中的伪随机数生成器被篡改,则可以确定伪随机数生成器不符合第二预设要求,判定预设服务器验证未通过。如果根据第一哈希值确定预设服务器的第一预设内存区域中的伪随机数生成器没有被篡改,则可以确定伪随机数生成器符合第二预设要求,判定预设服务器验证未通过。
客户端设备在确定预设服务器验证通过后,为了进一步保护与伪随机数相关的数据的数据安全,可以先和预设服务器通过密钥协商等方式生成一对相互匹配的密钥对,即第一密钥和第二密钥,其中,第一密钥由客户端设备保管,第二密钥由预设服务器保管。客户端设备可以利用第一密钥对随机数种子和随机数轮数进行加密,得到加密后的随机数种子和加密后的随机数轮数,再将上述加密后的随机数种子和加密后的随机数轮数发送给预设服务器。
预设服务器在接收到上述加密后的随机数种子和加密后的随机数轮数后,为了避免随机数种子和随机数轮数泄漏或被窃取,可以先将上述加密后的随机数种子和加密后的随机数轮数发送至第一预设内存区域;第一预设内存区域中利用所保管的第二密钥对上述加密后的随机数种子和加密后的随机数轮数分别进行解密处理,得到对应的随机数种子和随机数轮数,再利用上述随机数种子和随机数轮数运行伪随机数生成器生成用户指定的伪随机数。
为了避免伪随机数在传输过程中被窃取或泄露,预设服务器还可以利用第二密钥对伪随机数进行加密,得到加密后的伪随机数,再将上述加密后的伪随机数发送至客户端设备。客户端设备在得到上述加密后的伪随机数后,可以利用所保管的第一密钥对上述加密后的伪随机数进行解密处理,得到用户所需要的指定伪随机数。
由上述场景示例可见,本说明书提供的伪随机数的获取方法,由于通过利用预设服务器的所具有的支持程序安全执行框架的特性,在预设服务器的受保护的第一预设内存区域中建立伪随机数生成器,并在第一预设内存区域中根据用户所提供的随机数种子和随机数轮数,运行上述伪随机数生成器,以生成用户所需要的伪随机数,反馈给用户,避免了伪随机数,以及与伪随机数生成相关的数据被非法获取或遭到泄漏,从而解决了现有方法中存在的伪随机数获取过程中容易出现数据泄漏或被窃取的技术问题,达到能够根据用户需要,高效、安全地生成用户所指定的伪随机数的技术效果。
参阅图3所示,本说明书实施例提供了一种伪随机数的获取方法,其中,该方法具体应用于客户端设备一侧。具体实施时,该方法可以包括以下内容:
S31:响应伪随机数获取请求,生成随机数种子和随机数轮数;
S33:将所述随机数种子和所述随机数轮数发送至预设服务器,其中,所述预设服务器包含有第一预设内存区域,且在所述第一预设内存区域中还设置有伪随机数生成器,所述预设服务器用于在所述第一预设内存区域中根据所述随机数种子和所述随机数轮数运行所述伪随机数生成器生成伪随机数;
S35:接收预设服务器生成的伪随机数。
在本实施例中,具体实施时,客户端设备可以根据用户操作生成并接收上述伪随机数获取请求。其中,上述伪随机数获取请求中携带有用户想要生成的指定伪随机数的特征信息,例如,用于生成伪随机数的随机数种子和随机数轮数。进而,客户端设备可以响应上述伪随机数获取请求,生成对应的随机数种子和随机数轮数。
在本实施例中,客户端设备在生成上述随机数轮数和随机数种子后,可以将上述随机数种子和随机数轮数发送至预设服务器,以请求预设服务器可以利用上述随机数种子和随机数轮数,在预设服务器的第一预设内存区域中运行伪随机数生成器以生成对应的伪随机数。
其中,上述预设服务器具体可以理解为一种支持程序安全执行框架的,具有受保护的第一预设内存区域的服务器。
具体的,上述预设服务器可以是支持SGX(Software Guard Extensions,一种Intel推出的程序安全执行框架)的服务器等。其中,基于上述SGX,上述预设服务器具有以下特性:在预设服务器的程序安全执行框架中会保留一个受保护的内存区域,即第一预设内存区域,例如Enclave等,该内存区域具有较高的机密性和安全性。上述第一预设内存区域具体可以理解为一种预设服务器的内存区域中的飞地区域,即该第一预设内存区域是外界无法直接访问,不受外界影响,只与预设服务器本身进行数据交互的,安全度较高的内存区域。当然,需要说明的是,上述所列举的预设服务器只是为了更好地说明本说明书实施例。具体实施时,根据具体的应用场景和技术发展变化,也可以引入其他类似特性的服务器作为上述预设服务器。对此,本说明书不作限定。
在本实施例中,客户端设备可以预先将用于生成伪随机数的伪随机数生成器的代码文件发送至预设服务器。这样预设服务器可以根据上述伪随机数生成器的代码文件,在第一预设内存区域中建立对应的伪随机数生成器。预设服务器在接收到客户端设备发送的随机数种子和随机数轮数后,可以在第一预设内存区域中,根据随机数种子和随机数轮数运行上述伪随机数生成器生成对应的伪随机数,再将所生成的伪随机数通过有线或无线的方式发送至客户端设备。
其中,上述伪随机数生成器具体可以理解为一种用于生成伪随机数的程序模块。具体的,上述伪随机生成器可以包括以下中的任意一种:CTR_DRBG、Hash_DRBG、HMAC_DRBG等等。当然,上述所列举的伪随机数生成器只是为了更好地说明本说明书实施例。具体实施时,根据具体情况,还可以引入其他类型的伪随机数生成器。对此,本说明书不作限定。
在本实施例中,客户端设备可以通过有线或无线的方式接收预设服务器所生成的伪随机数,完成用户所需要的指定伪随机数的获取。
由上可见,本说明书提供的伪随机数的获取方法,由于通过利用预设服务器的所具有的支持程序安全执行框架的特性,在预设服务器的受保护的第一预设内存区域中建立伪随机数生成器,并在第一预设内存区域中根据用户所提供的随机数种子和随机数轮数,运行上述伪随机数生成器,以生成用户所需要的伪随机数,反馈给用户,避免了伪随机数,以及与伪随机数生成相关的数据被非法获取或遭到泄漏,从而解决了现有方法中存在的伪随机数获取过程中容易出现数据泄漏或被窃取的技术问题,达到能够根据用户需要,高效、安全地生成用户所指定的伪随机数的技术效果。
在一个实施例中,所述第一预设内存区域具体可以包括Enclave区域。具体的,在预设服务器为支持SGX服务器的情况下,上述第一预设内存区域可以是受保护的Enclave区域。当然,上述所列举的预设服务器和第一预设内存区域只是一种示意性说明。具体实施时,根据具体情况还可以选择使用其他类似的支持程序安全执行框架的服务器作为预设服务器,并根据所选择使用的预设服务器的具体特性,选择对应的机密性和安全性较高的内存区域作为第一预设内存区域。对此,本说明书不作限定。
在一个实施例中,在响应伪随机数获取请求,生成随机数种子和随机数轮数前,所述方法具体实施时,还可以包括以下内容:获取关于伪随机数生成器的代码文件;根据所述代码文件,生成对应的动态库数据;将所述动态库数据发送至预设服务器,其中,所述动态库数据用于在预设服务器的第一预设内存区域中建立所述伪随机数生成器。
在本实施例中,上述关于伪随机数生成器的代码文件具体可以理解为用于建立伪随机数生成器的代码数据。其中,上述关于伪随机数生成器的代码文件可以是用户自行编制的代码文件,也可以是由用户从多个预设的代码文件中选中的代码文件。
在本实施例中,具体实施时,客户端端设备可以获取上述关于伪随机数生成器的代码文件,并将上述代码文件打包成对应的动态库数据;再将上述动态库数据发送至预设服务器。以便预设服务器可以在第一预设内存区域中解析上述动态库数据得到对应的代码文件,再在第一预设内存区域中,根据上述代码文件建立所述伪随机数生成器。
在一个实施例中,为了确保用于生成伪随机数的预设服务器的第一预设内存区域,以及预设服务器用于生成伪随机数的伪随机数生成器是安全可靠的,在将所述随机数种子和所述随机数轮数发送至预设服务器前,所述方法具体实施时,还可以包括以下内容:根据预设的验证规则,与所述预设服务器进行预设验证;在预设验证通过的情况下,将所述随机数种子和所述随机数轮数发送至预设服务器。
在本实施例中,为了进一步提高数据安全性和机密性,避免随机数种子和随机数轮数遭到在不可靠的预设服务器中遭到泄漏或被窃取,在预设验证不同过的情况下,客户端设备可以重新选择其他预设服务器来再根据预设的验证规则,进行预设验证。
在一个实施例中,上述根据预设的验证规则,与所述预设服务器进行预设验证,具体实施时,可以包括以下内容:向所述预设服务器发送验证请求;获取第二报告数据,其中,所述第二报告数据为验证服务器根据第一报告数据,确定所述第一预设内存区域的运行环境是否符合第一预设要求后所生成的数据,所述第二报告数据还携带有第一哈希值;所述第一报告数据为所述预设服务器响应所述验证请求,根据所述第一预设内存区域的运行环境和伪随机数生成器所生成的数据,所述第一报告数据携带有第一哈希值,所述第一哈希值与所述伪随机数生成器相关;根据所述二报告数据,确定所述第一预设内存区域的运行环境是否符合第一预设要求;根据所述第一哈希值,确定所述伪随机数生成器是否符合第二预设要求;在确定所述第一预设内存区域的运行环境符合第一预设要求,且所述伪随机数生成器符合第二预设要求的情况下,确定预设验证通过。
在本实施例中,上述验证请求具体可以理解为一种客户端设备根据预设的验证规则生成的用于发起预设验证的请求数据。
在本实施例中,预设服务器在接收到上述验证请求后,可以根据预设规则响应验证请求,根据预设服务器的第一预设内存区域的运行环境生成第一报告数据,根据第一预设内存区域中的伪随机数生成器生成第一哈希值,得到携带有第一哈希值的第一报告数据。其中,上述第一哈希值只与伪随机数生成器相关,上述第一报告数据具体可以用于表征预设服务器的第一预设内存区域中运行环境的具体情况,上述第一哈希值具体可以用于表征第一预设内存区域中伪随机数生成器的具体情况。
在本实施例中,为了能够准确、客观地判断预设服务器的第一预设内存区域中的运行环境是否符合第一预设要求,还可以引入可靠的验证服务器来对第一报告数据进行解析处理,以对预设服务器的第一预设内存区域的运行环境进行评价。
在本实施例中,上述验证服务器具体可以为提供预设服务器所拥有的程序安全执行框架的提供方的服务器。例如,可以为Intel的官方服务器等。当然,上述所列举的验证服务器只是一种示意性说明。本说明书实施例对验证服务器的具体类型不作限定。
在本实施例中,验证服务器在获取上述携带有第一哈希值的第一报告数据后,仅对第一报告数据进行解析处理。具体的,可以利用所拥有关于第一预设内存区域的标准参数数据对第一报告数据解析得到的参数数据进行比对,根据比对结果确定第一预设内存区域的运行环境是否可靠,如果第一预设内存区域的运行环境可靠,则判断符合第一预设要求;如果第一预设内存区域的运行环境不可靠,则判断不符合第一预设要求。根据判断结果生成第二报告数据,同时将第一哈希值附带于第二报告数据中,并将携带有第一哈希值的第二报告数据发送至客户端设备。
在本实施例中,客户端设备可以先根据第二报告数据获取验证服务器得到的判断结果,并根据该判断结果确定预设服务器的第一预设内存区域的运行环境是否符合第一预设要求。在确定预设服务器的第一预设内存区域的运行环境符合第一预设要求的情况下,在对第二报告数据所携带的第一哈希值进行验证。具体的,由于第一哈希值是预设服务器根据第一预设内存区域中的伪随机数生成器生成的,而伪随机数生成器又客户端设备提供的,因此,客户端设备可以根据之前发送给预设服务器的关于伪随机数生成器的代码文件,结合第一哈希值所包含的信息,确定第一预设内存区域中的伪随机数生成器是否发生篡改。如果确定第一预设内存区域中的伪随机数生成器没有发生篡改,则判断第一预设内存区域中的伪随机数生成器符合第二预设要求,确定预设验证通过,进而可以向该预设服务器发送随机数种子和随机数轮数,以便生成对应的伪随机数。如果确定第一预设内存区域中的伪随机数生成器发生了篡改,则判断第一预设内存区域中给的伪随机数生成器不符合第二预设要求,确定预设验证不通过,进而可以重新选择可靠的预设服务器发送随机数种子和随机数轮数来生成伪随机数。
在一个实施例中,为了保护数据传输过程中的数据安全,避免报告数据在传输过程中出现泄漏或者被窃取,预设服务器和验证服务器可以预先通过密钥协商等方式生成相互匹配的第一私钥和第一公钥。其中,预设服务器保存第一私钥,验证服务器保存第一公钥。预设服务器在向验证服务器发送携带有第一哈希值的第一报告数据时,可以先利用第一私钥对上述携带有第一哈希值的第一报告数据进行加密处理,得到第一密文数据,再将第一密文数据发送给验证服务器。验证服务器在接收到第一密文数据后,可以利用第一公钥对第一密文数据进行解密处理,得到对应的携带有第一哈希值的第一报告数据。
在一个实施例中,验证服务器也可以与客户端设备预先通过密钥协商等方式生成相互匹配的第二私钥和第二公钥。其中,验证服务器保管第二私钥,客户端设备保管第二公钥。验证服务器在将携带有第一哈希值的第二报告数据发送至客户端设备时,可以先利用第二私钥对上述携带有第一哈希值的第二报告数据进行加密处理,得到第二密文数据,再将上述第二密文数据发送至客户端设备。
在一个实施例中,相应的,对于客户端设备,获取第二报告数据具体实施时,还可以包括:获取验证服务器发送的第二密文数据,其中,所述第二密文数据为验证服务器利用第二私钥对第二报告数据进行加密处理后得到的数据;利用第二公钥对所述第二密文数据进行解密处理,得到第二报告数据,其中,所述第二公钥与所述第二私钥匹配。
在一个实施例中,为了保证随机数种子和随机数轮数传输过程中的数据安全,在预设验证通过的情况下,将所述随机数种子和所述随机数轮数发送至预设服务器,具体实施时,可以包括以下内容:在预设验证通过的情况下,和预设服务器确定第一密钥和第二密钥,其中,所述第一密钥与第二密钥匹配,所述客户端设备获取并保管第一密钥,预设服务器获取并保管第二密钥。进而客户端设备可以利用第一密钥加密所述随机数种子得到加密后的随机数种子,利用第一密钥加密所述随机数轮数得到加密后的随机数轮数;再将所述加密后的随机数种子,和所述加密后的随机数轮数发送至预设服务器。
在一个实施例中,为了保证伪随机数传输过程中的数据安全,具体实施时,预设服务器可以先利用第二密钥对所生成的伪随机数进行加密处理,得到加密后的伪随机数,再将加密后的伪随机数发送至客户端设备。相应的,对于客户端设备,接收预设服务器生成的伪随机数,可以包括:接收预设服务器发送的加密后的伪随机数,利用第一密钥对所述加密后的伪随机数进行解密处理,获取所述伪随机数。
在一个实施例中,所述方法具体实施时,还可以包括以下内容:客户端设备还可以响应伪随机数获取请求,只生成随机数种子;并按照上述方式将所述随机数种子发送至预设服务器,其中,所述预设服务器包含有第一预设内存区域,且在所述第一预设内存区域中还设置有伪随机数生成器,所述预设服务器用于根据所述随机数种子和初始状态参数在所述第一预设内存区域中运行伪随机数生成器,所述初始状态参数根据所述随机数种子生成;再获取并发送用户设置的指定随机数轮数;预设服务器在接收到上述指定随机数轮数后,可以根据指定随机数轮数,和第一预设内存预期汇总的基于初始状态参数运行的伪随机数生成器,生成与指定随机数轮数对应的伪随机数,并将该伪随机数发送至客户端设备;客户端设备可以接收获取与所述指定随机数轮数对应的伪随机数。
在本实施例中,通过上述方式,在用于生成伪随机数的伪随机数生成器和伪随机种子不变的情况下,客户端设备还可以向预设服务器发送多个不同的伪随机数轮数,以生成多个分别对应各个伪随机数轮数的多个不同的伪随机数。
在一个实施例中,客户端设备还可以不向预设服务器发送伪随机数种子和伪随机数轮数,而只向预设服务器发送伪随机数生成指令。这时预设服务器还可以根据关于伪随机数生成器的代码文件生成初始的随机数种子和初始的随机数轮数,进而可以先根据初始的随机数种子和初始的随机数轮数运行伪随机数生成器,以生成伪随机数。
在本实施例中,当用户需要某个指定伪随机数时,可以通过客户端设备向预设服务器发送与指定伪随机数对应的指定随机数种子和指定随机数轮数。预设服务器接收到上述指定随机数种子和指定随机数轮数后,再根据上述指定随机数种子和指定随机数轮数,在第一预设内存区域中运行伪随机数生成器以生成对应的指定伪随机数。
在一个实施例中,在接收预设服务器生成的伪随机数后,所述方法具体实施时,还可以包括以下内容:客户端设备根据所述伪随机数,进行多方安全计算,得到计算结果;根据所述计算结果,进行交易数据处理。例如,可以根据上述伪随机数进行多方安全计算,得到交易签名;再根据所生成的交易签名作为核销凭证,为用户进行账单数据的核销处理等等。当然,上述所列举的客户端设备关于伪随机数的应用只是一种示意性说明。具体实施时,根据具体的应用场景和处理需求,还可以利用所生成的伪随机数进行其他类型的数据处理。对此,本说明书不作限定。
在一个实施例中,在接收预设服务器生成的伪随机数后,在后续暂时不需要使用对应的伪随机数生成器的情况下,为了避免伪随机数生成器的相关信息被泄漏或者遭到窃取,所述方法具体实施时,还可以包括以下内容:客户端设备向所述预设服务器发送销毁指令,其中,所述销毁指令用于指示销毁所述预设服务器的第一预设内存区域中的伪随机数生成器。预设服务器在接收到上述销毁指令后,可以响应上述销毁指令,销毁第一预设内存区域中的伪随机数生成器,避免伪随机数生成器等与伪随机数相关的数据被窃取或遭到泄漏,进一步提高了数据安全。
由上可见,本说明书提供的伪随机数的获取方法,由于通过利用预设服务器的所具有的支持程序安全执行框架的特性,在预设服务器的受保护的第一预设内存区域中建立伪随机数生成器,并在第一预设内存区域中根据用户所提供的随机数种子和随机数轮数,运行上述伪随机数生成器,以生成用户所需要的伪随机数,反馈给用户,避免了伪随机数,以及与伪随机数生成相关的数据被非法获取或遭到泄漏,从而解决了现有方法中存在的伪随机数获取过程中容易出现数据泄漏或被窃取的技术问题,达到能够根据用户需要,高效、安全地生成用户所指定的伪随机数的技术效果;还通过在生成伪随机数前,引入可靠的验证服务器,例如Intel的官方服务器,进而可以根据预设验证规则对预设服务器进行可靠性验证,在确定预设服务器的第一预设内存区域的运行环境可靠,且预设服务器的第一预设内存区域中的伪随机数生成器的相关代码数据未被篡改的情况下,再将随机数种子和随机数轮数发送至预设服务器以生成伪随机数,进一步提高了伪随机数获取过程中的数据安全。
本说明书实施例还提供一种客户端设备,包括处理器以及用于存储处理器可执行指令的存储器,所述处理器具体实施时可以根据指令执行以下步骤:响应伪随机数获取请求,生成随机数种子和随机数轮数;将所述随机数种子和所述随机数轮数发送至预设服务器,其中,所述预设服务器包含有第一预设内存区域,且在所述第一预设内存区域中还设置有伪随机数生成器,所述预设服务器用于在所述第一预设内存区域中根据所述随机数种子和所述随机数轮数运行所述伪随机数生成器生成伪随机数;接收预设服务器生成的伪随机数。
为了能够更加准确地完成上述指令,参阅图4所示,本说明书还提供了另一种具体的客户端设备,其中,所述客户端设备具体包括网络通信端口、处理器以及存储器,上述结构通过内部线缆相连,以便各个结构可以进行具体的数据交互。
其中,所述网络通信端口,具体可以用于将所述随机数种子和所述随机数轮数发送至预设服务器,其中,所述预设服务器包含有第一预设内存区域,且在所述第一预设内存区域中还设置有伪随机数生成器,所述预设服务器用于在所述第一预设内存区域中根据所述随机数种子和所述随机数轮数运行所述伪随机数生成器生成伪随机数;以及接收预设服务器生成的伪随机数。
所述处理器,具体可以用于响应伪随机数获取请求,生成随机数种子和随机数轮数。
所述存储器,具体可以用于存储处理器所基于的相应的指令程序。
在本实施例中,所述网络通信端口可以是与不同的通信协议进行绑定,从而可以发送或接收不同数据的虚拟端口。例如,所述网络通信端口可以是负责进行web数据通信的80号端口,也可以是负责进行FTP数据通信的21号端口,还可以是负责进行邮件数据通信的25号端口。此外,所述网络通信端口还可以是实体的通信接口或者通信芯片。例如,其可以为无线移动网络通信芯片,如GSM、CDMA等;其还可以为Wifi芯片;其还可以为蓝牙芯片。
在本实施例中,所述处理器可以按任何适当的方式实现。例如,处理器可以采取例如微处理器或处理器以及存储可由该(微)处理器执行的计算机可读程序代码(例如软件或固件)的计算机可读介质、逻辑门、开关、专用集成电路(Application SpecificIntegrated Circuit,ASIC)、可编程逻辑控制器和嵌入微控制器的形式等等。本说明书并不作限定。
在本实施例中,所述存储器可以包括多个层次,在数字系统中,只要能保存二进制数据的都可以是存储器;在集成电路中,一个没有实物形式的具有存储功能的电路也叫存储器,如RAM、FIFO等;在系统中,具有实物形式的存储设备也叫存储器,如内存条、TF卡等。
本说明书实施例还提供了一种基于上述伪随机数的获取方法的计算机存储介质,所述计算机存储介质存储有计算机程序指令,在所述计算机程序指令被执行时实现:响应伪随机数获取请求,生成随机数种子和随机数轮数;将所述随机数种子和所述随机数轮数发送至预设服务器,其中,所述预设服务器包含有第一预设内存区域,且在所述第一预设内存区域中还设置有伪随机数生成器,所述预设服务器用于在所述第一预设内存区域中根据所述随机数种子和所述随机数轮数运行所述伪随机数生成器生成伪随机数;接收预设服务器生成的伪随机数。
在本实施例中,上述存储介质包括但不限于随机存取存储器(Random AccessMemory,RAM)、只读存储器(Read-Only Memory,ROM)、缓存(Cache)、硬盘(Hard DiskDrive,HDD)或者存储卡(Memory Card)。所述存储器可以用于存储计算机程序指令。网络通信单元可以是依照通信协议规定的标准设置的,用于进行网络连接通信的接口。
在本实施例中,该计算机存储介质存储的程序指令具体实现的功能和效果,可以与其它实施方式对照解释,在此不再赘述。
参阅图5所示,在软件层面上,本说明书实施例还提供了一种伪随机数的获取装置,该装置具体可以包括以下的结构模块:
生成模块501,具体可以用于响应伪随机数获取请求,生成随机数种子和随机数轮数;
发送模块503,具体可以用于将所述随机数种子和所述随机数轮数发送至预设服务器,其中,所述预设服务器包含有第一预设内存区域,且在所述第一预设内存区域中还设置有伪随机数生成器,所述预设服务器用于在所述第一预设内存区域中根据所述随机数种子和所述随机数轮数运行所述伪随机数生成器生成伪随机数;
接收模块505,具体可以用于接收预设服务器生成的伪随机数。
在一个实施例中,所述第一预设内存区域具体可以包括Enclave区域等。
在一个实施例中,所述装置还包括获取模块,其中,所述获取模块具体可以用于在响应伪随机数获取请求,生成随机数种子和随机数轮数前,获取关于伪随机数生成器的代码文件;根据所述代码文件,生成对应的动态库数据;
所述发送模块503,具体还可以用于将所述动态库数据发送至预设服务器,其中,所述动态库数据用于在预设服务器的第一预设内存区域中建立所述伪随机数生成器。
在一个实施例中,所述装置还可以包括验证模块,具体可以用于在将所述随机数种子和所述随机数轮数发送至预设服务器前,根据预设的验证规则,与所述预设服务器进行预设验证;在预设验证通过的情况下,将所述随机数种子和所述随机数轮数发送至预设服务器。
在一个实施例中,所述验证模块具体可以包括以下结构单元:
发送单元,具体可以用于向所述预设服务器发送验证请求;
获取单元,具体可以用于获取第二报告数据,其中,所述第二报告数据为验证服务器根据第一报告数据,确定所述第一预设内存区域的运行环境是否符合第一预设要求后所生成的数据,所述第二报告数据还携带有第一哈希值;所述第一报告数据为所述预设服务器响应所述验证请求,根据所述第一预设内存区域的运行环境和伪随机数生成器所生成的数据,所述第一报告数据携带有第一哈希值,所述第一哈希值与所述伪随机数生成器相关;
第一确定单元,具体可以用于根据所述二报告数据,确定所述第一预设内存区域的运行环境是否符合第一预设要求;根据所述第一哈希值,确定所述伪随机数生成器是否符合第二预设要求;
第二确定单元,具体可以用于在确定所述第一预设内存区域的运行环境符合第一预设要求,且所述伪随机数生成器符合第二预设要求的情况下,确定预设验证通过。
在一个实施例中,上述获取单元具体实施时,可以按照以下程序执行:获取验证服务器发送的第二密文数据,其中,所述第二密文数据为验证服务器利用第二私钥对第二报告数据进行加密处理后得到的数据;利用第二公钥对所述第二密文数据进行解密处理,得到第二报告数据,其中,所述第二公钥与所述第二私钥匹配。
在一个实施例中,所述发送模块503具体实施时,可以按照下程序执行:在预设验证通过的情况下,和预设服务器确定第一密钥和第二密钥,其中,所述第一密钥与第二密钥匹配;获取第一密钥,并利用第一密钥加密所述随机数种子得到加密后的随机数种子,利用第一密钥加密所述随机数轮数得到加密后的随机数轮数;将所述加密后的随机数种子,和所述加密后的随机数轮数发送至预设服务器。
在一个实施例中,具体实施时,上述发送模块503具体还可以用于获取并发送指定随机数轮数;
上述接收模块505具体还可以用于接收与所述指定随机数轮数对应的伪随机数。
在一个实施例中,上述装置具体还可以包括处理模块,具体可以用于根据所述伪随机数,进行多方安全计算,得到计算结果;根据所述计算结果,进行交易数据处理。
在一个实施例中,上述发送模块503具体还可以用于在接收预设服务器生成的伪随机数后,向所述预设服务器发送销毁指令,其中,所述销毁指令用于指示销毁所述预设服务器的第一预设内存区域中的伪随机数生成器。
需要说明的是,上述实施例阐明的单元、装置或模块等,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
由上可见,本说明书实施例提供的伪随机数获取装置,由于通过利用预设服务器的所具有的支持程序安全执行框架的特性,通过发送模块将随机数种子和随机数轮数发送至预设服务器,以便在预设服务器的受保护的第一预设内存区域中建立伪随机数生成器,并在第一预设内存区域中根据用户所提供的随机数种子和随机数轮数,运行上述伪随机数生成器,以生成用户所需要的伪随机数后,通过接收模块接收用户所需要的指定伪随机数,避免了伪随机数,以及与伪随机数生成相关的数据被非法获取或遭到泄漏,从而解决了现有方法中存在的伪随机数获取过程中容易出现数据泄漏或被窃取的技术问题,达到能够根据用户需要,高效、安全地生成用户所指定的伪随机数的技术效果。
参阅图6所示,本说明书实施例还提供了一种伪随机数的获取方法,其中,该方法具体应用于预设服务器一侧。具体实施时,该方法可以包括以下内容:
S61:获取随机数种子和随机数轮数;
S63:在第一预设内存区域中根据所述随机数种子和所述随机数轮数运行所述伪随机数生成器生成伪随机数,其中,所述第一预设内存区域预先设置有伪随机数生成器;
S65:发送所述伪随机数。
在本实施例中,上述预设服务器可以是支持SGX(Software Guard Extensions,一种Intel推出的程序安全执行框架)的服务器等。其中,基于上述SGX,上述预设服务器具有以下特性:在预设服务器的程序安全执行框架中会保留一个受保护的内存区域,即第一预设内存区域,例如Enclave等,该内存区域具有较高的机密性和安全性。上述第一预设内存区域具体可以理解为一种预设服务器的内存区域中的飞地区域,即该第一预设内存区域是外界无法直接访问,不受外界影响,只与预设服务器本身进行数据交互的,安全度较高的内存区域。当然,需要说明的是,上述所列举的预设服务器只是为了更好地说明本说明书实施例。具体实施时,根据具体的应用场景和技术发展变化,也可以引入其他类似特性的服务器作为上述预设服务器。对此,本说明书不作限定。
在本实施例中,预设服务器具体可以通过有线或无线的方式与客户端设备耦合,从而可以接收客户端设备发送的随机数种子和随机数轮数。
在本实施例中,为了保护伪随机数生成过程中的数据安全,避免伪随机数,以与伪随机数相关的数据遭到泄漏或者被窃取,具体实施时,预设服务器在获取了随机数种子和随机数轮数后,可以将上述随机数种子和随机数轮数发送至受保护的第一预设内存区域,并在第一预设内存区域中根据所述随机数种子和所述随机数轮数运行所述伪随机数生成器生成对应的伪随机数再反馈给客户端设备。
在一个实施例中,所述第一预设内存区域具体可以包括Enclave区域等。当然,上述所列举的第一预设内存区域只是一种示意性说明。具体实施时,根据预设服务器所支持的程序安全执行框架,还可以引入其他受保护的内存区域作为上述第一预设内存区域。对此,本说明书不作限定。
在一个实施例中,在获取随机数种子和随机数轮数前,所述方法具体实施时,还可以包括以下内容:接收动态库数据,其中,所述动态库数据根据关于为随机数生成器的代码文件生成;根据所述动态库数据,在第一预设内存区域中建立伪随机数生成器。
在本实施例中,预设服务器在接收到客户端设备发送的动态库数据后,可以先将上述动态库数据发送至受保护的第一预设内存区域,在第一预设内存区域中对动态库数据进行解析,得到对应的关于伪随机数生成器的代码文件。这样可以避免在普通内存区域中解析时上述代码文件所存在的遭泄漏或被窃取的风险。
在本实施例中,在解析得到上述代码文件后,预设服务器可以在第一预设内存区域中,根据上述代码文件建立起对应的伪随机数生成器,以待后续使用。
在本实施例中,需要说明的是,由于此时预设服务器并没有得到具体的随机数种子和随机数轮数,预设服务器在建立好上述随机数生成器后,可以根据上述代码文件内的参数数据,按照默认设置方式设置伪随机数生成器的初始状态参数,进而可以根据初始状态参数运行伪随机数生成器。
在一个实施例中,为了进一步提高数据安全,在获取随机数种子和随机数轮数前,所述方法具体实施时,还可以包括以下内容:根据预设的验证规则,与客户端设备进行预设验证;在预设验证通过的情况下,获取所述随机数种子和所述随机数轮数。
在一个实施例中,上述根据预设的验证规则,与客户端设备进行预设验证,具体实施时,可以包括以下内容:接收验证请求;响应所述验证请求,根据所述第一预设内存区域的运行环境和伪随机数生成器,生成第一报告数据,所述第一报告数据携带有第一哈希值,所述第一哈希值与所述伪随机数生成器相关;将所述第一报告数据发送至验证服务器,其中,所述验证服务器用于根据所述第一报告数据生成第二报告数据,并将所述第二报告数据发送至客户端设备。
在一个实施例中,为保护第一报告数据传输过程中的数据安全,上述将所述第一报告数据发送至验证服务器,具体实施时,可以包括以下内容:利用第一私钥加密所述第一报告数据,得到第一密文数据;将所述第一密文数据发送至验证服务器,其中,所述验证服务器保管有与所述第一私钥匹配的第一公钥。
在本实施例中,具体实施时,预设服务器和验证服务器可以通过密钥协商等方式确定相互的匹配的第一私钥和第一公钥;接着由预设服务器获取并保管第一私钥,由验证服务器获取并保管第一公钥。
在本实施例中,验证服务器在接收到第一密文数据后,可以利用第一私钥对第一密文数据进行解密处理,得到携带有第一哈希值的第一报告数据。验证服务器可以根据第一报告数据,判断预设服务器的第一预设内存区域的运行环境是否符合第一预设要求,根据判断结果生成第二报告数据。验证服务器不对第一哈希值进行验证,而是将第一哈希值附在第二报告数据,再将携带有第一哈希值的第二报告数据加密后发送给客户端设备。
在本实施例中,客户端在获取了携带有第一哈希值的第二报告数据,可以根据第二报告数据得到验证服务器的判断结果,根据该判断结果确定预设服务器的第一预设内存区域的运行环境是否符合第一预设要求。同时,客户端设备还可以根据第一哈希值,确定位于预设服务器的第一预设内存区域中的伪随机数生成器是否被篡改,是否符合第二预设要求。客户端设备在确定预设服务器的第一预设内存区域的运行环境符合第一预设要求,且位于预设服务器的第一预设内存区域中的伪随机数生成器符合第二预设要求的情况下,确定验证通过,进而可以向预设服务器发送随机数种子和随机数轮数。
在一个实施例中,为了保护随机数种子和随机数轮数在传输过程中的数据安全,在预设验证通过的情况下,获取所述随机数种子和所述随机数轮数,具体实施时,可以包括以下内容:在预设验证通过的情况下,与所述客户端设备确定第一密钥和第二密钥,其中,所述第一密钥与第二密钥匹配,并获取第二密钥;接收客户端设备发送的加密后的随机数种子,和加密后的随机数轮数;在第一预设内存区域中,利用第二密钥解密所述加密后的随机数种子,得到所述随机数种子;利用第二密钥解密所述加密后的随机数轮数,得到所述随机数轮数。
在本实施例中,具体实施时,客户端设备和预设服务器可以通过密钥协商等方式生成相互匹配的第一密钥和第二密钥;再由客户端设备获取并保管第一密钥,由预设服务器获取并保管第二密钥。
在一个实施例中,为了保护伪随机数传输过程中的数据安全,上述发送所述伪随机数,具体实施时,可以包括以下内容:在第一预设内存区域中,利用所述第二密钥加密所述伪随机数,得到加密后的伪随机数;将所述加密后的伪随机数发送至客户端设备。
在本实施例中,客户端设备在得到加密后的伪随机数后,可以利用所保管的第一密钥对上述加密后的伪随机数进行解密处理,获取用户所需要的指定伪随机数。
在一个实施例中,预设服务器在第一预设内存区域中建立了伪随机数生成器后,还可以先接收客户端设备提供的随机数种子,并根据上述随机数种子设置包括初始随机数轮数等初始状态参数,进而可以根据随机数种子和初始随机数轮数在第一预设内存区域中运行伪随机数生成器,生成初始随机数。
在本实施例中,在预设服务器按照上述方式根据随机数种子和初始随机数轮数在第一预设内存区域中运行伪随机数生成器时,还可以接收客户端设备发送的其他的指定随机数轮数,进而可以根据新接收的指定随机数轮数,和已经在第一预设内存区域中根据随机数种子和初始状态参数运行的伪随机数生成器,生成与新接收的指定随机数轮数对应的伪随机数。
在一个实施例中,具体实施时,所述方法还可以包括以下内容:接收客户端利用第一密钥进行加密处理后发送的加密后的随机数种子;在所述第一预设内存区域中,利用所述第二密钥解密所述加密后的随机数种子,得到随机数种子;根据所述随机数种子,确定初始状态参数,其中,所述初始状态参数至少包括初始随机数轮数;根据所述随机数种子和初始状态参数,在所述第一预设内存区域中运行伪随机数生成器。
在一个实施例中,在接收加密后的随机数种子,所述方法具体实施时,还可以包括以下内容:通过seal规则,将所述加密后的随机数种子,以及所述第二密钥存储于第二预设内存区域。
在本实施例中,上述seal具体可以理解为预设服务器所支持的一种基于加密指令的规则集。
在本实施例中,上述第二预设内存区域具体可以理解为一种预设服务器中区别与受保护的第一预设内存区域的普通内存区域。
在本实施例中,预设服务器在接收到随机数种子后,预设服务器还可以将上述加密后的随机数种子,以及用于解密的第二密钥作为备份数据通过seal规则保存在第二预设内存区域。同时也可以将关于伪随机数生成器的代码文件按照类似的方式作为备份数据通过seal规则保存在第二预设内存区域中。这样当第一预设内存区域的运行环境出现意外,导致第一预设内存区域中的伪随机数生成器,以及与伪随机数相关的数据,例如随机数种子和随机数轮数缺失时,可以通过与seal规则相对的unseal规则获取得到预先保存在第二预设内存区域中的加密后的随机数种子、第二密钥、伪随机数生成器的代码文件等;再将上述数据发送至第一预设内存区域中,以便在第一预设内存区域中重新建立并运行对应的伪随机数生成器,以生成伪随机数。
在一个实施例中,在根据所述随机数种子和初始状态参数,在所述第一预设内存区域中运行所述伪随机数生成器后,所述方法具体实施时,还可以包括以下内容:接收指定随机数轮数;根据所述指定随机数轮数和基于初始状态参数运行的伪随机数生成器,在第一预设内存区域中确定出与指定随机数轮数对应的伪随机数。
在本实施例中,有时用户还需要基于同一个随机数种子,但随机数轮数不同的多个伪随机数,这时用户可以直接通过客户端设备向预服务器发送其他多个伪随机数所对应的指定随机数轮数。预设服务器在接收到上述指定随机数轮数后,可以根据新接收的指定伪随机数,结合之前已经基于初始状态参数或者基于第一次接收到的随机数轮数运行的伪随机数生成器,在该伪随机数生成器的基础上再生成于指定随机数轮数对应的伪随机数,从而可以提高处理效率。
在一个实施例中,上述根据所述指定随机数轮数和基于初始状态参数运行的伪随机数生成器,在第一预设内存区域中确定出与指定随机数轮数对应的伪随机数,具体实施时,可以包括以下内容:比较所述指定随机数轮数与所述初始随机数轮数的大小;在所述指定随机数轮数大于或等于所述初始随机数轮数的情况下,确定所述指定随机数轮数与所述初始随机数轮数的差异值;利用所述基于初始状态参数运行伪随机数生成器增加差异值轮数的迭代计算,生成与指定随机数轮数对应的伪随机数。
在本实施例中,预设服务器在接收到上述新的指定随机数轮数后,可以先在第一预设内存区域中,将指定随机数轮数与初始随机数轮数(或者第一接收到的随机数轮数)进行数值大小比较,根据比较结果选择对应的方式来生成与指定随机数轮数对应的伪随机数。
具体的,在根据比较结果确定所述指定随机数轮数大于或等于所述初始随机数轮数的情况下,可以选择按照以下方式生成与指定随机数种子对应的伪随机数:确定所述指定随机数轮数与所述初始随机数轮数的差异值;利用所述基于初始状态参数运行伪随机数生成器增加差异值轮数的迭代计算,生成与指定随机数轮数对应的伪随机数。例如,初始随机数轮数为10轮,而新接收的指定随机数轮数为15轮,相应的差异值为5轮,则预设服务器可以控制伪随机数生成器在之前运行10轮的基础再增加5轮的迭代运行以生成与15轮随机数轮数对应的伪随机数。
在根据比较结果确定所述指定随机数轮数小于所述初始随机数轮数的情况下,预设服务器可以从第二预设内存区域中重新获取随机数种子,以及关于伪随机数生成器的代码文件,在第一预设内存区域中,根据上述代码文件重新建立伪随机数生成器;根据指定随机数轮数和随机数种子,在第一预设内存区域中运行上述重新建立的伪随机数生成器以生成与指定随机数轮数对应的伪随机数。
在一个实施例中,在所述指定随机数轮数小于所述初始随机数轮数的情况下,所述方法具体实施时,还可以包括以下内容:通过unseal规则,从所述第二预设内存区域中获取加密后的随机数种子,以及所述第二密钥,并在第一预设内存区域中利用所述第二密钥解密得到所述随机数种子;在所述第一预设内存区域中,根据动态库数据重建伪随机数生成器;根据所述伪随机数种子和所述指定随机数轮数,在第一预设内存区域中运行所述重建的伪随机数生成器,生成与指定随机数轮数对应的伪随机数。
在一个实施例中,在预设服务器发送所述伪随机数后,所述方法具体实施时,还可以包括以下内容:接收并响应销毁指令,销毁第一预设内存区域中的伪随机数生成器。
在本实施例中,当用户得到了所需要的指定的伪随机数,不再需要运行预设服务器的第一预设内存区域中的伪随机数生成器时,可以通过客户端设备向预设服务器发送销毁指令。预设服务器在接收到上述销毁指令后,可以根据上述销毁指令销毁掉第一预设内存区域中的伪随机数生成器,避免与伪随机数相关的数据被泄漏,同时也会销毁掉之前所接收的与伪随机数相关的数据,例如,随机数种子、随机数轮数等等,避免上述数据被泄漏。完成上述处理后,预设服务器会还退出第一预设内存区域,释放该伪随机数生成器之前所占用的内存资源。
由上可见,本说明书实施例提供的伪随机数获取方法,由于通过利用预设服务器的所具有的支持程序安全执行框架的特性,将随机数种子和随机数轮数发送至预设服务器,以便在预设服务器的受保护的第一预设内存区域中建立伪随机数生成器,并在第一预设内存区域中根据用户所提供的随机数种子和随机数轮数,运行上述伪随机数生成器,以生成用户所需要的伪随机数,避免了伪随机数,以及与伪随机数生成相关的数据被非法获取或遭到泄漏,从而解决了现有方法中存在的伪随机数获取过程中容易出现数据泄漏或被窃取的技术问题,达到能够根据用户需要,高效、安全地生成用户所指定的伪随机数的技术效果。
本说明书实施例还提供一种服务器,包括处理器以及用于存储处理器可执行指令的存储器,所述处理器具体实施时可以根据指令执行以下步骤:获取随机数种子和随机数轮数;在第一预设内存区域中根据所述随机数种子和所述随机数轮数运行所述伪随机数生成器生成伪随机数,其中,所述第一预设内存区域预先设置有伪随机数生成器;发送所述伪随机数。
为了能够更加准确地完成上述指令,参阅图7所示,本说明书还提供了另一种具体的服务器,其中,所述服务器包括网络通信端口、处理器以及存储器,上述结构通过内部线缆相连,以便各个结构可以进行具体的数据交互。
其中,所述网络通信端口,具体可以用于获取随机数种子和随机数轮数;并发送伪随机数。
所述处理器,具体可以用于在第一预设内存区域中根据所述随机数种子和所述随机数轮数运行所述伪随机数生成器生成伪随机数,其中,所述第一预设内存区域预先设置有伪随机数生成器。
所述存储器,具体可以用于存储处理器所基于的相应的指令程序。
本说明书实施例还提供了一种基于上述伪随机数的获取方法的计算机存储介质,所述计算机存储介质存储有计算机程序指令,在所述计算机程序指令被执行时实现:获取随机数种子和随机数轮数;在第一预设内存区域中根据所述随机数种子和所述随机数轮数运行所述伪随机数生成器生成伪随机数,其中,所述第一预设内存区域预先设置有伪随机数生成器;发送所述伪随机数。
参阅图8所示,在软件层面上,本说明书实施例还提供了一种伪随机数的获取装置,该装置具体可以包括以下的结构模块:
获取模块801,具体可以用于获取随机数种子和随机数轮数;
处理模块803,具体可以用于在第一预设内存区域中根据所述随机数种子和所述随机数轮数运行所述伪随机数生成器生成伪随机数,其中,所述第一预设内存区域中预先设置有伪随机数生成器;
发送模块805,具体可以用于发送所述伪随机数。
在一个实施例中,所述第一预设内存区域具体可以包括Enclave区域等。
在一个实施例中,所述获取模块801在获取随机数种子和随机数轮数前,具体还可以用于:接收动态库数据,其中,所述动态库数据根据关于为随机数生成器的代码文件生成;
相应的,所述处理模块803还可以用于根据所述动态库数据,在第一预设内存区域中建立伪随机数生成器。
在一个实施例中,所述装置还包括验证模块,具体可以用于在获取随机数种子和随机数轮数前,根据预设的验证规则,与客户端设备进行预设验证;在预设验证通过的情况下,获取所述随机数种子和所述随机数轮数。
在一个实施例中,所述验证模块具体可以包括以下结构单元:
接收单元,具体可以用于接收验证请求;
生成单元,具体可以用于响应所述验证请求,根据所述第一预设内存区域的运行环境和伪随机数生成器,生成第一报告数据,所述第一报告数据携带有第一哈希值,所述第一哈希值与所述伪随机数生成器相关;
发送单元,具体可以用于将所述第一报告数据发送至验证服务器,其中,所述验证服务器用于根据所述第一报告数据生成第二报告数据,并将所述第二报告数据发送至客户端设备。
在一个实施例中,所述发送单元具体实施,可以按照以下程序执行:利用第一私钥加密所述第一报告数据,得到第一密文数据;将所述第一密文数据发送至验证服务器,其中,所述验证服务器保管有与所述第一私钥匹配的第一公钥。
在一个实施例中,所述获取模块801,具体还可以按照以下程序执行:在预设验证通过的情况下,与所述客户端设备确定第一密钥和第二密钥,其中,所述第一密钥与第二密钥匹配,并获取第二密钥;接收客户端设备发送的加密后的随机数种子,和加密后的随机数轮数;在第一预设内存区域中,利用第二密钥解密所述加密后的随机数种子,得到所述随机数种子;利用第二密钥解密所述加密后的随机数轮数,得到所述随机数轮数。
在一个实施例中,所述发送模块805具体实施时,可以按照以下程序执行:在第一预设内存区域中,利用所述第二密钥加密所述伪随机数,得到加密后的伪随机数;将所述加密后的伪随机数发送至客户端设备。
在一个实施例中,所述获取模块801具体实施时,还可以用于接收加密后的随机数种子;
相应的,所述处理模块803具体还可以用于在所述第一预设内存区域中,利用所述第二密钥解密所述加密后的随机数种子,得到随机数种子;根据所述随机数种子,确定初始状态参数,其中,所述初始状态参数至少包括初始随机数轮数;根据所述随机数种子和初始状态参数,在所述第一预设内存区域中运行伪随机数生成器。
在一个实施例中,所述处理模块803具体实施时,还可以用于通过seal规则,将所述加密后的随机数种子,以及所述第二密钥存储于第二预设内存区域。
在一个实施例中,所述获取模块801具体实施时,还可以用于接收指定随机数轮数;
相应的,所述处理模块803具体还可以用于根据所述指定随机数轮数和基于初始状态参数运行的伪随机数生成器,在第一预设内存区域中确定出与指定随机数轮数对应的伪随机数。
在一个实施例中,所述处理模块803具体还可以包括以下结构单元:
比较单元,具体可以用于比较所述指定随机数轮数与所述初始随机数轮数的大小;
确定单元,具体可以用于在所述指定随机数轮数大于或等于所述初始随机数轮数的情况下,确定所述指定随机数轮数与所述初始随机数轮数的差异值;
迭代单元,具体可以用于利用所述基于初始状态参数运行伪随机数生成器增加差异值轮数的迭代计算,生成与指定随机数轮数对应的伪随机数。
在一个实施例中,所述处理模块803具体实施时,还可以用于通过unseal规则,从所述第二预设内存区域中获取加密后的随机数种子,以及所述第二密钥,并在第一预设内存区域中利用所述第二密钥解密得到所述随机数种子;在所述第一预设内存区域中,根据动态库数据重建伪随机数生成器;根据所述伪随机数种子和所述指定随机数轮数,在第一预设内存区域中运行所述重建的伪随机数生成器,生成与指定随机数轮数对应的伪随机数。
在一个实施例中,所述装置具体还可以包括销毁模块,具体可以用于接收并响应销毁指令,销毁第一预设内存区域中的伪随机数生成器。
本说明书实施例还提供了一种伪随机数的获取方法,该方法具体可以应用于包含有预设服务器和客户端设备的系统。可以参阅图9所示,该方法具体实施时可以包括以下内容:
客户端设备响应伪随机数获取请求,生成随机数种子和随机数轮数;并将所述随机数种子和所述随机数轮数发送至预设服务器,其中,所述预设服务器包含有第一预设内存区域,且在所述第一预设内存区域中还设置有伪随机数生成器;
所述预设服务器在所述第一预设内存区域中根据所述随机数种子和所述随机数轮数运行所述伪随机数生成器生成伪随机数,并将所述伪随机数发送至所述客户端设备;
所述客户端设备获取所述伪随机数。
本说明书实施例还提供了一种随机数的获取方法,具体实施时,可以包括以下内容:响应随机数获取请求,生成随机数生成指令;将所述随机数生成指令发送至预设服务器,其中,所述预设服务器包含有第一预设内存区域,且在所述第一预设内存区域中还设置有随机数生成器,所述预设服务器用于在所述第一预设内存区域中根据所述随机数生成指令,运行所述随机数生成器生成随机数;接收预设服务器生成的随机数。
在本实施例中,上述随机数为区别于伪随机数的,不可通过重置随机数种子和随机数轮数重现的随机数。
在本实施例中,上述随机数生成器具体可以包括Linux系统的文件数据dev或urandom等,也可以包括Intel指令中的RDRAND等。对于上述随机数生成器的具体类型,本说明书不作限定。
虽然本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内部包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
本说明书可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构、类等等。也可以在分布式计算环境中实践本说明书,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本说明书可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本说明书的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,移动终端,服务器,或者网络设备等)执行本说明书各个实施例或者实施例的某些部分所述的方法。
本说明书中的各个实施例采用递进的方式描述,各个实施例之间相同或相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。本说明书可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
虽然通过实施例描绘了本说明书,本领域普通技术人员知道,本说明书有许多变形和变化而不脱离本说明书的精神,希望所附的权利要求包括这些变形和变化而不脱离本说明书的精神。