我之前问过一个相关的问题
here
. 我提出了一个方案,我将在下面描述。我请那里的专家提供反馈。
由于目标应用程序是一个消费者应用程序,所以隐含的假设是应用程序不会部署在BES上。如果需要,将开发一个更合适的单独应用程序,并与BES环境良好集成。
首先,应用程序的构建系统(包括源代码)与用户的注册绑定在一起。也就是说,当用户注册时,只为该用户构建一个应用程序,在注册完成后立即提供链接。以下步骤序列由服务器代表用户执行。
安装
-
(私钥、公钥)将为该用户生成称为“主密钥”的。
-
(private key,public key)为该用户生成称为“通道密钥”的。
-
主公钥将由服务器的代码签名密钥签名。
-
通道公钥将由服务器的代码签名密钥签名
-
(通道密钥、主密钥)将与应用程序源代码一起打包。
-
将生成该应用程序的唯一标识符,并与应用程序捆绑在一起。
-
以上源代码是使用RIM的工具编译的,并由RIM签名者证书签名。
-
为上述过程生成的任何中间文件都将在生成完成后立即删除。
主密钥
用于执行敏感操作,如(a)重置设备上的用户密码(b)重置应用程序密码(c)设备丢失时远程擦除(d)设备丢失时启用远程跟踪。
通道键
用于在客户端与服务器通信时加密/签名数据。
创建会话密钥
. 会话密钥用于客户端和服务器之间的一次性通信。它们通过HTTPS在设备和服务器之间交换,并加密(可能使用AES-256)。
-
当用户将应用程序下载到手机上并成功安装后,在首次启动时,用户将选择应用程序的密码。此密码已知
只有
给用户。
-
应用程序通过HTTPS向服务器发送用会话密钥加密的(用户ID、应用程序ID)
-
应用程序生成一个名为“rescue code”的128位UUID,并提示用户输入电子邮件ID。将向包含此“rescue code”的电子邮件ID发送电子邮件。用户是
必修的
为了安全地保存它,并在任何用户丢失电话或忘记密码时生成它。
-
此救援代码存储在设备上。
-
一旦启动,应用程序总是在后台运行,并在电话启动时启动。
恢复
当用户忘记密码或丢失电话时。
-
用户通过出示有效身份证(可能由政府提供)向有关当局证明身份。
-
服务器请求客户端创建安全通道。客户机通过提供由主密钥加密的令牌重新连接到服务器。
-
客户机向服务器提出了一个挑战,请求一个“救援代码”。这可以在Web UI上显示。
-
用户向服务器提供“救援代码”
-
客户端将服务器提供的救援代码与存储的救援代码进行匹配,然后将成功代码发送到服务器。
-
现在,客户机可以代表用户执行敏感操作。