作者: 邓明轩
B lac kB err y 平台的加密机制
Bla ck Be rr y 平 台自 身带 有完 整的加 密机 制。 所有 数据 从 BE S ( Bla ck B er r y En t e rpri s e S er ve r )流 出前都做了加密处理, 使 用的 是 AE S 或者 是 T r i pl e-DE S 的方式进行加密 。 在数据到达 Bla ck Be rry 智能 手机 后手机 端平台 会对 数据 进行 解密 操作。 同样 ,当 数据 从 Bla ck Be rry 智能 手机流向服务器端时也通 过 AE S 或 者 是 T ripl e-D E S 方 式进行加解密操作。也就是说 , 在 Bla ck Be rr y 平 台上 ,从 BE S 服务器端 到 Bla ck Be rry 智 能手机 端都 是受 平台 的加 密保护 的。 其 架构如 下图 :
|
达 Bla ck Be rry 智能 手机之 前都无 法被 正常 读取 , 从而 达到保 护传 输数 据的 目的 。 在 Bla ck Be rry 智能手 机接 收到 服务 器端 发送的 数据后 , 首 先会 根据 管理员 指定 的解 密方 法对 数据进 行解 密 操作, 然后 将数 据以 明文 形式传 递给 手机 应用 程序 。 如上 所述 , 当 数据 从 Bla ck Be rry 智能 手 机端提 交给 服务器 时 Bla ck Berr y 会 以相 类似 的过 程对 数据进 行加 解密 操作 , 从 而保证 数据 从 手机端 提交 到服 务器 端时 也受保 护。 然而 , 对 于很 多企业 和组 织而言 , 单纯 使用厂 商提 供的密 钥和 加密 机制 是不 够的 , 他 们必 须 使用自 己提 供的 加密 密钥 , 或者 更进 一步, 要求 使用 自身研 发的 或者 是指 定安 全提供 商研 发 的加密 机制 。在 这种 情况 下就需要 在 Bla ck Be rry 平 台上加 入额 外的 加密 机制 。 如果企 业只 是对 邮件 有额 外的加 密要求 , 同 时可 以接 受标准 的加 密算法 , 则 可以 通过 S /MI M E
加密机 制的 配置 形成 额外 的加密 机制 。 Bla c kBe rry 平 台支持 S /MI ME 标准 ,可 以在 BE S 服务 器端配 置 LD AP 连接 以查找 密钥, 然后 在 Bla ck Be rry 智能设 备上 引入 用户 的密 钥,从 而形 成 完整的 加密 / 签 名机 制。在 这种配 置下 ,服 务器端 和 Bla ck Be rr y 智 能手 机端都 可以使 用企 业 自身提 供的 加密 密钥 。 不 过, 通过 S /MI ME 配 置额 外的加 密机 制只 作用 于邮 件, 后台 企业 应 用通 过 BE S 推送 到 Bla ck Be rry 手机 端的 数据 是不 受二 次加密 保护 的, 同样 , Bla c kBe rry 智能 手机端 应用 提交 到服 务器 的应用 数据 也是 不受 二次 加密保 护的 。 如果 希望 对邮 件数据 和应 用 数据都 实现 二次 加密 ,则 需要使 用 Bla ck B er r y 平台 上的 T r ans c o de r AP I 。本章 节将详 细介 绍 T r ans c o de r AP I , 包括 T r a ns c o der AP I 的 接口 和相 关的 代码实 现。 如果 希望了 解 S /MI ME 的配 置过程 ,请 参考 相关 文档 ,本章 节不 对 S /MI M E 的 配置做 详细 介绍 。
T r a ns c oder AP I 的整体结构
T r ans c o de r AP I 在 Bla ck B er ry 平台 上提 供了 二次 加密 方法, 其基 本思 路是 在 BE S 服务器 端和 Bla ck Be rry 智能 手机 端都预 留接口 ,让 开发 人员 可以 在服务 器端 和 Bla ck Be rry 智能手 机端 部 署加解 密应 用, 从而 对所 有传输 的数 据进 行二 次加 密。其 架构 示意 图如 下:
示意图 中红 线部 分同 样表 示 Bla ck Be rry 平台 加密的 数据, 橙线 部分 表示 使用 T r ans c o der 加密 接口进 行加 密的 数据 通道 , 字符 串 “ T es t … ” 表 示明 文, 字 符串 “ U ft u… ” 表示 通过 T r ans c o de r 加密接 口加 密过 后数 据, 字符串 “ % ^$ ( * … ”表 示 BE S 加密 后的 数据 。可 以看 到在数 据离 开
BE S 服务器 后, 它同 时受 到 Bla ck B er ry 平台 加密和 T r ans c o der 加密 接口 加密两 层保护 ,这 就 形成了 数据 的二 次加 密。
使用 T r ans c o de r AP I 进 行二 次加密 的关 键是 在服 务器 和智能 手机 两端 加入 了额 外的加 解密 程 序。
服务器端在 使用 Bla ck Be rr y 平台提供的加 密方法对数据进行加 密前会调用服务器端加解 密 程序, 将所 有数 据提 交给 服务器 端加 解密 程序 。 此 时服务 器端 加解 密程 序的 任务就 是通 过特 定的加 密算 法对 传入 的数 据进行 加密 , 加密 后返还 给 BE S 服务 器。 BE S 服 务器 在收到 服务 器 端加解 密应 用所 加密 的数 据后, 会使 用 Bla ck B er r y 平台的 加密 方法 对数 据进 行再一 次加 密, 然后才 将数 据发 送到 网络 上传送 给智 能手 机端 。
智能手 机端 在接收 到 BE S 服务器 传送 的数 据后 , 首 先使 用 Bla ck Be rry 平台的 解密方 法对 数据 进行解密 。 解 密后再 调用 手机端 加解 密应 用, 将数 据传递 给手 机端 加解 密应 用。 此时 的数 据 正是服 务器 端加 解密 应用 加密过 的数据 。 手 机端 加解 密应用 需要 使用 对应 的解 密算法 对数 据 进行解 密, 最终 得到 明文 ,将明 文传 递给 手机 应用 。
从智能 手机 提交 数据 到 B E S 服务器 也通 过类 似的过 程对数 据进 行两 次加 解密 处理。 从以上 描述 不难 发现 , 在 实现二 次加 密过 程服 务器 端和手 机端 的加 解密 程序 必须对 应, 服务 器端加 解密 应用 使用 某一 种加密 算法 和密钥 , 手 机端 加解密 应用 必须 使用 对应 的解密 算法 和 密钥。 否则 会出 现一 端无 法解密 数据 导致 应用 处理 错误的 问题 。
所以,通 过 T r ans c o der AP I 实现二 次加 密的 关键 在于 如何开 发和 部署 服务 器端 和手机 端的 加 解密应 用。 在下 面的 章节 中我们 会介 绍接 口的 详细 情况和 开发 过程 。
服务器 端 T r a ns cod er AP I 介绍
服务器端 的 T r ans c o der AP I 是以 c/ c + + 头文 件形 式提供 的, 名为 : “ BE S T r ans c o der AP I. h ”开 发 人员需 要通 过 c /c + + 开发工 具将“ BE S T r ans c o derAP I. h ”文件 引入 项目 中, 使用 c 语言对 指定 方法进 行实 现, 最终通 过 c /c+ + 编译 工具 形成 一个 dll 文件。 当开发 人员 部署 所开 发的 服务器 端加 解密 应用 时需 要将所 生成 的 dll 文件 拷贝 到 BE S 服务 器
上 , 并 通 过 注 册 表 “ H KEY _L OCA L_MA CHI NE /S OF T W ARE /R esea r ch In Mot io n/Bla ck B er r y
En t er pris e S e r ve r /Dis pa t ch e r /T r ans c o der ”指 向 dll 文件 所在的 位置 。
通过这 样的 配置, 在 BE S 服务器 启动 的时 候会 根据 注册表 找到 开发 人员 所开 发的 dll 文件 并 调入内 存。 在 BE S 服 务器 需要对 数据 进行 处理 时会 调用 dll 内的 方法 ,由 开发 人员所 实现 的 加解密 方法 对数 据进 行处 理。
下面详 细描 述 BE S T r ans c o d er AP I. h 为服 务器 端 dll 程 序定义 的函 数
函数 : L oad DLL ( )
该函数 在 BE S 服 务器 加载 这个 dll 时被 调用 ,开 发人 员可以 在这 个函 数中 实现 加解密 程序 所 需要的 初始 化代 码。
函数定义:
in t __cdec l Lo ad D LL( )
参数: 无
返回值:
返回 0 表 示加 载成功 , 返 回其它 值表 示加 载失败 , 该函数 的返 回值 由开 发人 员指定 , 用于 告
诉 BE S 服务 器本 dll 是否成 功加载 了相 关内 容。
函数 : Fr eeD LL( )
该函数 在 BE S 服 务器 释放 该 dll 时 被调 用, 开发 人员 可以在 这个 函数 中加 入对 象释放 等资 源 回收代 码。
函数定义:
v o id F re eDLL ( )
参数: 无
返回值: 无
函数 : G e t I D()
该函数用于返回服务器端 加解密应用程序的 ID ,这 个函数的返回值作为该应 用的标记,所 以它必 须和 客户 端的 对应 g et ID 方法返 回相 同的 值, 让 Bla ck B er ry 平台 可以找 到对应 的解 密 应用。
函数定义:
uns ig ned c ha r __ cd ecl G et Id ( )
参数: 无
返回值:
返回一 个 u ns ig ned ch a r 类 型的值 ,不能 为 0 , 开发 人员可 以根 据约 定任 意指 定一个 非 0 的
uns ig ned c ha r 值 ,前 提就 是服务 器端 返回 的 ID 值和 客户端 返回 的 ID 值相 同。
函数 : Wil l T r a ns c od e( )
该函数 让 dll 决定 是否 对相 应的内 容进 行加 解密 处理 。 函数定义:
in t __cdec l W il l T r ans c o de( co ns t T r ans c o der Co n t e xt *c o ns t c o n t e xt )
参数:
c o n t e xt 用于获 取传 入的内 容的上 下文 ,从 而判 断是 否需要 对其 进行 加密 。 返回值:
当该函 数返 回 0 时 表明需 要对内 容进 行加 解密 处理 , 返回其它 非 0 值则 表明不 需要对 内容 进 行加解 密处 理。 值 - 1 为保 留字 T RA NSC OD E _ER R OR ,在这 里不 能作 为返 回值 使用。
函数 : Enc ode ( )
该函数 用于 对数 据进 行加 密, BE S 服务 器在 发送 数据 前会调 用这 个方 法, 开发 人员需 要在 这 个函数 中实 现加 密算 法。
函数定义:
in t __cdec l Enc o de ( T r ans c o de rIn putSt r eam *c o ns t in put , T r ans c o de rOut putSt r eam *c o ns t o ut put , c o ns t T r ans c o derCo n t e xt *co ns t c o n t e xt )
参数:
in pu t 为 BE S 服 务器 传入的 内容, 开发 人员 可以 从中 读取消 息内 容
o ut pu t 为传给 BE S 服 务器 的内容 ,开 发人 员需 要将 加密过 的数 据写 入该 参数 中
c o n t e xt 消息上 下文 ,用于 获取消 息内 容主 体以 外的 其它相 关信 息。 返回值:
当该函 数返 回 0 时 表明加 密成功 , 返回 其它 非 0 值 则表明 加密 不成功 。 注意 , 如果该 函数 返
回非 0 值 则传 入的 内容会 被丢失 。值 -1 为保 留字 TR ANSC OD E _ER R OR , 在这 里不能 作为 返 回值使 用。
函数 : De c od e( )
该函数 用于 对数 据进 行解 密, BE S 服务 器在 接收 到数 据后会 调用 这个 方法 , 开 发人员 需要 在 这个函 数中 实现 解密 算法 。
函数定义:
in t __cdec l D ec o de( T r ans c o de rIn putSt r eam *c o ns t in put , T r ans c o de rOut putSt r eam *c o ns t o ut put , c o ns t T r ans c o derCo n t e xt *co ns t c o n t e xt )
参数:
in pu t 为 BE S 服 务器 传入的 内容, 开发 人员 可以 从中 读取消 息内 容
o ut pu t 为传给 BE S 服 务器 的内容 ,开 发人 员需 要将 解密过 的数 据写 入该 参数 中
c o n t e xt 消息上 下文 ,用于 获取消 息内 容主 体以 外的 其它相 关信 息。 返回值:
当该函 数返 回 0 时 表明解 密成功 , 返回 其它 非 0 值 则表明 解密 不成功 。 注意 , 如果该 函数 返 回非 0 值 则传 入的 内容会 被丢失 。值 -1 为保 留字 TR ANSC OD E _ER R OR , 在这 里不能 作为 返 回值使 用。
手机 端 T r a ns c od er AP I 介绍
手机 端 T r ans c o der AP I 以 j a v a 类 的形 式提 供, 主要的 类名为 “ n et .rim .d ev ic e.ap i. crypt o . t r ans c o der . T r ans c o der ” 。开 发人员 需要 继续 这个 类, 并实现 其中 指定 的方 法。 另外, 为了 让 开发人 员所 开发 的类 生效 , 需要调 用 “ n et .rim .d e vice.a p i. crypt o . t r ans c o der . T r ans c o derMa na g e r ” 类的 r eg ist er 方法 注册 所开 发的 T r ans c o de r 子 类。最 后,开 发人员 通 Bla ck Be rr y 开 发工具 生 成一个 可以 在 Bla c kB er r y 智能手 机上 运行 的程 序。 因为手 机端 的加 解密 程序 需要对 所有 数据 进行处 理, 一般 这个 应用 会设置 为自 启动 的应 用。 在部署 手机 端加 解密 应用 的时候 , 需 要将 所生 成的 手机应 用安 装到 手机 设备 上。 如 果该 程序 被设置 为自 启动 应用, Bla c kBe rry 智能 手机 会自 动将 该程序 载入 内存。当 需要 对数据 进行 处 理的时 候, 会调 用该 程序 特定的 方法 ,由 该方 法对 数据进 行处 理。
继承 法 T r ans c o der 类后所 需要实 现的 函数 有:
函数: g e t ID( )
用于获 取客 户端 应用 的 ID ,开发 人员 可以 在该 函数 中返 回 0 以外 的任 意 byt e 类型的 值,前 提是返 回值 必须 和服 务器 端应 用 G et ID 函数 的返回 值相同 。
函数定义:
pu bl ic fin al byt e g et ID ( )
参数: 无
返回值:
该方法 返回一 个 byt e 类型 的值作 为客 户端 应用 的 ID , 如 上所 述, 这里 返回 的 I D 必须 和服 务 器端应 用 G et ID 方 法返回 的值相 同。
函数: wil lT r a ns co de ( )
该函数 让开 发人 员判 断是 否需要 对传 入的 内容 进行 加解密 处理 。 它的 作用 主要 是过滤 那些 不 需要加 解密 操作 的消 息。
函数定义:
pu bl ic boo lean wil l T r ans c o de( In t Has h t ab le c o n t e xt )
参数:
c o n t e xt 用于获取 传入 的内 容的上 下文 ,从 而判 断是 否需要 对其 进行 加密 。 返回值:
返回 t r ue 表示 需要 对内 容进行 加解 密处 理, 返回 f al s e 表示 不需 要对 内容 进行加解 密处 理。
函数 : enc ode ( )
该函数 用于 对数 据进 行加 密, Bla c kB er r y 智 能手 机在 发送数 据前 会调 用这 个方 法, 开发 人员 需要在 这个 函数 中实 现加 密算法 。
函数定义:
pu bl ic boo lean enc o de ( In putSt r eam in put , Out putSt r eam o ut put , In t Has h t ab le c o n t e xt )
参数:
in pu t 为 Bla ck Be rry 智能手 机传入 的内 容, 开发 人员 可以从 中读 取消 息内 容
o ut pu t 为 Bla ck B er r y 智能 手机的 内容 ,开 发人 员需 要将加 密过 的数 据写 入该 参数中
c o n t e xt 消息上 下文 ,用于 获取消 息内 容主 体以 外的 其它相 关信 息。 返回值:
当该函 数返 回 t ru e 时 表明 加密成功,返 回 f als e 则表 明加密 不成功。注 意, 如 果该函 数返 回
非 0 值则 传入 的内 容会被 丢失。 值 - 1 为 保留 字 T RA NSC OD E_ ERR O R ,在 这里 不能作 为返 回 值使用 。
函数 : dec ode ( )
该函数 用于 对数 据进 行解 密, Bla c kB er r y 智 能手 机在 接收到 数据 后会 调用 这个 方法,开 发人 员需要 在这 个函 数中 实现 解密算 法。
函数定义:
pu bl ic boo lean dec o de ( In putSt r eam in put , Out putSt r eam o ut put , In t Has h t ab le c o n t e xt )
参数:
in pu t 为 Bla ck Be rry 智能手 机传入 的内 容, 开发 人员 可以从 中读 取消 息内 容
o ut pu t 为传给 Bla ck B er r y 智能手 机的 内容 ,开 发人 员需要 将解 密过 的数 据写 入该参 数中
c o n t e xt 消息上 下文 ,用于 获取消 息内 容主 体以 外的 其它相 关信 息。 返回值:
当该函 数返 回 t ru e 时 表明 解密成 功,返 回 f als e 则表 明多彩 密不 成功 。
BlackBerry SDK下载
相关链接:
使用BlackBerry Transcoder API 集成第三方加密方案(一)
使用BlackBerry Transcoder API 集成第三方加密方案(二)
使用BlackBerry Transcoder API 集成第三方加密方案(三)