有关白盒加密
白盒密码技术白皮书
有关白盒的概念
其实白盒黑盒之类概念其实是软件保护方面的概念,在很多方面都有应用,例如
黑盒:
传统的加密技术是默认假定处于黑盒中的,也就是假定攻击者无法获得密钥。具体而言,认为攻击者并未实质性地接触到密钥(执行加密或者解密的算法)或者任何内部操作,仅仅能观察到一些外部信息或者操作,这些信息包括系统内的明文(输入)或者密文(输出),并且认为代码执行以及动态加密不可被观察。
灰盒:
灰盒认为攻击者可以实质性地接触到部分密钥或者泄露的信息(也就是所谓的边信道信息)。边信道分析攻击(Side Channel Analysis, SCA)利用了从密码系统运行过程中泄露的信息。泄露信息是通过被动观察时间信息、功率消耗、电磁辐射等而获得的。
白盒:
白盒即攻击者已经完全控制了整个操作过程且对此完全可见,攻击者可以自如地观察动态密码运行过程,并且内部算法的详细内容完全可见,可随意更改。举例而言,只要软件是在本地运行的,攻击者就可以通过调试器运行程序,并观察软件运行的过程。所有涉及解密部分的代码也就一览无余了。定义如下:
攻击者对主机和软件具有完全控制权
软件动态执行过程是可见的
加密算法内部细节完全可见、可修改
白盒密码
白盒密码技术是假定攻击者已经完全控制了整个加密的操作过程且对此完全可见,在这种情况下处理面临的严重威胁。黑客们可以不受限制的观察动态密码的运行过程(拥有示例密钥),并且内部算法的详细内容是完全可见,可随意更改。
尽管白盒密码技术的方法完全透明,但是它将密码进行了组合使得密钥不容易被提取。总而言之,白盒加密是能抵御白盒攻击的加密技术。
密钥明文通过白盒加密后会受到保护,它不会直接出现在内存中,所以不会被提取到。
白盒攻击
白盒攻击(White-Box Attack)是指攻击者对加密系统的运行环境和可执行程序拥有完全控制,可观察和修改任意的内部操作和数据,包括设备的CPU、寄存器、内存等数据等等,如图4所示。在白盒攻击环境下,密码算法的一般软件实现方式通常会导致密钥通过内存等途径直接泄露。
白盒攻击是三种攻击类型中最强的一种,且涉及到密码算法本身的理论安全性及其工程实现的应用安全性。如何设计能够抵抗白盒攻击,保护白盒环境下密钥和敏感数据不被攻击者窃取的有效方案是目前密码技术领域的一个重要问题。
将攻击类型和技术对应
白盒加密基本思想
白盒加密属于对称加密,是指能够在白盒环境下抵御攻击的一种特殊的加密方法。首先举个例子帮助理解,这里引用最早提出白盒加密实现方法的大牛Chow在论文《White-Box Cryptography and an AES》中所说的,“举一个极端的例子,就是将AES加密用一个简单的查表来表示,那么AES128可以用一个
bytes的表格替换,这样一来,AES就变成了一个完全的黑盒。”听起来很简单吧,但是这是极端情况,一个如此大的表,没有硬盘能够装得下,所以在具体算法实现的时候必须有针对性的进行优化。
核心思想:
核心思想是混淆,混淆的意思就是让人看不懂,如果说加密是隐藏信息,混淆就是是扰乱信息。它们之间的最大区别是,加密就是信息放进了保险箱,但是一旦我有了钥匙,我就能打开这个保险箱。而混淆则是让信息以一种完全无法理解的形式存在,尽量让人无法理解中间的过程(也就是只能看到输入和输出,但无法理解结果是如何得到的),但不影响信息本身发挥作用(一个加了密的程序,在源码未解密前是无法执行的,但是经过混淆的程序,可以正确执行)。
特点
传统的加密算法中算法和密钥是完全独立的,也就是说算法相同密钥不同则可以得到不同的加密结果,但白盒加密将算法和密钥紧密捆绑在了一起,由算法和密钥生成一个加密表和一个解密表,然后可以独立用查找加密表来加密,用解密表解密,不再依赖于原来的加解密算法和密钥。
优势:
正是由于算法和密钥的合并,所有可以有效隐藏密钥,与此同时也混淆了加密逻辑。具体而言白盒加密的一种实现思路就是将算法完全用查表来替代,因为算法已知,加密的密钥已知。所以将算法和密钥固化成查表表示,这就是白盒密钥的实现过程。
缺点:
有利必有弊,白盒加密由于需要将加密和解密的算法固化到表格中,势必要增加空间开销,因为要保存这一系列的表。具体在实现的过程中,大部分情况需要用时间换空间,需要对具体的实现算法进行优化,也就是样将大表分解成若干个小表,增加了查表的次数即时间开销但是减少了表占用的空间。
白盒密码技术
完全理想的白盒密码安全需要从基础理论到工程实现全方位的突破。主要的白盒密码技术包括以下几种:
混淆技术
通过密钥与算法的混淆,使得交给用户的密码功能是有限的,用户无法获取其他密码功能。一切都是算法,没有密钥或者密钥可以公开,是混淆理论发展的可能方向。把一个混淆的密码功能移交给用户的时候,所有的原理、系统结构和密钥都可以对用户公开。现代的非对称密码给出了这样的示例,例如,用户只能加密,不能解密;用户只能验证签名和不能仿造签名。混淆密码机制需要在非对称的密码理论上有更大的突破,区分出不同的独立的密码功能,确保一个密码功能不影响其他密码功能的安全,从而产生安全的完全白盒化的密码应用。
密钥隐藏技术
密钥隐藏技术是白盒密码的另一个重要思路,其方法是将需要保护的密钥隐藏到复杂的代码中,隐藏在系统中。直接的密钥隐藏技术一般采用密钥拆分技术,通过改变算法流程,将用户的密钥拆分成多个无关的子密钥,隐藏到系统的不同地方。需要密码执行的时候通过调用看似无关的密码函数计算出需要的密码计算结果。密钥分散隐藏到代码中是另一种密钥隐藏思路,需要有好的算法实现密钥与代码的混淆。通过代码混淆使得敌手通过代码分析无法获得算法和密钥,其安全的假设就是完全复制全部的代码是困难的。
尽管密钥隐藏技术依赖工程实现,难以做到完全白盒,但相关密钥隐藏技术已经成为现代密码系统安全的一种必备手段。特别是软件密码模块,不得不使用多种密钥隐藏技术来保护密钥安全。
密钥攻击容忍技术
当密钥隐藏技术被敌人破解的时候,我们是否有能力保证,即使敌手获得了部分密钥,我们的密码系统仍旧是安全的。密钥攻击容忍就是在这样一种白盒假设下的技术思考。密钥攻击容忍是在密钥保护,密钥检测和自毁的基础上对密钥安全的进一步延伸。
子密钥不影响密钥安全的密钥拆分技术是密钥攻击容忍技术的一种技术思路。通过将密钥拆分成多个无关的子密钥,并保证即使敌手获得部分子密钥也不影响原密钥的安全就可以构成一种密钥攻击容忍的解决方案。在密码算法设计上就具备密钥攻击容忍就更具有基础性意义。
多方协同密码计算
多方协同计算的本质就是在不信任的个体间进行协同,产生出各自满意的结果。在可信体系的支持下,协同计算是简单的。以可信计算为基础的可信体系能够确保信息的真实、完整、抗抵赖和合法使用,协同计算相对容易。当信任体系被打破或难以建立的时候,也就是现在的零信任假设下,我们的信任又无法建立,如何合作计算就成为多方协同密码计算的主要研究方向。
同态密码就是两方协同密码计算的代表性工作。甲方通过加密将数据交给乙方,乙方在完全不知道甲方信息内容的前提下,帮助甲方处理数据,返回处于密文状态的处理结果。甲方对处理结果进行解密得到明文的结论。利用同态密码的双方协作不需要建立强的信任关系,将原来加密隐藏的功能与委托计算的功能融合起来,使得对方能够进行计算而无法了解信息内容。
多方协同密码技术,是密码技术从通信保密到计算安全的一种思想变革,需要基础理论研究的大力支持。开放的安全多方协同计算必然会用到非对称的密码机制,以确保对某一方面的密码功能优势。我们要将一种数据的计算能力交给敌手,同时还用保证我们的交给敌手处理的信息的安全。这也是白盒化密码的基本思路。
从理论上说,签名和验签功能的分离就是一种功能拆分的非对称多方密码计算的范例。验证签名的代码和密钥可以完全开放,而只需要保护好自己的签名私钥就行。代理重加密技术可以让一方对信息进行重新加密而不需要了解信息内容;基于身份的加密能够确保只有拥有相应身份的人才能阅读信息。诸多非对称密码学的进展使我们有望在不远的将来拥有更多的多方安全密码计算的手段。
白盒密码构造
白盒密码的一般构造方法通常基于标准密码算法白盒化策略,通过将标准密码算法中的密钥与算法实现融合和混淆,使得密钥与加密程序不可区分,即使攻击者掌握了对白盒密码系统的控制能力,也无法进一步获取原始的密钥信息。
标准密码算法白盒化又可根据密钥是否可更新分为静态白盒技术与动态白盒技术两种
静态白盒:白盒生成后密钥是确定的,更新密钥需要重新生成并分发白盒。
动态白盒:白盒与密钥不完全绑定,可通过对输入中经白盒处理后的密钥进行替换实现密钥的更新。
白盒密码技术发展
白盒密码系统,包括入侵容忍的密码和密码应用系统,多方安全的密码协同,是密码系统发展的一个重要方向。密码系统应该确保即使攻击者获得系统结构和部分安全信息,密码系统依旧安全可控。
白盒密码技术就是在开放条件下的一种密码技术,采用的是开放的假设,具备更好的互联网适应能力。
开放的、白盒化的密码应用技术也是未来的重要方向。通过开放体系结构让建设参与者和使用者明确自己的责任和义务,更好地参与到密码应用系统的安全中来是大型密码应用的基本要求。比特币所依赖的区块链技术,就是一种白盒安全技术的典范。比特币的区块链系统不仅将原理全部公开,其运行的源代码也是完全公开的。这种在完全“开放”的环境下保证系统的安全也许是未来密码应用的主要方向。
SOTP密码算法体制
SOTP(Super One-Time-Password)密码算法体制是一种新型白盒密码。
SOTP算法根据用户密钥信息设计均匀、非线性的单项扩散变换,保证由配置数据到用户密钥的不可逆性,根据参数配置信息生成相应的密码部件,构建用于加密的密码墙
具体而言,密钥通过特定算法生成与之一一对应的配置参数,配置参数确定了密码墙中的密码砖、数据回流、交织层等各个组件的信息。根据配置信息生成的密码墙即为与密钥唯一对应的白盒加密算法,可理解为将标准加密算法中的各类组件和过程进行随机重组,生成与密钥唯一对应的独一无二的新算法。密码墙的示例结构如图所示
通过密钥生成与密钥绑定的独一无二的密码墙(即白盒算法)后,可将数据输入密码墙中以实现加密,加密步骤如图所示。攻击者无法通过密码墙恢复出密钥信息,可以抵抗白盒密钥攻击。
参考资料
【密码篇】白盒加密基本思想
物联网场景下的白盒加密技术
密码技术的现状与白盒化发展趋势
相关文章:

