当前位置: 首页 > news >正文

信息安全基础专业面试知识点(上:密码学与软件安全)

密码学

DES加密流程

56比特长度的密钥K,  分组长度64比特,密文64比特

  • 初始置换 (IP):将输入的64位明文块进行置换,打乱其顺序。

  • 分成左右两半: 将置换后的64位数据分成左右两部分,每部分32位。

  • 16轮迭代加密: 这是DES的核心,每轮都会进行以下操作:

    • 子密钥生成: 从56位主密钥中生成一个48位的子密钥(每轮都不同)。

    • F函数运算: 右半部分数据与当前轮的子密钥经过一系列的扩展(32->48)、异或(子密钥)、S盒替换(48->32)、P盒置换等复杂操作,产生一个32位的输出。

    • 异或: 将F函数的输出与左半部分数据进行异或操作。

    • 左右交换: 将异或后的结果作为新的右半部分,原右半部分作为新的左半部分(最后一轮不交换)。

  • 逆初始置换 (IP-1):16轮迭代完成后,将最终的左右两半数据合并,再进行一个与初始置换相反的逆置换。

DES子密钥生成

  • 密钥选择置换 1 (PC-1)

    • 首先,将输入的64位DES主密钥(虽然是64位,但实际只有56位是有效的,有8位是奇偶校验位,会被丢弃)。

    • 通过PC-1置换表,将其重排并选择出56位有效密钥。这56位密钥会被分成两个28位的半部分,分别命名为C0和D0。

  • 16轮循环左移:

    • 对于DES的16轮加密,每一轮都会对C和D进行循环左移操作。

    • 每轮的左移位数是预先定义好的,通常是1位或2位。例如,在第1、2、9、16轮中,各部分左移1位;在其他轮中,各部分左移2位。

    • 左移后得到的新的28位半部分,例如C_i 和 D_i,将用于下一轮的子密钥生成。

  • 密钥选择置换 2 (PC-2)

    • 在每一轮中,将当前轮的C_i 和 D_i (共56位) 组合起来。

    • 通过PC-2置换表,从中选择出48位,生成本轮使用的48位子密钥K_i。PC-2的作用是丢弃一部分位(8位)并重新排列剩下的位。

三重DES工作流程

加密过程:

  • 第一次加密 (E1): 明文数据首先使用密钥 K1 进行DES加密。

  • 第一次解密 (D1): 加密后的数据再使用密钥 K2 进行DES解密。

  • 第二次加密 (E2): 解密后的数据最后再次使用密钥 K1 进行DES加密。

为什么是解密而不是加密? 这种设计是为了兼容早期的单DES系统。如果 K1 = K2,那么 3DES 加密就等同于单DES加密(第一次加密和第一次解密会相互抵消,只剩下第二次加密)。

解密过程:

  • 第一次解密 (D1): 密文数据首先使用密钥 K1 进行DES解密。

  • 第一次加密 (E1): 解密后的数据再使用密钥 K2 进行DES加密。

  • 第二次解密 (D2): 加密后的数据最后再次使用密钥 K1 进行DES解密。

DES的缺陷

密钥长度过短;潜在的后门和S盒设计争议;DES存在一些弱密钥半弱密钥

*IDEA

分组长度为64位 密钥长度为128位(抗强力攻击能力比DES强),同一算法既可加密也可解密。

基本上只要知道他的三种运算:异或运算;整数模2^16加; 整数模2^16+1乘(IDEA的S盒)

AES加密流程

分组长度128字节

  • 10轮 用于128位密钥

  • 12轮 用于192位密钥

  • 14轮 用于256位密钥

a. SubBytes(字节替代)混淆
  • 这是一个非线性代换操作。

  • 数据块中的每个字节都会根据一个预定义的S盒(Substitution Box)进行独立的替换。S盒是一个256个字节的查找表,将每个输入字节映射到一个独特的输出字节。

b. ShiftRows(行位移)扩散
  • 这是一个线性置换操作。

  • 数据块被视为一个4×4的字节矩阵(16字节数据块,每行4字节)。

  • 矩阵的行会进行循环左移操作,且每行的位移量不同:

    • 第0行:不位移。

    • 第1行:循环左移1字节。

    • 第2行:循环左移2字节。

    • 第3行:循环左移3字节。

