首页 > 其他分享 >应用密码学入门

应用密码学入门

时间:2024-10-25 15:00:12浏览次数:7  
标签:加密 入门 密文 明文 应用 演算法 密码学 Key

1. 密码学是什么
不是研究怎麼設安全的密碼
● 不是教你怎麼破解別人 Facebook
● 你不會因為知道密碼學在幹嘛就變成天才駭客
● 很多數學
○ 我是說,真的很多
○ 不過我並沒有打算講很多數學理論
○ 我自己數學也不好 QQ
● 如果已經沒興趣了,可以趕快離開我不會介意

而是:
古典密碼學
○ 資料保密、傳遞
○ 密碼破譯
● 現代密碼學
○ 古典密碼學的所有東西
○ 資料完整性驗證(Data integrity)
○ 資料的不可否認性( Non-repudiation)
○ 雜湊函數(Hash)
○ 亂數
○ 隱寫術(Steganography)

2. 常见词解释:

  1. 加密 Encrypt:指將明文經過某種程序轉換成密文,該程序稱為加密
  2. 解密 Decrypt:指將密文經過某種程序轉換成明文,該程序稱為解密
  3. 明文 Plaintext:加密前的訊息
  4. 密文 Cipertext:加密後的訊息
  5. 演算法 Algorithm:解決複雜問題的程序
  6. 密碼學演算法:做與密碼學相關程序(如加密、解密、簽章...)的演算法
  7. 金鑰 / 密鑰 Key:加解密時所使用的「鑰匙」

3. 柯克霍夫原则
● 即使演算法完全洩漏,只要金鑰沒有洩漏,密文就是安全的
● Claude Shannon: "the enemy knows the system"
● Bruce Schneier: 任何以隱藏設計作為防護(Security through obscurity)的保安
系統必然會失敗
● Kerckhoffs's principle 不是說密碼學演算法都必須公開,而是要確保即使公開也
不會傷害安全性

*古典密码学
恺撒密码学
撒密码(英语:Caesar cipher),或称凯撒加密、凯撒变换、变换加密,是一种最简单且最广为人知的加密技术。凯撒密码是一种替换加密技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期凯撒的名字命名的,据称当年凯撒曾用此方法与其将军们进行联系。


加密(向左偏移三格):hitcon -> efqzlk
● 解密(向右偏移三格):efqzlk -> hitcon

攻擊:暴力破解太簡單,也才 26 種可能
● 據說凱薩當年就是用往左偏移三個字母來加密的
○ 阿不過,他的敵人大多不識字


单一字元替代密码
和凱薩密碼一樣是字母一對一代換,但沒有規律
● 換字表(密鑰):
a -> h
b -> e
c -> q
d -> k
...
● 加密:dcba -> kqeh
● 解密:kqeh -> dcba
● 其實也不一定要換成另一個字母(e.g. 豬圈密碼)

攻擊:字頻分析(Frequency analysis)
最常出現的字母:e, t, a, o, i
最常出現的單字:the, to, of, and

维吉尼亚密码
基本上就是一系列的凱薩密碼
明文:platelet is great
密鑰:hitcon(重複填補到明文長度)
密文:wttvsylb bu uelim
● 字頻分析不能用了 QQ
● 沒關係,還是有方法可以破解

卡西斯基试验


  • 现代密码学的基本概念
  1. 对称加密
    加解密用同一个key

    编码不是加密,密码学要把所有文字转成数字才能运算,有时可能会需要二进制。

XOR


攻击:
已知明文與密文時可以直接回推 Key (明文⊕密文 = 金鑰)
● 遇到一長串 Null (0x00) 時會直接寫出 Key
而這在二進制檔案中是很常見的事情
● 如果 Key 長度短於 Plaintext,那基本上就是變種的維吉尼亞密碼
○ 卡西斯基試驗
○ Index of coincidence
● 如果 Key 長度等於 Plaintext,又 Key 完全隨機且不重用(即 One Time Pads)
是被證實無法破解的(暴力破解也不可行)

AEC(Rijindael)
美國國家標準局 NIST 於 1997 年開始徵選下一代的對稱式加密系統
○ 稱為 Advanced Encryption Standard,簡稱 AES
○ 要求實作程式碼必須公開(不允許 Security by obscurity)
○ 必須無償給所有人使用
○ 除安全性外要考慮效能、記憶體使用量、是否易於實作等
○ 由全世界所有專家一起研究與評比
● 最後由比利時密碼學家 Joan Daemen 和 Vincent Rijmen 設計的 Rijndael 獲勝
● 金鑰長度(Key sizes):128, 192 or 256 bits
● 區塊長度(Block sizes):128 bits
○ 換而言之,AES 規定一次只能加密 128 bits
● 嚴格來說,AES(規範) 是 Rijndael(演算法) 的 subset

串流加密 vs 区块加密

金鑰分配問題
Alice 如何安全的把金鑰送給 Bob?
● 事先約定
○ Alice 把金鑰寫在紙條上,偷偷拿給 Bob
● 金鑰管理
● 非對稱式加密系統
○ 有兩把金鑰,用於加密的可以公開給別人,用於解密的要私藏
● Diffie-Hellman key exchange
○ 可以靠著溝通創㐀出共有金鑰而讓竊聽者無法得知該金鑰

非对称加密
加解密使用不同的key

RSA常见非对称加密系统

  • 最常见非对称加密系统
  • 基于大数质因数分解困难

大数质因数分解原理



