ProtonMail加密邮件的安全读取方法、装置、设备及存储介质转让专利

申请号 : CN202110387604.6

文献号 : CN112995204B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 曹飞张磊张辉极杜新胜

申请人 : 厦门市美亚柏科信息股份有限公司

摘要 :

本说明书一个或多个实施例提供一种ProtonMail加密邮件的安全读取方法、装置、设备及存储介质,方法包括:获取ProtonMail加密邮件的SEKRIT参数;对所述SEKRIT参数解密,得到解密后的字符串;基于所述解密后的字符串和当前登录的用户名得到私钥;基于所述私钥解密所述ProtonMail加密邮件,得到所述ProtonMail加密邮件的邮件内容。根据本公开,通过对ProtonMail加密邮件中的SEKRIT参数解密后,结合用户名得到私钥,从而基于私钥安全地获取邮件内容,从而保护用户的个人隐私数据,有效防止不法分子窃取用户数据。

权利要求 :

1.一种ProtonMail加密邮件的安全读取方法,其特征在于,包括:获取ProtonMail加密邮件的SEKRIT参数;

对所述SEKRIT参数解密,得到解密后的字符串;

基于所述解密后的字符串和当前登录的用户名得到私钥;

基于所述私钥解密所述ProtonMail加密邮件,得到所述ProtonMail加密邮件的邮件内容。

2.根据权利要求1所述的方法,其特征在于,所述获取ProtonMail加密邮件的SEKRIT参数包括:构建用于模拟ProtonMail的模拟应用程序;

基于所述模拟应用程序读取ProtonMailKey;

基于所述ProtonMailKey从目录读取ch.protonmail.android_preferences.xml文件中的所述SEKRIT参数。

3.根据权利要求2所述的方法,其特征在于,所述对所述SEKRIT参数解密,得到解密后的字符串包括:对所述SEKRIT参数的属性值SEKRIT_VALUE进行Base64解码,得到解码后的属性值SEKRIT_VALUE_Base64;

基于初始化模式为RSA/ECB/PKCS1Padding的Cipher实例和参数key为ProtonMailKey对所述解码后的属性值SEKRIT_VALUE_Base64进行解密,得到解密后的字符串SEKRIT_DECRYPTED。

4.根据权利要求1所述的方法,其特征在于,所述基于所述解密后的字符串和当前登录的用户名得到私钥,包括:对所述当前登录的用户名进行编码,得到编码后的用户名;

基于所述解密后的字符串和所述编码后的用户名生成所述私钥加密值;

对所述私钥加密值进行解密,得到所述私钥。

5.根据权利要求4所述的方法,其特征在于,对所述当前登录的用户名进行编码,得到编码后的用户名,包括:对所述当前登录的用户名username进行base64编码,得到编码后的用户名username_base64。

6.根据权利要求5所述的方法,其特征在于,所述基于所述解密后的字符串和所述编码后的用户名生成所述私钥加密值,包括:对所述解密后的字符串进行SHA‑256加密,得到加密后的字符串SEKRIT_KEY;

以AES模式的Cipher实例和参数key为所述加密后的字符串SEKRIT_KEY对字符串“priv_key”进行加密,得到加密后的字符串priv_key_encrypted;

对所述加密后的字符串priv_key_encrypted进行base64编码,得到所述私钥加密值priv_key_encrypted_base64。

7.根据权利要求6所述的方法,其特征在于,所述对所述私钥加密值对应的属性值进行解密,得到所述私钥,包括:读取所述私钥加密值priv_key_encrypted_base64对应的属性值private_key_value_encrypted;

对所述属性值private_key_value_encrypted进行base64解码,得到解码后的属性值private_key_value_encrypted_base64;

以AES模式的Cipher实例和参数key为所述加密后的字符串SEKRIT_KEY对所述解码后的属性值private_key_value_encrypted_base64进行解密,得到所述私钥。

8.一种ProtonMail加密邮件的安全读取装置,其特征在于,包括:获取模块,用于获取ProtonMail加密邮件的SEKRIT参数;