列混合也是扩散,但是比较繁琐

分组密码工作模式

1. ECB (Electronic Codebook) 模式 - 电子密码本模式
  • 工作原理: 这是最简单、最直接的模式。每个明文数据块都独立地用相同的密钥进行加密。

  • 主要缺陷(不安全):

    • 不隐藏数据模式: 如果明文中存在重复的数据块,加密后也会产生重复的密文块。这会泄露明文的模式,使得攻击者可以识别和操纵重复的数据,甚至进行替换攻击。

    • 不适合加密长数据: 尤其不适合加密图像、视频等具有大量重复模式的数据,因为加密后的图像会保留原始图像的轮廓。

2. CBC (Cipher Block Chaining) 模式 - 密码分组链接模式
  • 工作原理: CBC模式引入了反馈机制,使每个密文块都依赖于之前的明文块和密文块。

  • 关键概念: 初始化向量 (Initialization Vector, IV)。IV是一个与密钥独立、随机且不重复的128位(或与分组大小相同)的随机数。它在加密开始时与第一个明文块进行异或。

  • 主要缺陷:

    • 误差传播: 加密时一个密文块的错误会影响所有后续解密的明文块。解密时一个密文块的错误只会影响当前和下一个明文块。
3. CFB (Cipher Feedback) 模式 - 密文反馈模式
  • 工作原理: CFB模式将分组密码转换为流密码(Stream Cipher)。它不直接加密整个明文块,而是加密前面产生的密文,然后与明文进行异或。假设plaintext是j bit,那么他每次会移动IV寄存器里面的j bit,因此可能会造成错误传播。

4. OFB (Output Feedback) 模式 - 输出反馈模式
  • 工作原理: OFB模式也把分组密码转换为流密码,但与CFB不同的是,它将分组密码的输出反馈到移位寄存器中,而不是密文。

5. CTR (Counter) 模式 - 计数器模式
  • 工作原理: CTR模式也是将分组密码转换为流密码,但它使用一个不断递增的计数器(Counter)作为输入,每次加密计数器的值来生成密钥流。

RSA工作原理

Elgma工作原理

序列密码工作原理

同步序列密码: 密钥流的生成独立于明文和密文,只依赖于密钥和IV。发送方和接收方必须保持密钥流同步。

  • 例子:RC4

自同步序列密码: 密钥流的生成依赖于密钥和之前的密文位。这意味着接收方可以根据接收到的密文自动同步密钥流。

 线性反馈移位寄存器和状态转移图(自己勾起一下回忆)

以及对应的升级版

哈希函数工作原理以及作用

哈希函数(Hash Function),也称为散列函数或摘要函数,是一种将任意长度的输入数据(也称为“消息”)映射为固定长度输出(称为“哈希值”、“散列值”、“消息摘要”或“指纹”)的算法。

作用:数据完整性验证、口令(密码)存储、数字签名、MAC

常见的哈希算法: MD5 (已不安全,仅用于完整性校验)、SHA-1 (已不安全)、SHA-256、SHA-512 (SHA-2家族)、SHA-3。

Diffie-Hellman 密钥交换过程

首先,爱丽丝和鲍勃(以及潜在的窃听者伊芙)需要公开协商并同意使用两个大的公共参数:

  • 大素数 p: 一个非常大的素数,用作模数。

  • 生成元 g

离散对数问题是什么、圆锥曲线问题、大整数分解

给定一个循环群 G、它的一个生成元 g,以及群中的一个元素 y,找到整数 x 使得 g^x=y

这是离散对数问题在椭圆曲线上的变体。给定一个定义在有限域上的椭圆曲线 E、曲线上的一个基点 G、以及曲线上的另一个点 Q,找到整数 k 使得 Q=kG(即点 G 自加 k 次得到点 Q)。

给定一个非常大的合数 N(它是两个或多个大素数的乘积),找到它的所有素因子。

HMAC

