密碼學基礎——DES算法

????????前面的密碼學基礎——密碼學文章中介紹了密碼學相關的概念,其中簡要地對稱密碼體制(也叫單鑰密碼體制、秘密密鑰體制)進行了解釋,我們可以知道單鑰體制的加密密鑰和解密密鑰相同,單鑰密碼分為流密碼分組密碼。

  • 流密碼(序列密碼,Stream Cipher:對明文消息按字符(如二元數字)逐位地進行加密。
  • 分組密碼(Block Cipher:將明文消息分組(含有多個字符),逐組地進行加密。

????????那么本文要介紹的DES算法屬于分組密碼。

一、基礎知識? ??

????????在介紹DES算法之前,我們需要知道幾個概念:

????????1.代換

????????2.擴散和混淆

????????3.Feistel加密結構

1.代換

在前一篇介紹密碼學基礎——古典密碼學的文章已經初步介紹了代換和置換的概念:

代換(替代):將明文中的每個字符替換為另一個字符,形成密文。

置換(換位):不改變明文中的字符,而是通過重新排列字符的位置來形成密文。

在 DES 中,代換主要通過 S 盒(Substitution Box)來實現

?

2.擴散和混淆

(1)擴散

?????????定義:擴散是指將明文的統計特性散布到密文中去,使得明文的每一位影響密文中的許多位,從而使密文的統計特性與明文的統計特性無關。實現方式是使得密文中每一位由明文中多位產生。

????????實現方式:在 DES 中,通過多次迭代的置換和異或操作來實現擴散。例如,在每一輪迭代中,數據會經過置換操作,將不同位置的比特進行交換,使得明文的影響逐漸擴散到整個密文。

(2)混淆

?????????定義:混淆是指將密鑰和明文之間的關系變得復雜,使得從密文和密鑰中難以推出明文的統計特性。

????????實現方式:DES 通過 S 盒的非線性代換以及密鑰與數據的混合操作來實現混淆。S 盒的非線性特性使得輸入和輸出之間的關系非常復雜,難以通過分析輸出得到輸入的信息。同時,密鑰與數據的異或操作也增加了密鑰和明文之間的混淆程度。

?

3.Feistel 加密結構

????????Feistel 結構是一種分組密碼的設計結構,由 Horst Feistel 提出。DES 采用了 Feistel 結構。

(1)結構原理

加密算法? ? ? ?

????????加密算法的輸入是分組長為2w的明文和一個密鑰K。將長度為2w位的明文分組分成左右兩個w位的子塊,分別記為L0?和R0?,在進行完n輪迭代后,左右兩半再合并到一起以產生密文分組。

????????在進行第i輪迭代時,其計算方式為:

Li?=Ri?1?,

Ri?=Li?1?⊕F(Ri?1?,Ki?)

????????其中F是輪函數,Ki?是第i輪的子密鑰。一般,各輪子密鑰彼此不同而且與K也不同。經過多輪迭代后,再將最后一輪得到的左右子塊進行交換,得到密文。

?Feistel網絡中每輪結構都相同,每輪中右半數據被作用于輪函數F后,再與左半數據進行異或運算,這一過程就是上面介紹的代換。

每輪輪函數的結構都相同,但以不同的子密鑰K作為參數。代換過程完成后,再交換左、右兩半數據,這一過程稱為置換。

解密算法

????????解密算法每輪的左右兩半用LEi?和 REi表示。

(2)輪函數F

????????輪函數F是 Feistel 結構的核心組件,它通常包含了代換、置換、密鑰混合等操作。通過這些操作,對輸入的數據進行非線性變換,從而實現混淆和擴散的效果。不同的分組密碼算法在輪函數的具體設計上會有所不同,但目的都是為了增加密碼的安全性。

(3)密鑰生成與使用

????????在 Feistel 結構中,密鑰通常會被擴展成多個子密鑰,分別用于每一輪的迭代運算。密鑰擴展算法的設計需要保證子密鑰的安全性和獨立性,以防止攻擊者通過分析子密鑰來破解密碼。例如,在 DES 算法中,56 位的密鑰會被擴展成 16 個 48 位的子密鑰,用于 16 輪的迭代。

?

二、DES加密算法

????????數據加密標準(Data Encryption Standard,DES)是IBM公司于1970年研制的DES (Data Encryption Standard)算法。該算法每隔五年由美國國家保密局(NSA—National Security Agency)作出評估,并重新批準它是否繼續作為聯邦加密標準。最后一次評估是在1994年1月,美國已決定1998年12月以后將不再使用DES。

算法概述

????????明文分組長度為64比特,密鑰長度為56比特,生成 64 位的密文分組。16輪迭代

????????如下圖為DES加密算法框圖,輸入64bit明文數據,64bit密鑰,其中8 位用于奇偶校驗,實際有效密鑰長度為 56 位。將64bit明文數據經過初始置換IP,再經過16輪迭代,每輪中都有置換和代換運算,第16輪變換的輸出分為左右兩半,并被交換次序。最后再經過一個逆初始置換IP-1(為IP的逆)從而產生64比特的密文。

????????除初始置換IP和逆初始置換IP-1外,DES的結構和前面的的Feistel密碼結構完全相同。

加密過程

1.初始置換(IP)

????????將 64 位的明文按照特定的置換表進行位置置換,得到初始置換后的結果。

????????DES的置換表如下:

2.輪函數(Feistel 結構)?

????????DES 的輪函數采用 Feistel 結構,如下圖為DES加密算法的輪結構。

????????先看左側將 64 bit的中間數據分為左右兩個 32 bit的子塊,記為記為L和R。在第i輪迭代時:

Li?=Ri?1?,

Ri?=Li?1?⊕F(Ri?1?,Ki?)

輪密鑰 為48比特。

輪函數F的具體操作包括:

  1. 將輪輸入的右半部分R進行擴展置換(E表),從 32 位擴展到 48 位;
  2. 然后與 48 位的子密鑰K進行異或運算;
  3. 接著將結果通過 8 個 S 盒進行代換,將 48 位數據壓縮回 32 位;
  4. 最后進行 P 盒置換。

?F 中的代換由8個S盒組成,每個S盒的輸入長為6比特、輸出長為4比特,其變換關系如下表所示,每個S盒給出了4個代換(由一個表的4行給出)

3.密鑰生成

首先,將 64 位的密鑰(其中包含 8 位奇偶校驗位)經過置換選擇 1(PC - 1),得到 56 位的密鑰。

然后,將這 56 位密鑰分為兩部分,每部分 28 位,進行循環左移操作,移位的位數根據輪數而定。

(c)左循環移位位數

最后,經過置換選擇 2(PC - 2),從 56 位密鑰中選出 48 位作為每輪的子密鑰,共生成 16 個子密鑰,用于 16 輪的加密運算。

解密過程

????????DES 的解密過程與加密過程基本相同,只是子密鑰的使用順序相反。首先對密文進行初始置換,然后按照逆序使用 16 個子密鑰進行 16 輪的輪函數運算,最后進行逆初始置換得到明文。

DES系統的保密性主要取決于什么?

密鑰的安全性。窮舉法破解

安全性

DES的56位密鑰可能太小

DES的迭代次數可能太少(16次恰巧能抵抗差分分析)

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75633.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75633.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75633.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis分布式鎖詳解

Redis分布式鎖詳解 分布式鎖是在分布式系統中實現互斥訪問共享資源的重要機制。Redis因其高性能和原子性操作特性,常被用來實現分布式鎖。 一、基礎實現方案 1. SETNX EXPIRE方案(基本版) # 加鎖 SETNX lock_key unique_value # 設置唯…

創建Linux虛擬環境并遠程連接,finalshell自定義壁紙

安裝VMware 這里不多贅述。 掛載Linux系統 1). 打開Vmware虛擬機,打開 編輯 -> 虛擬網絡編輯器(N) 選擇 NAT模式,然后選擇右下角的 更改設置。 設置子網IP為 192.168.100.0,然后選擇 應用 -> 確定。 解壓 CentOS7-1.zip 到一個比較大…

podman和與docker的比較 及podman使用

Podman 與 Docker 的比較和區別 架構差異 Docker:采用客戶端 - 服務器(C/S)架構,有一個以 root 權限運行的守護進程 dockerd 來管理容器的生命周期。客戶端(docker 命令行工具)與守護進程進行通信&#x…

【Easylive】HttpServletRequest、HttpServletResponse、HttpSession 介紹

【Easylive】項目常見問題解答(自用&持續更新中…) 匯總版 這三個是 Java Web 開發(Servlet/JSP)的核心接口,用于處理 HTTP 請求和響應 以及 用戶會話管理。它們在 Spring MVC(Controller)中…

Markdown使用說明

以下是Markdown基礎使用教程及分割線展示方法: 📝 Markdown基礎使用教程 1. 標題 # 一級標題 ## 二級標題 ### 三級標題2. 文本樣式 *斜體* 或 _斜體_ **加粗** 或 __加粗__ ***加粗斜體*** 或 ___加粗斜體___ ~~刪除線~~3. 列表 - 無序列表項 * 另一…

Jmeter的壓測使用

Jmeter基礎功能回顧 一、創建Jmeter腳本 1、錄制新建 (1)適用群體:初學者 2、手動創建 (1)需要了解Jmeter的常用組件 元件:多個類似功能組件的容器(類似于類) 各元件作用 組件…

【rabbitmq基礎】

RabbitMq基礎 1.概念2.數據隔離3.使用控制臺向mq傳遞消息1.創建兩個隊列-“測試隊列”,“測試隊列2”2.創建一個交換機-"測試交換機"3.測試發送消息3.1讓交換機和隊列進行綁定3.2發送消息3.3查看消息 4.創建虛擬主機5.java使用rabbitmq5.1 發送消息5.2 消…

加固計算機廠家 | 工業加固筆記本電腦廠家

北京魯成偉業科技發展有限公司(以下簡稱“魯成偉業”)成立于2005年,是集研發、生產、銷售與服務于一體的高新技術企業,專注于加固計算機、工業加固筆記本電腦及特種計算機的研發與制造。憑借20年的技術積累與行業深耕,…

鏈路聚合配置命令

技術信息 加入捆綁組,加大鏈路間帶寬等 配置命令 華三 靜態聚合 將接口加入聚合口后再進行配置 //創建靜態鏈路聚合口1,不啟用lacp[SWB]interface Bridge-Aggregation 1 [SWB-Bridge-Aggregation1]port link-type trunk [SWB-Bridge-Aggregation…

ekf-imu --- 四元數乘法符號 ? 的含義

? 表示四元數的乘法運算: 用于組合兩個四元數代表的旋轉。四元數乘法是非交換的(即順序不同結果不同),其定義如下: 若兩個四元數分別為: qq0q1iq2jq3k, pp0p1ip2jp3k, 則它們的乘積為:4*1 …

論文閱讀Diffusion Autoencoders: Toward a Meaningful and Decodable Representation

原文框架圖: 官方代碼: https://github.com/phizaz/diffae/blob/master/interpolate.ipynb 主要想記錄一下模型的推理過程 : %load_ext autoreload %autoreload 2 from templates import * device cuda:1 conf ffhq256_autoenc() # pri…

OpenVLA-OFT——微調VLA的三大關鍵設計:并行解碼、動作分塊、連續動作表示以及L1回歸目標

前言 25年3.26日,這是一個值得紀念的日子,這一天,我司「七月在線」的定位正式升級為了:具身智能的場景落地與定制開發商 ,后續則從定制開發 逐步過渡到 標準產品化 比如25年q2起,在定制開發之外&#xff0…

【論文閱讀】Dynamic Adversarial Patch for Evading Object Detection Models

一、介紹 這篇文章主要是針對目標檢測框架的攻擊,不同于現有的攻擊方法,該論文主要的側重點是考慮視角的變化問題,通過在車上布置多個顯示器,利用視角動態選擇哪一個顯示器播放攻擊內容,通過這種方法達到隱蔽與攻擊的…

多模態技術概述(一)

1.1 多模態技術簡介 1.1.1 什么是多模態 多模態(Multimodal)涉及多種不同類型數據或信號的處理和融合,每種數據類型或信號被稱為一種模態。常見的模態包括文本、圖像、音頻、視頻等。多模態技術旨在同時利用這些不同模態的數據,以實現更全面、更準確的理…

nginx2

Nginx反向代理(七層代理)、Nginx的TCP/UDP調度器(四層代理)、 一、Nginx反向代理(七層代理) 步驟&#xff1a; ? 部署后端web服務器集群 ? 配置Nginx代理服務器 ? 配置upstream集群池 ? 調節集群池權重比 <img src"/home/student/Deskt…

調用kimi api

官網支持python&#xff0c;curl和node.js 因為服務器剛好有php環境&#xff0c;所以先用curl調個普通的語音溝通api <?php // 定義 API Key 和請求地址 define(MOONSHOT_API_KEY, sk-PXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXgk1); define(MOONSHOT_API_URL, https://…

關于 UPDATE 語句 和 SELECT ... FOR UPDATE 的對比分析,包括語法、功能、鎖機制、使用場景及示例代碼

以下是關于 UPDATE 語句 和 SELECT ... FOR UPDATE 的對比分析&#xff0c;包括語法、功能、鎖機制、使用場景及示例代碼&#xff1a; 1. UPDATE 語句 功能 直接修改數據&#xff1a;立即更新表中的數據&#xff0c;并提交修改。無顯式鎖&#xff1a;雖然會自動加鎖&#xff…

在航電系統中提高可靠性的嵌入式軟件設計

1.總線余度設計 數據傳輸采用雙余度總線設計&#xff0c;CANFD為主&#xff0c;RS485為備。發送方將相同的數據分別通過雙總線來發送&#xff0c;接收方優先處理主線數據。由于總線上數據頻率固定&#xff0c;可設置定時器監控主總線的數據&#xff0c;當定時器超時后&#xff…

第十五屆藍橋杯大賽軟件賽省賽Python 大學 C 組:5.回文數組

題目1 回文數組 小藍在無聊時隨機生成了一個長度為 n 的整數數組&#xff0c;數組中的第 i 個數為 ai&#xff0c;他覺得隨機生成的數組不太美觀&#xff0c;想把它變成回文數組&#xff0c;也是就對于任意 i∈[1,n] 滿足 a i a n ? i 1 a_ia_{n?i}1 ai?an?i?1。 小藍…

netty中的WorkerGroup使用詳解

Netty中WorkerGroup的深度解析 WorkerGroup是Netty線程模型中的從Reactor線程組&#xff0c;負責處理已建立連接的I/O讀寫、編解碼及業務邏輯執行。其設計基于主從多Reactor模型&#xff0c;與BossGroup分工協作&#xff0c;共同實現高并發網絡通信的高效處理。 一、WorkerGro…