密码学用于资料与身份验证
散列函数(hash):1. 验证data的完整性 2. 不取得明文得情况下验证资料得正确性
讯息验证码(MAC): 1. 消息验证 2. 验证完整性 3. 可验证身份 4. 常用HMAC(如:http/https的TLS协议使用)、CBC-MAC
数位签章(Digital Signature): 1. 类似于纸上签名,证明认可资料 2. 拥有私钥的人可以签章,其他人可验章 3. 通常hash后签章 4. 基于非对称式加密系统的应用 5. 具有不可否认性

has VS MAC VS Digital Signature

鉴权 certificate authority:如何确保大家的公钥一致呢?
● 負責身份驗證並發放、管理、註銷憑證的
權威機構
● 大家都信任這個機構發放的簽章

乱数(Random number)
使用乱数的时机:1. 生成金轮 2. 生成Nonce 3. 生成IV
由seed搭配演算法产生乱数(具有确定性):
PRNG:伪乱数生产器
CSPRNG:密码学安全伪乱数生产器
TRNG:真乱数生产器
几个关键点:
● Seed 很重要
● key = srand(time(NULL))
● 如果已知 PRNG 與大略的生成時間 Orz
● 請使用 /dev/urandom 和 CryptGenRandom
● 演算法不要亂來,請用 NIST 系列的(DUAL_EC_DRBG 除外)

标签:加密,入门,密文,明文,应用,演算法,密码学,Key
From: https://www.cnblogs.com/learnForLife/p/18502558

相关文章

  • 鸿蒙NEXT应用上架与分发步骤详解
    大家好,我是V哥。今天的文章来聊一聊HarmonyOSNEXT应用上架。当你开发、调试完HarmonyOS应用/元服务,就可以前往AppGalleryConnect申请上架,华为审核通过后,用户即可在华为应用市场获取您的HarmonyOS应用/元服务。HarmonyOS会通过数字证书与Profile文件等签名信息来保证应用的完......
  • 越界检测视频分析网关区域入侵识别人员入侵算法的技术原理和视频监控应用
    在传统的监控模式下,依赖人工持续监视视频画面存在明显的局限性,包括疲劳、注意力分散以及无法覆盖所有区域等问题,这使得实现24小时、全方位监控变得困难。而人工智能技术的应用,通过在关键位置部署摄像头,能够捕获连续的视频流。结合深度学习模型,这些视频流可以被实时分析,从而提高了......
  • 【北京迅为】itop-龙芯2k1000开发指南Linux基础入门vim 编辑器
     龙芯2K1000处理器集成2个64位GS264处理器核,主频1GHz,以及各种系统IO接口,集高性能与高配置于一身。支持4G模块、GPS模块、千兆以太网、16GB固态硬盘、双路UART、四路USB、WIFI蓝牙二合一模块、MiniPCIE等接口、双路CAN总线、RS485总线,扩展能力更强。龙芯2K1000已经广泛应用于工控......
  • 中小企业设备管理自动化:Spring Boot技术应用
    摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了中小企业设备管理系统的开发全过程。通过分析中小企业设备管理系统管理的不足,创建了一个计算机管理中小企业设备管理系统的方案。文章介绍了中小企业设备管理系统的系统分......
  • Nuxt.js 应用中的 pages:extend 事件钩子详解
    title:Nuxt.js应用中的pages:extend事件钩子详解date:2024/10/25updated:2024/10/25author:cmdragonexcerpt:pages:extend是Nuxt.js中的一个生命周期钩子,在页面路由解析完成后被调用。这个钩子允许开发者添加、修改或删除路由配置,为自定义页面路由的管理提供灵活......
  • 如何在 Java 应用中实现多语言支持?
    在Java应用中实现多语言支持的关键步骤包括使用国际化API、利用资源束(ResourceBundles)、采用外部化字符串、适配不同的文化习惯。最重要的步骤是使用国际化API,这允许开发者创建可以根据用户的地理位置和语言偏好动态改变其内容的应用。Java平台通过`java.util.Locale`类和资源束......
  • 手机录屏技术原理解析与应用场景
    手机录屏技术的原理主要依赖于设备操作系统的功能以及硬件支持,以下是详细步骤:1.屏幕图像捕获手机录屏的核心在于捕获屏幕上的图像。现代智能手机操作系统(如Android和iOS)通过系统接口将当前显示的内容逐帧捕获,并传递给录屏应用。这些系统API会捕获屏幕上的像素数据,然后将这些数据转......
  • 在K8S中,pod中readness 和 liveness 的区别和各自应用场景是什么?
    在Kubernetes(K8s)中,Pod的readiness和liveness探针是两种重要的健康检查机制,它们各自有着不同的应用场景和功能。以下是对这两者的详细解释:LivenessProbe(存活探针):作用:Liveness探针主要用于探测应用是否还活着。如果检测到应用没有存活(即探针失败),Kubernetes会杀掉当前Pod并重......
  • 鸿蒙NEXT+Flutter开发5-第一个鸿蒙应用
      通过前面步骤的操作,开发所需的硬件设备,软件运行环境均已配备完毕,接下来我们创建第一个应用,并使其运行在鸿蒙NEXT系统的手机中。1.创建鸿蒙项目  使用下面的命令,进入工作目录,并创建鸿蒙项目cd~/work/harmonyfluttercreate--platformsohos--orgcom.cdrviewerdemo1......
  • 鸿蒙编程江湖:异步编程的优势及 Promise的应用
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。异步编程是指编写能够同时执行多个任务,......