完整性认证性的机制

  • 将密钥填充或截断到哈希函数块大小。

  • 将填充后的密钥与一个内部填充(IPAD)进行异或。

  • 将结果与消息进行拼接,然后进行一次哈希运算。

  • 将填充后的密钥与一个外部填充(OPAD)进行异或。

  • 将上一步的结果与第一次哈希的输出进行拼接,再进行第二次哈希运算。

数字签名

  • 签名过程:

    • 发送方(签名者)首先对原始消息计算一个哈希值(消息摘要)。

    • 然后,发送方使用自己的私钥对这个哈希值进行加密。加密后的哈希值就是数字签名。

    • 发送方将原始消息和数字签名一起发送给接收方。

  • 验证过程:

    • 接收方收到消息和数字签名后,首先用发送方的公钥解密数字签名,得到一个哈希值。

    • 同时,接收方对接收到的原始消息也计算一个哈希值。

    • 如果这两个哈希值完全一致,则说明:

      • 消息完整(未被篡改),因为任何篡改都会导致哈希值不同。

      • 消息确实是由声称的发送方发送的(认证),因为只有拥有对应私钥的人才能生成有效的签名。

      • 发送方无法否认自己发送过这条消息(不可否认性),因为只有他持有生成签名的私钥。

数字证书

  • 用户/实体生成密钥对:一个用户或服务器生成一个公钥和私钥对。

  • 证书申请:用户将自己的公钥和身份信息(如域名、组织名称等)提交给CA。

  • CA验证并签名:CA验证申请者的身份。如果验证通过,CA会用自己的私钥对包含用户公钥和身份信息的整个数据块进行数字签名,形成数字证书。

  • 证书发布:CA将签发后的数字证书发给用户。用户可以将此证书(包含公钥)公开给他人。

区块链安全的技术

  • 密码学哈希函数:

    • 工作原理: 区块链中的每个区块都包含前一个区块的哈希值(头部哈希)。任何对历史数据的篡改都会改变对应区块的哈希值,进而改变后续所有区块的哈希值,这种变化很容易被检测到。

    • 作用: 确保数据完整性不可篡改性

  • 数字签名(非对称加密):

    • 工作原理: 区块链上的每笔交易都由发起者使用其私钥进行数字签名。只有拥有正确私钥的人才能发起有效交易。

    • 作用: 确保交易的认证性不可否认性

  • 去中心化与分布式共识:

    • 工作原理: 区块链没有中央服务器,所有交易和区块都分布在网络中成千上万的节点上。新区块的添加需要通过共识机制(如工作量证明 PoW、权益证明 PoS)由网络中的多数节点确认。

    • 作用: 极大地提高了系统的抗审查性抗单点故障能力。攻击者需要控制网络中绝大多数(如51%)的计算能力才能篡改数据,这在大型公共区块链中几乎不可能实现。

  • 默克尔树(Merkle Tree):

    • 工作原理: 每个区块中的所有交易都会被组织成一个默克尔树,树的根哈希(默克尔根)包含在区块头中。

    • 作用: 允许高效地验证区块中某个交易的存在和完整性,而无需下载整个区块的所有交易。

双因素验证

双因素验证 (2FA) 是一种安全机制,要求用户提供两种不同类型的凭证来验证其身份,才能获得对系统、应用程序或账户的访问权限。这比单因素验证(只使用密码)更安全,因为即使一个因素被攻破,攻击者也难以获得访问权限。

工作原理: 2FA通常结合以下三种类型中的两种:

  1. 你所知道的: 密码、PIN码、安全问题答案等。

  2. 你所拥有的: 手机(接收短信验证码)、硬件令牌(U盾、YubiKey)、智能卡、认证器App(如Google Authenticator)。

  3. 你所是: 生物特征(指纹、面部识别、虹膜扫描)

零信任安全模型

零信任(Zero Trust) 是一种网络安全理念和架构,其核心原则是**“永不信任,始终验证”(Never Trust, Always Verify)**。

侧信道攻击

它不直接攻击密码算法本身,而是通过分析加密设备在执行密码操作时泄漏的物理信息来推断秘密密钥或其他敏感数据。

