洞察眼 公告 洞察眼MIT系统 2025 年五一优惠及假期服务公告 查看详情
首页 > 动态中心 > 技术文章  >  正文

谁家的加密密钥,写死在代码里?

2023-06-15 00:00:00

文章摘要:系统设计,协议先行。大部分人不了解协议的设计细节,更多使用已有协议进行应用层设计,例如:使用HTTP,设计 get/post/cookie 参数,以及json包格式;使用dubbo,而不用去深究内部的二进制包头包体细节;无论如何,了解协议设计的原则,对深入理解系统通信非常有帮助。一、协议的分层设计所谓“协议”,是双方共同遵守的规则,例如:离婚协议,停战协议。协议有语法、语义、时序三要素:语法,即数

系统设计,协议先行。

大部分人不了解协议的设计细节,更多使用已有协议进行应用层设计,例如:

  • 使用HTTP,设计 get/post/cookie 参数,以及json包格式;
  • 使用dubbo,而不用去深究内部的二进制包头包体细节;

无论如何,了解协议设计的原则,对深入理解系统通信非常有帮助。

一、协议的分层设计

所谓“协议”,是双方共同遵守的规则,例如:离婚协议,停战协议。协议有语法、语义、时序三要素:

  • 语法,即数据与控制信息的结构或格式;
  • 语义,即需要发出何种控制信息,完成何种动作以及做出何种响应;
  • 时序,即事件实现顺序的详细说明;

画外音:后文主要讲语法设计。

协议设计通常分为三层:应用层协议、安全层协议、传输层协议。

下面分别看下这三层的协议应该如何选型。

二、应用层协议设计

应用层协议选型,常见的有三种:文本协议、二进制协议、流式XML协议。

(1) 文本协议

文本协议是指“贴近人类书面语言表达”的通讯传输协议,典型的协议是HTTP协议,一个HTTP协议的请求报文样例如下:

GET / HTTP/1.1
User-Agent: curl
Host: musicml.net
Accept: */*

文本协议的特点是:

  • 可读性好,便于调试;
  • 扩展性较好,能通过key:value扩展;
  • 解析效率不高,一行一行读入,按照冒号分割,解析key和value;
  • 对二进制不友好 ,比如语音/视频等;

(2) 二进制协议

二进制协议即binary协议,典型是IP协议,以下是IP协议的一个图示:

二进制协议一般包含:一般包含:

  • 定长包头;
  • 可扩展变长包体;
  • 一般每个字段有固定的含义,以IP协议为例,前4个bit表示协议版本号(Version);

二进制协议的特点是:

  • 可读性差,难于调试;画外音:打日志一般需要一个toString()函数增强可读性。
  • 扩展性不好,如果要扩展字段,旧版协议就不兼容了,所以设计时一般会有一个Version字段;
  • 解析效率超高,几乎没有解析代价,二进制流的每个字段表示固定含义;
  • 天然支持二进制流 ,比如语音/视频;

这是一个典型的16字节二进制定长包头的例子:

//sizeof(cs_header)=16
struct cs_header {
  uint32_t version;
  uint32_t magic_num;
  uint32_t cmd;
  uint32_t len;
  uint8_t data[];
}__attribute__((packed));

其中:

(1)前4个字节表示版本号version;

(2)接下来4个字节表示魔法数字magic_num,用来解决数据错位或丢包问题;

画外音:例如,约定好魔法数字是0x01020304,收到的报文,魔法数字匹配,认为是正常报文,否则认为是报文异常,断开连接。

(3)接下来4个字节表示命令号command,不同的命令号对应不同的变长包体;

(4)最后4个字节表示包体长度length,以确定变长包体有多少字节;

这是一个实际的二进制变长包体:

message CUserLoginReq {
  optional string username = 1;
  optional string passwd = 2;
}

message CUserLoginResp {
  optional uint64 uid =1;
}

它使用的是Google的Protobuf协议,容易看到:

  • 请求报文传入的是用户名与密码;
  • 响应包返回的是用户的uid;

PB是很流行的二进制变长包体协议,其优点为:

  • 通用,可以生成C++、Java、PHP等多语言代码;
  • 自带压缩功能;
  • 对二进制友好;
  • 在工业界已广泛应用;画外音:Google出品,必属精品。

流式XML协议流式XML似乎是文本协议的一个特例,亦可以单独作为一类。例如:xmpp就是典型的流式XML协议,下面是xmpp协议的一个典型报文:

<message
to=’romeo@example.net’
from=’juliet@example.com’
type=’chat’
xml : lang=’en’>
<body>Wherefore art thou, Romeo?</body>
</message>

从xml标签中大致可以判断这是一个romeo发给juliet的聊天消息。

XML协议有几个特点:

  • 可读性好,扩展性好,这是XML的特性;
  • 解析代价超高,需要进行dom树分析;
  • 有效数据传输率超低,有大量的标签;
  • 对二进制不友好 ,比如语音/视频等;

三、安全层协议设计

安全层协议设计,除了使用SSL,自行实现的话,常见的又有以下三种方案。

画外音:SSL秘钥管理是个问题。

(1) 固定密钥

服务端和客户端约定好一个密钥,同时约定好一个加密算法(例如:AES),每次客户端发送报文前,就用约定好的算法,以及约定好的密钥加密再传输,服务端收到报文后,用约定好的算法,约定好的密钥再解密。

画外音:安全性低,安全性基于程序员的职业操守。

(2) 一人一密

简单来说,就是一个人的密钥是固定的,但是每个人之间又不同。常见的实现方式是:

  • 固定加密算法;
  • 加密秘钥使用“用户的某一特殊属性”,比如用户uid、手机号、qq号、用户密码等;

(3) 一次一密

即动态密钥,一Session一密钥的安全性更高,每次会话前协商密钥。密钥协商的过程要经过2次非对称密钥的随机生成,1次对称加密密钥的随机生成,具体详情这里不展开。

四、传输层协议设计

可选的协议有TCP和UDP,现在基本都是使用TCP,有了epoll等技术后,多连接就不是瓶颈了,单机几十万链接没什么问题。[来源:架构师之路]

上一篇 : 企业有必要安装文件加密软件吗?加密软件选购指南
  • 相关推荐
  • 文档透明加密 功能介绍及演示

    文档透明加密功能,是保障企业数据安全的核心利器,通过多种加密模式和权限管理手段,为企业文档提供全方位的保护,确保文档在整个生命周期中的安全性,防止数据泄露。透明加解密与半透明加解密:基于驱动层过滤技术,采用高强度加密算法,实现对用户通过指定授权软件创建的文件实时无感知加密,访问时自动解密。这意味着用户在日常操作过程中,...

    2025-04-30 11:46:29
  • 数据防泄密方法有哪些?推荐数据防泄密的六种方法

    在当今数字化时代,数据已然成为企业和个人最为宝贵的资产之一。无论是商业机密、客户资料,还是个人隐私信息,一旦发生泄密事件,都可能引发严重的后果,如企业声誉受损、面临巨额经济损失,个人隐私被侵犯等。因此,采取有效的数据防泄密措施刻不容缓。接下来就为大家详细介绍六个实用的数据防泄密方法,其中不乏简单易操作的妙招,让我们一起...

  • 精选七款顶级局域网监控软件,避免老板踩雷的监控神器来啦!

    在当今数字化办公的时代,企业的运营高度依赖于信息技术和网络环境。为了确保企业数据安全、提升员工工作效率以及优化网络资源管理,局域网监控软件成为了企业不可或缺的工具。2025年市场上涌现出了许多功能强大的局域网监控软件,它们犹如企业的得力助手,能够助力企业在激烈的市场竞争中实现腾飞。本文将为您详细介绍七款优秀的局域网监控...

  • 透明加密软件有哪些|7款好用的透明加密软件(2025最新排行榜)

    在当今数字化时代,数据已成为企业和个人最宝贵的资产之一。然而随着网络安全威胁的日益增多,数据泄露事件屡见不鲜,保护数据安全变得至关重要。透明加密软件作为一种有效的数据保护工具,能够在不影响用户正常使用文件的前提下,自动对数据进行加密和解密,为数据安全提供了可靠的保障。本文将为您推荐 2025 年好用不踩雷的 7 款透明...

  • 怎么给我的图纸加密?七款图纸加密软件分享,设计公司都爱用!

    在当今数字化时代,图纸作为企业和个人的重要资产,其安全性至关重要。无论是工程设计图纸、建筑规划图还是产品设计图,一旦泄露,可能会给企业带来巨大的经济损失和声誉损害。因此选择一款优越的图纸加密软件成为了保护图纸安全的关键。本文将为您介绍七款值得收藏的图纸加密软件,帮助您找到最适合自己的加密解决方案。一、洞察眼 MIT 系...

  • 图纸怎么加密最安全?六种图纸加密的宝藏妙招分享!

    在当今竞争激烈的商业环境中,企业的各类图纸承载着核心的技术、设计理念以及商业机密,关乎着企业的生存与发展。一旦这些图纸泄露,可能会给企业带来不可估量的损失,比如失去市场竞争优势、遭受侵权困扰等。因此,如何对图纸进行有效的加密保护,已然成为众多企业关注的重点。下面就为大家详细介绍六大实用的图纸加密方法,其中不乏深受企业青...

  • 源代码怎么防泄密?5个对开发中的源代码防泄密与防护有效方法

    在当今数字化飞速发展的时代,源代码作为软件企业的核心资产,犹如一座宝藏,蕴含着巨大的商业价值和技术机密。一旦源代码不慎泄露,不仅会让企业辛苦积累的技术优势荡然无存,还可能面临着被竞争对手抄袭、恶意利用等诸多风险,给企业带来难以估量的损失。所以如何有效地防止源代码泄密,已然成为众多企业和开发者们必须要攻克的重要课题。下面...

  • 2025常用的8款文件加密软件,办公文件怎么加密,最新推荐!

    在数字化时代,数据安全至关重要。无论是个人的隐私文件,还是企业的机密数据,都面临着各种潜在的安全威胁。文件加密软件作为保护数据安全的重要工具,能够将敏感信息转化为密文形式,只有通过特定的密钥才能解密访问,从而有效防止数据被窃取或篡改。以下为你介绍 2025 年值得关注的 8 款好用的文件加密软件。一、洞察眼 MIT 系...

  • 监控电脑屏幕的软件有哪些?十款电脑屏幕监控软件及功能介绍

    您知道吗?据权威调查显示,超过七成的企业都曾遭遇过因员工不当电脑使用行为而引发的数据泄露事件,还有近六成企业表示员工工作效率低下与缺乏有效监管密切相关。这些数据无疑给企业的发展敲响了警钟,而解决这些问题的关键,或许就藏在合适的电脑监控软件之中。在这里我们精心挑选了十款高效且安全性十足的电脑监控软件推荐给您,它们都是企业...

  • 如何给文件加密?分享文件加密的7个方法,保护文档安全

    在数字化时代,文件安全至关重要。无论是个人的隐私文件,还是企业的机密数据,都需要有效的保护。文件加密作为一种关键的安全措施,能够防止信息泄露、数据被篡改以及恶意攻击,为我们的数据加上一层坚固的“保护锁”。下面就为大家分享 7 个实用的文件加密方法,让你的文件安全无忧。一、使用专业工具——洞察眼 MIT 系统洞察眼 MI...

大家都在搜的词:

微信扫一扫联系售前工程师