本帖最后由 船舶新闻 于 2013-10-31 09:25 编辑
ECDIS探索-- 海图管理
1.1 概要 本文主要关注目前最流行的海图格式S-57标准格式。重点介绍了S-57海图在ECDIS 中的一种合理有效的管理方式。S-57是指IHO S-57 电子海图数据传输标准。该标准在1992年正式成为国际标准。目前在ECDIS上的S-57格式海图有加密和非加密两种,加密的S-57 海图,也就是所谓的S-63标准。实际上S63并非一种海图格式,而是S-57 海图的标准加密方案。也就是说S-63标准规定了对S-57 格式进行加密的过程和方式方法。本文后面讲对此进行比较详细的说明。 1.2 非加密海图管理 非加密S-57 海图管理相对简单。S-57 海图文件的物理存储格式是ISO/IEC8211 (Data Descriptive File)。DDF文件的基本格式如下所示:
启动DDR(Data Descriptive Record)是对整个文件结构的描述记录。 之后的DR(DataRecord)记录着真正的数据信息。每一个DR对应s-57的一个Object(对象)或Vector。具体参见我 opencpn系列文章中对于S-57 标准的详细解读。
对于非加密的S-57 海图,安装过程实际上是将s-57 海图文件读取之后将其中对于绘图有用的所有信息转换为自定义的数据结构之后,以自定义的格式文件中。各个厂商对于这个文件都有自己的私有格式。转换之后存储在自己构建的固定目录结构之下,以供绘图或信息获取客户去使用。 我们在EC ECDIS中的实现界面如下图所示。 从Open的对话框中选取S-57原始文件存放位置后, 会将该文件夹下所有的s-57 海图文件以列表的形式放在右侧“Uninstalledcharts”中, 并且会显示海图的部分概要信息,以及该海图有没有被安装。 对于未被安装的海图,点击“Install”之后就可以自动解析安装,安装过程中所做的操作以在上文中描述。安装过程中的相关信息会在对应的log窗口显示。
1.3 加密海图管理 对海图进行加密主要是考虑到一下一些原因: l 隐私保护: 加密ENC数据,防止出现未授权而是用ENC数据 l ENC数据存取控制:可以控制用户只能是用得到授权的那些Cell l 验证数据来源:对数据来源的合法性提供保证 加密海图涉及到一下一些组织:SA(Scheme Administrator) 该组织是唯一的。数据服 务商(Data Server),数据客户(Data Client), OEM。SA是加密方案的主要管理和维护组织。数据服务商依照规定的加密方式对生产的海图数据进行加密,提供给数据客户使用。 数据客户和OEM通常是一体的, 数据客户接受数据服务商的数据, OEM负责检验接收到的ENC 数据的合法性,以及将数据按照S-63 标准规定的方式进行解密。 要对加密的海图进行安装,按照标准首先需要验证ENC的合法性。S-63 标准所规定的授权验证过程: 1. 数据服务商有自己的publickey 和 SSK(self signed key)文件给SA验证。 2. 如果SA接受该数据服务商,SA将用SSK和SA自己的private key生成SA签名的数据服务商证书并将该证书返还给数据服务商。 3. SA的public key 是公开的。 4. SA的public key 和private key 不能与其他数据服务商的public key 和private key 相同。 5. 数据服务商之间的publickey 和private key 也必须互不相同。 ECDIS 在验证数据服务商时,用SA的public key 去检验数据服务商提供的签名文件中证书部分,保证数据服务商的合法性,也就是说去验证该数据服务商是不是S-63标准的真实遵守者。之后,ECDIS用签名文件中的数据服务商public key 去验证ENC cell 的完整性。验证过程如下图所示:
ENC数据合法性验证 在EC ECDIS中,要安装加密的s57 海图,首先需要安装SA 的public key。由于该key是公开的,而且目前是唯一的,所以在ECECDIS系统中我们默认安装了该key,不需要用户区IHO的官方网站去下载。 安装并激活后的SA public key 如下图所示。激活过程只是Status状态选择为Active 即可。
已安装的SA public key 下来要对包含ENC数据的每个Cell进行解密。对于ECDIS来说,解密ENC 的cell首先需要获取对ENC加密时的key。数据服务商通过加密保护的方式将该key通过PERMIT文件传递给数据客户。每一个ENC Cell都有一个加密时的key,每一个key被加密保存在permit文件中对应的一条密文中。数据客户,也就是此时的ECDIS,需要对permit文件中的每一条密文进行解密,解密后就可以拿到ENC Cell 的加密key, 然后可以用该key去解密ENCcell 文件,解密成功后就可以顺利的获取ENC数据。 ECDIS如何对permit文件中的密文进行解密呢? 首先S63对Permit文件中密文的格式和加密的方式给出了明确的规定,另外解密该密文也需要一个key,而这个key 是ECDIS 的硬件ID。ECDIS的硬件ID以userpermit的形式给数据服务商,数据服务商的到userpermit 后可以的到硬件ID。用该硬件ID去形成permit的密文。因此,该密文在ECDIS端 是可以用自己的硬件ID去解密的。 在EC ECDIS中,为了对加密的ENC进行解密,需要对数据服务商提供的permit文件进行安装, 每个数据服务商的permit都安装在一个目录下。不同的数据服务商分开安装。 下图是测试图的permit安装结果。 选中该服务商的permit的之后就可以对其提供的加密ENC进行解密。
数据服务商Permit文件安装 数据服务商的permit文件安装完毕并选择激活后,就可以对该数据服务商提供的ENC加密数据进行解密,并安装至指定的目录,供后期使用。下图是EC ECDIS的加密海图安装界面。
加密海图安装界面
解密中提到ECDIS需要给数据服务商提供自己的硬件ID,这个过程也需要加密,加密后的密文称为UserPermit。 下图是EC ECDIS用来生成Userpermit的界面。创建Userpermit之后将生成的密文交给数据服务商,就能拿到对应于该ECDIS的ENC 数据。
Userpermt 生成
对于ECDIS的海图管理就介绍的这里,相关的S57和S63的文章会在我的ECDIS和OPENCPN系列文章中有详细的描述。
中船工业系统工程研究院, 西安融成科技有限公司 联合出品
|