电磁辐射、功耗分析

访问控制

近世代数

群:封闭性、结合律、单位元、逆元

子群:一样

环:

编译原理六步骤

1. 词法分析(将代码分割成token);2. 语法分析(构建语法树);3. 语义分析(进行类型检查等);4. 中间代码生成与优化;5. 目标代码生成

访问控制

信息安全中的一个核心概念,指的是“在计算机系统中,谁(主体)可以对什么(客体)执行何种操作(权限)”。它的目标是确保系统资源只能被授权的用户或进程,以授权的方式进行访问。常见的访问控制模型包括:自主访问控制(DAC)、强制访问控制(MAC)以及目前最广泛使用的基于角色的访问控制(RBAC),后者通过为用户分配角色来简化权限管理。

软件安全

一种主动的安全理念和实践,强调在软件开发的整个生命周期(SDLC)中构建安全,而不是在开发完成后进行“修补”。它涉及在需求、设计、编码、测试和部署等各个阶段融入安全活动,例如:在设计阶段进行威胁建模,在编码阶段遵循安全编码规范以避免常见漏洞(如缓冲区溢出、SQL注入),以及在测试阶段使用静态/动态代码分析(SAST/DAST)和渗透测试,部署阶段采用审计。其目标是交付本身就具有安全弹性的软件。

Paxos共识 (Paxos Consensus)

它通过一个“两阶段提交”式的协议(Prepare-Accept阶段)来实现,引入了提案者(Proposer)和接受者(Acceptor)等角色。

栈溢出

栈上的局部变量(缓冲区)被溢出后,最常覆盖的目标是存储在它高地址处的函数返回地址

ROP

操作系统引入了 NX (No-Execute) / DEP (Data Execution Prevention) 保护,使得栈、堆等数据区域的内存不可执行。

利用程序本身已有的、位于代码段(可执行)的代码片段。这些代码片段通常以 ret 指令结尾,被称为 gadget

常见保护机制及其绕过

  • NX / DEP (数据执行保护)

    • 作用:禁止数据页(如栈、堆)的代码执行。

    • 绕过:使用 ROP 技术。

  • Canary (栈金丝雀)

    • 作用:在函数序言(prologue)中,向栈上返回地址前的位置插入一个随机的数值(称为 Canary)。在函数返回前,检查这个数值是否被改变。

    • 绕过泄露 Canary:如果存在格式化字符串等漏洞,可以先泄露出 Canary 的值,然后在溢出时用同样的值覆盖回去,欺骗检查机制

  • ASLR (Address Space Layout Randomization - 地址空间布局随机化)

    • 作用:程序每次启动时,其栈、堆、共享库(如 libc.so)的基地址都会被随机化。这使得攻击者无法预知 ROP gadgets 或 system 函数的绝对地址。

    • 绕过计算偏移:由于同一个库文件内部函数之间的相对偏移是固定的,一旦知道了其中一个函数的实际地址,就可以通过减去它在原文件中的偏移,计算出这个库的基地址。之后,就可以计算出 system 等任何其他函数的实际地址。

  • PIE (Position-Independent Executable - 位置无关可执行文件)

    • 作用:这是针对程序主文件的 ASLR。如果开启了 PIE,程序自身的代码段(.text)基地址也会被随机化。

    • 绕过:方法与绕过 ASLR 类似,需要先泄露出程序自身的某个地址,然后计算出主程序的基地址,才能找到主程序中的 gadgets。

国密

  • SM2 - 椭圆曲线公钥密码算法:属于非对称加密算法,用于替代 RSA 算法。它主要用于数字签名、密钥交换和公钥加密。

  • SM3 - 哈希算法:属于密码杂凑算法,用于替代 MD5/SHA-1/SHA-256。它产生一个 256 位的哈希值,用于验证数据完整性、数字签名等。

  • SM4 - 分组密码算法:属于对称加密算法,用于替代 DES/AES。它是一个分组密码,用于无线局域网、数据加密等场景,保障数据保密性。

  • SM9 - 标识密码算法:一种特殊的公钥密码体系,用户的公钥可以直接是其身份标识(如邮箱、手机号),无需提前申请数字证书,简化了密钥管理。