有关白盒加密
白盒密码技术白皮书 有关白盒的概念 其实白盒黑盒之类概念其实是软件保护方面的概念,在很多方面都有应用,例如 黑盒: 传统的加密技术是默认假定处于黑盒中的,也就是假定攻击者无法获得密钥。具体而言,认为攻击者并…...
C#学习系列之image控件配合ffmpeg播放视频(bitmap转image)
C#学习系列之image控件配合ffmpeg播放视频(bitmap转image)啰嗦ffmpeg输入格式与输出格式bitmap数据在image控件上显示数据转化总结啰嗦 关于音视频解码问题,采用海思解码库进行解码,存在C#托管调用动态库,会出现卡顿的…...

电容笔和Apple pencil有什么区别?开学季电容笔排行榜
与苹果的 Pencil相比,市面上常见的电容笔在压感上是没有具备重力压感,只具备着一种倾斜压感。对于绘画没有过高要求的话,其实一支普通的平替电容笔,就能为我们解决日常很多问题。它不仅可以用在办公上,也可以用在笔记、…...

【蓝桥杯每日一题】递归算法
🍎 博客主页:🌙披星戴月的贾维斯 🍎 欢迎关注:👍点赞🍃收藏🔥留言 🍇系列专栏:🌙 蓝桥杯 🌙我与杀戮之中绽放,亦如黎明的花…...
java 寻找2020
题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小蓝有一个数字矩阵,里面只包含数字 0 0 和 2 2。小蓝很喜欢 2020 2020,他想找 到这个数字矩阵中有多少个 2020 2020 。 小蓝只关注三种构成 …...
1.1 小白黑群晖构建,硬件推荐,硬件选购教程
构建一台黑群晖需要购买:CPU主板、散热器、内存条、机箱、电源、硬盘、网卡(可选)。物理机安装若需硬解需选择918/920此类机型系统进行安装。关联教程:黑群晖安装中的报错:https://guoqing.blog.csdn.net/article/deta…...