SEKRIT参数解密模块,用于对所述SEKRIT参数解密,得到解密后的字符串;

私钥模块,用于基于所述解密后的字符串和当前登录的用户名得到私钥;

读取模块,用于基于所述私钥解密所述ProtonMail加密邮件,得到所述ProtonMail加密邮件的邮件内容。

9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任意一项所述的方法。

10.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行权利要求1至7任一所述方法。

说明书 :

ProtonMail加密邮件的安全读取方法、装置、设备及存储介质

技术领域

[0001] 本说明书一个或多个实施例涉及通信技术领域,尤其涉及ProtonMail加密邮件的安全读取。

背景技术

[0002] ProtonMail采用端到端加密与全封闭加密技术来保护邮件安全,这意味着邮件内容不可能泄露给第三方。但是,目前ProtonMail邮件数据还不是绝对安全,这样就会被一些不法分子所利用,造成用户信息或邮件内容的泄露,或多或少都会给用户带来损失。

发明内容

[0003] 有鉴于此,本说明书一个或多个实施例的目的在于提出一种ProtonMail加密邮件的安全读取方法、装置、设备及存储介质,以解决上述用户信息或邮件内容的泄露的问题。
[0004] 基于上述目的,本说明书一个或多个实施例提供了一种ProtonMail加密邮件的安全读取方法,包括:
[0005] 获取ProtonMail加密邮件的SEKRIT参数;
[0006] 对所述SEKRIT参数解密,得到解密后的字符串;
[0007] 基于所述解密后的字符串和当前登录的用户名得到私钥;
[0008] 基于所述私钥解密所述ProtonMail加密邮件,得到所述ProtonMail加密邮件的邮件内容。
[0009] 可选地,所述获取ProtonMail加密邮件的SEKRIT参数包括:
[0010] 构建用于模拟ProtonMail的模拟应用程序;
[0011] 基于所述模拟应用程序读取ProtonMailKey;
[0012] 基于所述ProtonMailKey从目录读取ch.protonmail.android_preferences.xml文件中的所述SEKRIT参数。
[0013] 可选地,所述对所述SEKRIT参数解密,得到解密后的字符串包括:
[0014] 对所述SEKRIT参数的属性值SEKRIT_VALUE进行Base64解码,得到解码后的属性值SEKRIT_VALUE_Base64;
[0015] 基于初始化模式为RSA/ECB/PKCS1Padding的Cipher实例和参数key为ProtonMailKey对所述解码后的属性值SEKRIT_VALUE_Base64进行解密,得到解密后的字符串SEKRIT_DECRYPTED。
[0016] 可选地,所述基于所述解密后的字符串和当前登录的用户名得到私钥,包括:
[0017] 对所述当前登录的用户名进行编码,得到编码后的用户名;
[0018] 基于所述解密后的字符串和所述编码后的用户名生成所述私钥加密值;
[0019] 对所述私钥加密值进行解密,得到所述私钥。
[0020] 可选地,对所述当前登录的用户名进行编码,得到编码后的用户名,包括:
[0021] 对所述当前登录的用户名username进行base64编码,得到编码后的用户名username_base64。
[0022] 可选地,所述基于所述解密后的字符串和所述编码后的用户名生成所述私钥加密值,包括:
[0023] 对所述解密后的字符串进行SHA‑256加密,得到加密后的字符串SEKRIT_KEY;
[0024] 以AES模式的Cipher实例和参数key为所述加密后的字符串SEKRIT_KEY对字符串“priv_key”进行加密,得到加密后的字符串priv_key_encrypted;
[0025] 对所述加密后的字符串priv_key_encrypted进行base64编码,得到所述私钥加密值priv_key_encrypted_base64。
[0026] 可选地,所述对所述私钥加密值对应的属性值进行解密,得到所述私钥,包括:
[0027] 读取所述私钥加密值priv_key_encrypted_base64对应的属性值private_key_value_encrypted;
[0028] 对所述属性值private_key_value_encrypted进行base64解码,得到解码后的属性值private_key_value_encrypted_base64;
[0029] 以AES模式的Cipher实例和参数key为所述加密后的字符串SEKRIT_KEY对所述解码后的属性值private_key_value_encrypted_base64进行解密,得到所述私钥。
[0030] 本说明书一个或多个实施例提供了一种ProtonMail加密邮件的安全读取装置,包括:
[0031] 获取模块,用于获取ProtonMail加密邮件的SEKRIT参数;
[0032] SEKRIT参数解密模块,用于对所述SEKRIT参数解密,得到解密后的字符串;
[0033] 私钥模块,用于基于所述解密后的字符串和当前登录的用户名得到私钥;
[0034] 读取模块,用于基于所述私钥解密所述ProtonMail加密邮件,得到所述ProtonMail加密邮件的邮件内容。
[0035] 本说明书一个或多个实施例提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现本说明书实施例所述的方法。
[0036] 本说明书一个或多个实施例提供了一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行本说明书实施例所述方法。
[0037] 从上面所述可以看出,本说明书一个或多个实施例提供的ProtonMail加密邮件的安全读取方法、装置、设备及存储介质,通过对ProtonMail加密邮件中的SEKRIT参数解密后,结合用户名得到私钥,从而基于私钥安全地获取邮件内容,从而保护用户的个人隐私数据,有效防止不法分子窃取用户数据。