bcrypt

自动加盐 (Salting):在哈希计算前,bcrypt 会自动生成一个随机的“盐值”(Salt),并将其与密码结合。这意味着即使两个用户设置了完全相同的密码,由于盐值不同,他们存储在数据库中的哈希值也是完全不同的。这有效抵御了“彩虹表”攻击。

椭圆曲线密码 (Elliptic Curve Cryptography, ECC) 工作原理

  • 定义一条曲线和基点:首先,所有参与者都公开约定使用一条特定的椭圆曲线方程(如 y² = x³ + ax + b)和一个曲线上的起始点,称为基点 G

  • 生成私钥:用户 Bob 随机选择一个非常大的整数 k 作为自己的私钥。这个 k 是绝对保密的。

  • 生成公钥:Bob 通过在椭圆曲线上对基点 G 进行 k 次“点加”运算,得到一个新的点 P。即 P = k * G (这里的乘法是椭圆曲线上的特殊运算,不是常规乘法)。这个点 P 就是 Bob 的公钥,可以公开给任何人。

零知识证明

零知识证明(常被误称为零知识加密)是一种密码学协议,它允许一方(证明者 Prover)向另一方(验证者 Verifier)证明自己知道某个秘密信息,而无需透露这个秘密信息本身以及任何其他相关信息。

可验证计算

可验证计算是一种允许一个计算能力较弱的客户端(验证者 Verifier)将一个复杂的计算任务外包给一个强大的、但可能不被信任的服务器(证明者 Prover),并能够高效地验证服务器返回结果是否正确的技术。

差分隐私

通过向查询结果中添加经过精确计算的随机噪声 (Noise),使得“包含某个特定用户的数据集”和“不包含该用户的数据集”在进行相同查询时,其返回结果的概率分布几乎没有差别。

群签名

群签名是一种特殊的数字签名方案,它允许一个群组中的任何一个成员,以匿名的方式代表整个群组对消息进行签名。

密钥生命周期

生成;分发;存储;使用;备份;更新;停用;撤销

http://www.dtcms.com/a/284002.html

相关文章:

  • 解锁 iOS 按键精灵辅助工具自动化新可能:iOSElement.Click 让元素交互更简单
  • springmvc跨域解决方案
  • RAG实战指南 Day 18:Chroma、Milvus与Pinecone实战对比
  • 基于springboot+vue+mysql框架的工作流程管理系统的设计与实现(源码+论文+PPT答辩)
  • 23种设计模式--#2单例模式
  • 从AWS MySQL数据库下载备份到S3的完整解决方案
  • ros2 标定相机
  • 企业级网络综合集成实践:VLAN、Trunk、STP、路由协议(OSPF/RIP)、PPP、服务管理(TELNET/FTP)与安全(ACL)
  • CKS认证 | Day6 监控、审计和运行时安全 sysdig、falco、审计日志
  • Redis主从复制数据同步实现原理详细介绍
  • UML用例规范,use case diagram
  • 灵易智模中的重构导出可以做什么
  • Jmeter使用 -1
  • c++项目从aws服务器转移到mac编译
  • Spring Boot 自动配置:从 spring.factories 到 AutoConfiguration.imports 的演变
  • 深入理解 SemaphoreSlim 在.NET Core API 开发中的应用
  • 【DOCKER】综合项目 MonitorHub (监控中心)
  • Java集合处理库——collection-complete
  • 模型材质一键替换~轻松还原多种三维场景
  • Jmeter的安装
  • ESP32——基于idf框架开发I2C设备
  • Redis红锁中的看门狗机制
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘flask’问题
  • 【SpringBoot】实战-开发接口-用户-登录
  • APIs案例及知识点串讲(中)
  • docker--安装--原理
  • 寻找数组中的多数元素:HashMap方法解析
  • 【无标题】构建黑洞虚维度空间的完整理论
  • COZE官方文档基础知识解读第五期 —— 插件
  • Android默认背光亮度配置说明