成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

誰家的加密密鑰,寫死在代碼里?

網絡 無線技術 數據安全
大部分人不了解協議的設計細節,更多使用已有協議進行應用層設計,但無論如何,了解協議設計的原則,對深入理解系統通信非常有幫助。

系統設計,協議先行。

大部分人不了解協議的設計細節,更多使用已有協議進行應用層設計,例如:

  • 使用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等技術后,多連接就不是瓶頸了,單機幾十萬鏈接沒什么問題。

責任編輯:趙寧寧 來源: 架構師之路
相關推薦

2023-10-27 07:20:11

2012-10-24 16:34:46

2021-10-15 13:00:55

LinuxSeahorse加密密鑰

2023-08-30 08:23:11

2023-09-26 08:24:34

數據一致性事務

2014-07-29 09:25:39

加密密鑰管理云加密

2019-05-06 10:21:09

加密密鑰云安全云計算

2024-01-19 07:49:27

2019-03-12 11:29:04

加密云安全密鑰

2019-03-23 12:35:35

GitHub代碼開發者

2014-04-10 18:52:22

2017-11-16 15:42:07

2021-11-16 09:00:00

安全加密密鑰工具

2015-08-11 09:30:51

2012-08-29 09:28:43

2014-12-08 10:41:05

亞馬遜AWS服務加密密鑰管理服務

2015-07-29 10:38:34

加密加密密鑰

2022-01-09 08:17:52

量子計算機美國加密密鑰服務

2022-08-04 14:28:12

Github安全

2011-07-13 09:42:45

密碼crypt
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美视频免费在线观看 | 毛片久久久| 日本中文字幕在线视频 | 久草日韩| 国产精品高清在线 | 久久国产成人 | 欧美日韩国产在线 | 日韩免费一区二区 | 韩国主播午夜大尺度福利 | 亚洲国产欧美在线 | 欧美一级久久精品 | 国产精品一区在线观看 | 中文字幕一区在线观看视频 | 亚洲男人天堂 | 久久久久久久久91 | 亚洲va欧美va天堂v国产综合 | 毛片免费视频 | 国产综合精品一区二区三区 | 九九精品热| 欧美久久一级特黄毛片 | h免费观看 | 毛片com | 日韩国产精品一区二区三区 | 亚洲免费精品 | 国产精品久久久久国产a级 欧美日本韩国一区二区 | 在线免费观看日本视频 | 91 在线| 亚洲网在线 | 亚洲高清免费视频 | 精品自拍视频 | 精品欧美一区二区精品久久久 | 久久国产精品-久久精品 | caoporn国产精品免费公开 | 亚洲色图图片 | 欧美在线一区二区三区四区 | 亚洲一区二区三区 | 午夜精品久久久久久久99黑人 | 日韩中文字幕视频在线观看 | 美女逼网站 | 日本精品一区二区三区四区 | 国产精品一区二区三区在线 |