实验三、数字PID控制器的设计
实验三、数字PID控制器的设计 --- 直流闭环调速实验 一、实验目的 1.理解晶闸管直流单闭环调速系统的数学模型和工作原理;. 2. 掌握PID控制器参数对控制系统性能的影响; 3. 能够运用MATLAB/Simulink软件对控制系统进行正确建模并对模块进行正确的参数设置; 4.…...

python List和常用的方法
List:列表中包含多个数据,数据之间使用逗号分隔,索引从0开始。 空列表: dir:查看列表的所有方法 List常用方法:insert、append,extend、del、remove、pop、clear、count、index 增加insert(索引…...

PMP证书要怎么考,含金量怎么样?
对于新改版的PMP提纲,很多人都不知道如何去备考,这里我就总结一些经验,希望能帮助到大家!! 一,学习内容及考试形式? 学习内容:《PMBOK》项目管理知识体系指南,建议大家…...

MySQL实战解析底层---事务隔离:为什么你改了我还看不见
目录 前言 隔离性与隔离级别 事务隔离的实现 事务的启动方式 前言 和数据库打交道的时候,总是会用到事务最经典的例子就是转账,你要给朋友小王转 100 块钱,而此时你的银行卡只有 100 块钱转账过程具体到程序里会有一系列的操作࿰…...

变更数据捕获(CDC)
从广泛意义上说,全球许多企业每天都需要通过频繁的数据批量处理与加载,来定期将数据从一个数据库迁移到另一个数据库(或数据仓库)。这类定期批量加载的工作,往往既耗费时间,又会消耗原始系统的大量处理能力。因此,管理…...

【移动端表格组件】uniapp简单实现H5,小程序,APP多端兼容表格功能,复制即用,简单易懂【详细注释版本】
前言: 由于最近需要做移动端的项目 有个pc端的后台系统里面需要移一部分页面过来 而里面就有很多的表格,我就开始惯例网上先找前人栽的树,我好乘凉 然后找了一圈发现,不管是主流的移动端ui库或者网上自己写的帖子,或者…...

电子技术——CMOS 逻辑门电路
电子技术——CMOS 逻辑门电路 在本节我们介绍如何使用CMOS电路实现组合逻辑函数。在组合电路中,电路是瞬时发生的,也就是电路的输出之和当前的输入有关,并且电路是无记忆的也没有反馈。组合电路被大量的使用在当今的数字逻辑系统中。 晶体管…...

【C++】C++11 新特性
目录 1.列表初始化 1.1. C98中使用{}初始化的问题 1.2. 内置类型的列表初始化 1.3. 自定义类型的列表初始化 2. 变量类型推导 2.1. 为什么需要类型推导 2.2. decltype类型推导 2.2.1 为什么需要decltype 2.2.2. decltype 3. 对默认成员的控制(default、delete) 3.1. …...
JPA 相关注解说明
jpa相关注解 JPA(Java Persistence API)是一种Java规范,定义了一套标准的对象关系映射(ORM)API,用于将Java对象映射到关系型数据库中。JPA旨在统一各种ORM框架之间的差异,提供一种标准化的ORM解…...

SAP 生产订单/流程订单中日期的解释
SAP 生产订单/流程订单中日期的解释 基本开始日期:表示订单的开始日期 基本完成日期:表示订单的完成日期 我们在输入基本开始日期和基本完成日期时需要关注 调度 下面的“类型”,其中有向前、向后、当天日期等: 调度类型 为向前…...

Java设计模式笔记——七大设计原则
系列文章目录 第一章 Java 设计模式之七大设计原则 文章目录系列文章目录前言一、单一职责原则1.案例分析2.改进二、开闭原则1.案例分析2.改进三、里氏替换原则1.案例分析2.改进四、依赖倒转原则五、接口隔离原则1.案例分析2.改进六、合成复用原则1.案例分析2.改进七、迪米特原…...

记录第一次接口上线过程
新入职一家公司后,前三天一直在学习公司内部各种制度文化以及考试。 一直到第三天组长突然叫我过去,给了一个需求的思维导图,按照这个需求写这样一个接口, 其实还不错,不用自己去分析需求,按照这上面直接开…...

时序预测 | MATLAB实现Rmsprop算法优化LSTM长短期记忆神经网络时间序列多步预测(滚动预测未来,多指标,含验证Loss曲线)
时序预测 | MATLAB实现Rmsprop算法优化LSTM长短期记忆神经网络时间序列多步预测(滚动预测未来,多指标,含训练和验证Loss曲线) 目录 时序预测 | MATLAB实现Rmsprop算法优化LSTM长短期记忆神经网络时间序列多步预测(滚动预测未来,多指标,含训练和验证Loss曲线)效果一览基本描…...
如何利用Level2行情数据接口追板和交易股票?
十档行情看得更深的A股行情软件,我们在盘口数据中可以看到,买一到买五以及卖一到卖五,共10个价位的挂单情况,但基于上证所的level-2行情软件,视野则扩展到了买一到买十以及卖一到卖十数据,无疑比所有免费软…...
mongodb源码分析session执行handleRequest命令find过程
mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程,并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令,把数据流转换成Message,状态转变流程是:State::Created 》 St…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...

免费数学几何作图web平台
光锐软件免费数学工具,maths,数学制图,数学作图,几何作图,几何,AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...