附图说明

[0038] 为了更清楚地说明本说明书一个或多个实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本说明书一个或多个实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0039] 图1为根据本公开实施例的ProtonMail加密邮件的安全读取方法的示意性流程图;
[0040] 图2为根据本公开实施例的获取SEKRIT参数的示意性流程图;
[0041] 图3为根据本公开实施例的解密SEKRIT参数的示意性流程图;
[0042] 图4为根据本公开实施例的SEKRIT参数传输的示意性原理图;
[0043] 图5为根据本公开实施例的生成私钥加密值的示意性流程图;
[0044] 图6为根据本公开实施例的解密私钥的示意性流程图;
[0045] 图7为根据本公开实施例的ProtonMail加密邮件的安全读取装置的示意性框图;
[0046] 图8为根据本公开实施例的一种更为具体的电子设备硬件结构示意图。

具体实施方式

[0047] 为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。
[0048] 需要说明的是,除非另外定义,本说明书一个或多个实施例使用的技术术语或者科学术语应当为本公开所属领域内具有一般技能的人士所理解的通常意义。本说明书一个或多个实施例中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。
[0049] ProtonMail邮件内容数据中使用了PGP加密算法,加密的邮件内容需要私钥来解密,当然一个非常重要的先决条件是手机必须root。ProtonMail采用端到端加密与全封闭加密技术来保护邮件安全,这意味着邮件内容不可能泄露给第三方。但是,目前ProtonMail邮件数据还不是绝对安全,这样就会被一些不法分子所利用,造成用户信息或邮件内容的泄露,或多或少都会给用户带来损失。
[0050] 其中,PGP技术是一个基于非对称加密算法RSA公钥体系的邮件加密技术,也是一种操作简单、使用方便、普及程度较高的加密方式。PGP技术不但可以对电子邮件加密,防止非授权者阅读信件;还能对电子邮件附加数字签名,使收信人能明确了解发信人的真实身份;也可以在不需要通过任何保密渠道传递密钥的情况下,使人们安全地进行保密通信。一般来说,PGP技术使用两个密钥来管理数据:一个用以加密,称为公钥(Public Key);另一个用以解密,称为私钥(Private Key)。公钥和私钥是紧密联系在一起的,公钥只能用来加密需要安全传输的数据,却不能解密加密后的数据;相反,私钥只能用来解密,却不能加密数据。
[0051] 基于上述考虑,本公开实施例提供了一种ProtonMail加密邮件的安全读取方法、装置、设备以及存储介质,通过发掘ProtonMail对私钥保护的薄弱环节,即分析应用数据目录下名称为XXX‑MessagesDatabase.db文件存储相关的加密的邮件信息。经分析App汇编代码、查阅加密解密算法、零信任体系以及TLS传输层协议相关资料,提供了针对ProtonMail邮件内容的保护策略。
[0052] 参见图1,图1示出了根据本公开实施例的ProtonMail加密邮件的安全读取方法的示意性流程图。如图1所示,ProtonMail加密邮件的安全读取方法,包括:
[0053] 步骤S110,获取ProtonMail加密邮件的SEKRIT参数;
[0054] 步骤S120,对所述SEKRIT参数解密,得到解密后的字符串;
[0055] 步骤S130,基于所述解密后的字符串和当前登录的用户名得到私钥;
[0056] 步骤S140,基于所述私钥解密所述ProtonMail加密邮件,得到所述ProtonMail加密邮件的邮件内容。
[0057] 其中,通过对ProtonMail加密邮件中的SEKRIT参数解密后,结合用户名得到私钥,从而基于私钥安全地获取邮件内容。能够实现对ProtonMail数据安全性的进一步加强,让企图非法获取用户数据的不法分子无计可施,可以保护用户的个人隐私数据,有效防止不法分子窃取用户数据,提供ProtonMail加密邮件的安全性。
[0058] 可选地,在步骤S110中,获取ProtonMail加密邮件的SEKRIT参数。
[0059] 在一些实施例中,所述获取ProtonMail加密邮件的SEKRIT参数包括:
[0060] 构建用于模拟ProtonMail的模拟应用程序;
[0061] 基于所述模拟应用程序读取ProtonMailKey;
[0062] 基于所述ProtonMailKey从目录读取ch.protonmail.android_preferences.xml文件中的所述SEKRIT参数。
[0063] 具体来说,参见图2,图2示出了根据本公开实施例的获取SEKRIT参数的示意性流程图。如图2所示,包括:
[0064] 步骤S210,利用Android KeyStore安全机制,构建一个模拟应用程序来模拟ProtonMail读取KeyStore ProtonMailKey,如果存在KeyStore ProtonMailKey,则执行步骤S220;如果不存在,则结束。
[0065] 步骤S220,获取PrivateKey,执行步骤S230。
[0066] 步骤S230,读取ch.protonmail.android_preferences.xml文件,如果存在读取ch.protonmail.android_preferences.xml文件,则执行步骤S240;如果不存在,则结束。
[0067] 步骤S240,读取name="SEKRIT"对应的value。可以记为USRPKEY_ProtonMailKey。
[0068] 其中,通过Android KeyStore来解密第一级秘钥,读取SEKRIT参数,从/data/data/ch.protonmail.android/shared_prefs目录读取ch.protonmail.android_preferences.xml中的值,即可得到ProtonMail加密邮件的SEKRIT参数。
[0069] 可选地,在步骤S120,对所述SEKRIT参数解密,得到解密后的字符串。
[0070] 在一些实施例中,所述对所述SEKRIT参数解密,得到解密后的字符串包括:
[0071] 对所述SEKRIT参数的属性值SEKRIT_VALUE进行Base64解码,得到解码后的属性值SEKRIT_VALUE_Base64;
[0072] 基于初始化模式为RSA/ECB/PKCS1Padding的Cipher实例和参数key为ProtonMailKey对所述SEKRIT参数进行解密,得到解密后的字符串SEKRIT_DECRYPTED。
[0073] 具体来说,参见图3,图3示出了根据本公开实施例的解密SEKRIT参数的示意性流程图。如图3所示,包括:
[0074] 步骤S310,打开ch.protonmail.android_preferences.xml文件,执行步骤S320。
[0075] 步骤S320,读取string标签,name=SEKRIT对应的value(SEKRIT参数的属性值),记为SEKRIT_VALUE;执行步骤S330。
[0076] 步骤S330,Base64解码SEKRIT_VALUE得到SEKRIT_VALUE_Base64(解码后参数SEKRIT的属性值);执行步骤S340。
[0077] 步骤S340,利用“RSA/ECB/PKCS1Padding”解密SEKRIT_VALUE_Base64,其中,key为ProtonMailKey,得到的解密值记为SEKRIT_DECRYPT;执行步骤S350。
[0078] 步骤S350,将SEKRIT_DECRYPT转换为字符串SEKRIT_DECRYPTED。
[0079] 其中,利用USRPKEY_ProtonMailKey解密SEKRIT参数,初始化模式为RSA/ECB/PKCS1Padding的Cipher实例,参数key为USRPKEY_ProtonMailKey,然后base64解码SEKRIT参数,使用刚刚的实例Cipher对象来解密SEKRIT,解密之后的值记为SEKRIT_DECRYPT。
[0080] 在一些实施例中,获取ProtonMail加密邮件的SEKRIT参数后将所述SEKRIT参数存储至本地,以在本地进行SEKRIT参数的解密。进一步地,获取SEKRIT参数后通过TLS1.3协议进行数据传输至本地进行存储,有效防止中间人方式窃取数据。
[0081] 具体来说,参见图4,图4中示出了根据本公开实施例的SEKRIT参数传输的示意性原理图。如图4所述,首先,引入零信任设备应用沙盒模式,将SEKRIT文件存储于沙盒中,可访问沙盒中SEKRIT文件的用户或者应用是零信任体系动态访问控制引擎和信任评估引擎经过批准、审批才予以放行的,故在服务端和客户端中“策略执行点”可保证SEKRIT文件在服务端存储的安全性和客户端获取过程的安全性。
[0082] 其次,SEKRIT文件在传输过程中引入目前最新版TLS1.3(传输层协议)协议,它为数据传输提供了以下保证:
[0083] (1)建立一个安全的连接:对其中传输的数据提供加密保护,防止被中间人嗅探到可见明文;对数据提供完整性校验,防止传输的数据被中间人修改。
[0084] (2)建立一个可信的连接:对连接双方的实体提供身份认证。
[0085] 其中,TLS 1.3废弃了使用MAC的块加密和流加密机制,仅采用AEAD类对称加密算法作为唯一的加密选项,同时,还引入了如下内容:
[0086] 一种新的密钥协商机制—PSK(pre_shared_key,新的密钥交换暨身份认证机制),包括:0‑RTT:客户端和服务端的一次交互(客户端发一个报文,服务端回应一个报文)叫做一个RTT,TLS 1.2普遍采用2‑RTT的握手过程,服务器延迟明显。因此TLS 1.3引入了一种0‑RTT的机制,即在刚开始TLS密钥协商的时候,就能附送一部分经过加密的数据传递给对方。为了实现0‑RTT,需要双方在刚开始建立连接的时候就已经持有一个对称密钥,这个密钥在TLS 1.3中称为PSK(pre_shared_key)。PSK是TLS 1.2中的rusum ption机制的一个升级,TLS握手结束后,服务器可以发送一个NST(new_session_ticket)的报文给客户端,该报文中记录PSK的值、名字和有效期等信息,双方下一次建立连接可以使用该PSK值作为初始密钥材料。因为PSK是从以前建立的安全信道中获得的,只要证明了双方都持有相同的PSK,不再需要证书认证,就可以证明双方的身份,因此,PSK也是一种身份认证机制。
[0087] 一种新的密钥导出函数—HKDF(HMAC_based_key_derivation_function),其中,经过密钥协商得出来的密钥材料因为随机性可能不够,协商的过程能被攻击者获知,需要使用一种密钥导出函数来从初始密钥材料(PSK或者DH密钥协商计算出来的key)中获得安全性更强的密钥。HKDF正是TLS 1.3中所使用的这样一个算法,使用协商出来的密钥材料和握手阶段报文的哈希值作为输入,可以输出安全性更强的新密钥。HKDF包括extract_then_expand的两阶段过程。extract过程增加密钥材料的随机性,在TLS 1.2中使用的密钥导出函数PRF实际上只实现了HKDF的expand部分,并没有经过extract,而直接假设密钥材料的随机性已经符合要求。
[0088] 唯一保留的加密方式—AEAD(Authenticated_Encrypted_with_associated_data),其中,TLS协议的最终目的是协商出会话过程使用的对称密钥和加密算法,双方最终使用该密钥和对称加密算法对报文进行加密。AEAD将完整性校验和数据加密两种功能集成在同一算法中完成,是TLS 1.3中唯一支持的加密方式。TLS 1.2还支持流加密和CBC分组模式的块加密方法,使用MAC来进行完整性校验数据,这两种方式均被证明有一定的安全缺陷。但是有研究表明AEAD也有一定局限性:使用同一密钥加密的明文达到一定长度后,就不能再保证密文的安全性。因此,TLS 1.3中引入了密钥更新机制,一方可以(通常是服务器)向另一方发送Key Update(KU)报文,对方收到报文后对当前会话密钥再使用一次HKDF,计算出新的会话密钥,使用该密钥完成后续的通信。
[0089] 每次打开ProtonMail时,通过严格的TLS1.3握手之后,进行SEKRIT文件的传输,到达设备端进行邮件内容解密并加载,从而杜绝了不法分子读取本地存储的SEKRIT参数解密邮件内容的可能性,使得ProtonMail数据安全性更加可靠。
[0090] 可选地,在步骤S130中,基于所述解密后的字符串和当前登录的用户名得到私钥。
[0091] 在一些实施例中,所述基于所述解密后的字符串和当前登录的用户名得到私钥,包括:
[0092] 对所述当前登录的用户名进行编码,得到编码后的用户名;
[0093] 基于所述解密后的字符串和所述编码后的用户名生成所述私钥加密值;
[0094] 对所述私钥加密值进行解密,得到所述私钥。
[0095] 在一些实施例中,对所述当前登录的用户名进行编码,得到编码后的用户名,包括:
[0096] 对所述当前登录的用户名username进行base64编码,得到编码后的用户名username_base64。
[0097] 具体来说,解密私钥首先需要读取当前登录的用户名,可以从/data/data/ch.protonmail.android/shared_prefs目录读取ch.protonmail.android_preferences.xml中的值,暂时命名为username,对其进行base64编码,暂时命名为username_base64,组成文件名为username_base64‑SSP.xml。
[0098] 在一些实施例中,参见图5,图5示出了根据本公开实施例的生成私钥加密值的示意性流程图。如图5所示,所述基于所述解密后的字符串和所述编码后的用户名生成所述私钥加密值,包括:
[0099] 步骤S510,对所述解密后的字符串进行SHA‑256加密,得到加密后的字符串SEKRIT_KEY;
[0100] 步骤S520,以AES模式的Cipher实例和参数key为所述加密后的字符串SEKRIT_KEY对字符串“priv_key”进行加密,得到加密后的字符串priv_key_encrypted;
[0101] 步骤S530,对所述加密后的字符串priv_key_encrypted进行base64编码,得到所述私钥加密值priv_key_encrypted_base64。
[0102] 其中,在解密私钥之前先需要生成xml文件对应的属性值,才能读取到私钥对应的加密值。如图5所示,基于前述步骤中解密后的字符串SEKRIT_DECRYPTED,对其做一次SHA‑256,暂时命名为SEKRIT_KEY。接下来初始化Cipher实例,以AES模式,以刚刚生产的SEKRIT_KEY作为Cipher的key值,加密字符串“priv_key”,解密之后的值暂时命名为priv_key_encrypted,然后使用base64对priv_key_encrypted进行编码,暂时命名为priv_key_encrypted_base64,说明一下,虽然字符串“priv_key”为定值,但是不同设备加密完之后这个值是不同的,因为每个设备USRPKEY_ProtonMailKey不同,所以不能使用固定加密值来读取。
[0103] 在一些实施例中,所述对所述私钥加密值对应的属性值进行解密,得到所述私钥,包括:
[0104] 读取所述私钥加密值priv_key_encrypted_base64对应的属性值private_key_value_encrypted;
[0105] 对所述属性值private_key_value_encrypted进行base64解码,得到解码后的属性值private_key_value_encrypted_base64;
[0106] 以AES模式的Cipher实例和参数key为所述加密后的字符串SEKRIT_KEY对所述解码后的属性值private_key_value_encrypted_base64进行解密,得到所述私钥。
[0107] 具体来说,参见图6,图6示出了根据本公开实施例的解密私钥的示意性流程图。如图6所示,包括:
[0108] 步骤S610,读取username_base64‑SSP.xml文件,如果存在该文件,则执行步骤S620,否则结束。
[0109] 步骤S620,读取对应的value,记为private_key_value_encrypted;执行步骤S630。
[0110] 步骤S630,对private_key_value_encrypted进行base64解码,记为private_key_value_encrypted_base64;执行步骤S640。
[0111] 步骤S640,对参数SEKRIT_DECRYPTED对其做一次SHA‑256,记为SEKRIT_KEY;执行步骤S650。
[0112] 步骤S650,对private_key_value_encrypted_base64进行AES‑ECB解密,参数key为SEKRIT_KEY,得到解密结果PGP_PRIVATE_KEY,即私钥。
[0113] 其中,读取/data/data/ch.protonmail.android/shared_prefs/手机目录下username_base64‑SSP.xml文件的值,记为为private_key_value_encrypted,如图6所示,首先对private_key_value_encrypted进行base64解码,记为private_key_value_encrypted_base64。然后,对参数SEKRIT_DECRYPTED对其做一次SHA‑256,记为SEKRIT_KEY。实例化Cipher对象,使用AES模式,其中key的值为SEKRIT_KEY,然后对private_key_value_encrypted_base64解密操作,就可以得到PGP解密算法所需要的私钥。
[0114] 可选地,在步骤S140中,基于所述私钥解密所述ProtonMail加密邮件,得到所述ProtonMail加密邮件的邮件内容。
[0115] 具体来说,解密XXX‑MessagesDatabase.db,其中XXX是前述步骤中username_base64值,读取此数据库文件中表messagev3中字段Body值,然后使用工具pgp4win工具解密Body值就可以得到解密之后的邮件内容。
[0116] 需要说明的是,本说明书一个或多个实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本说明书一个或多个实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
[0117] 需要说明的是,上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
[0118] 基于同一发明构思,与上述任意实施例方法相对应的,本说明书一个或多个实施例还提供了一种ProtonMail加密邮件的安全读取装置。
[0119] 参考图7,所述ProtonMail加密邮件的安全读取装置,包括:
[0120] 获取模块,用于获取ProtonMail加密邮件的SEKRIT参数;
[0121] SEKRIT参数解密模块,用于对所述SEKRIT参数解密,得到解密后的字符串;
[0122] 私钥模块,用于基于所述解密后的字符串和当前登录的用户名得到私钥;
[0123] 读取模块,用于基于所述私钥解密所述ProtonMail加密邮件,得到所述ProtonMail加密邮件的邮件内容。
[0124] 为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书一个或多个实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
[0125] 上述实施例的装置用于实现前述任一实施例中相应的ProtonMail加密邮件的安全读取方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
[0126] 基于同一发明构思,与上述任意实施例方法相对应的,本说明书一个或多个实施例还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上任意一实施例所述的ProtonMail加密邮件的安全读取方法。
[0127] 图8示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
[0128] 处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
[0129] 存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
[0130] 输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
[0131] 通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
[0132] 总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
[0133] 需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
[0134] 上述实施例的电子设备用于实现前述任一实施例中相应的ProtonMail加密邮件的安全读取方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
[0135] 基于同一发明构思,与上述任意实施例方法相对应的,本说明书一个或多个实施例还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的ProtonMail加密邮件的安全读取方法。
[0136] 本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD‑ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
[0137] 上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上任一实施例所述的ProtonMail加密邮件的安全读取方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
[0138] 所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本说明书一个或多个实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
[0139] 另外,为简化说明和讨论,并且为了不会使本说明书一个或多个实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本说明书一个或多个实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本说明书一个或多个实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本公开的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本说明书一个或多个实施例。因此,这些描述应被认为是说明性的而不是限制性的。
[0140] 尽管已经结合了本公开的具体实施例对本公开进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
[0141] 本说明书一个或多个实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本说明书一个或多个实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本公开的保护范围之内。