从物理攻击到云端信任:让我们一起了解可信执行环境与机密计算技术栈作为一个Java后端开发,以往在数据安全领域,我们习惯于讨论静态加密(at-rest)和传输加密(in-transit),比如各种加密算法、https。然而在接触大数据与隐私计算后,才知道其实一直有一个长期存在的痛点是——数据在计算过程中,即”使用中(in-use)”的状态。当数据被加载到内存中进行处理时,它通常是以明文形式存在的,这使其暴露在各种高级攻击之下。可信执行环境(TEE)正是为了解决这一根本问题而出现的技术。
本文将深入探讨内存数据面临的主要威胁,并详细解析以Intel为代表的主流硬件厂商如何通过TME、SGX和TDX等技术栈构建机密计算环境,最后对业界的几种主流方案进行梳理和对比。
一. 威胁模型:内存中数据的”裸奔”风险在讨论解决方案之前,我们必须清晰地定义问题。针对内存数据的攻击大致可分为两类:物理攻击和软件攻击。
1. 物理攻击 (Physical Attacks)指攻击者能够物理接触到硬件设备。这类攻击的目标是直接从硬件中把数据”抠”出来。
冷启动攻击(Cold Boot Attack:一个经典的攻 ...
谁来保证InnoDB的原子性、一致性与持久性的?一、事务的 ACID 特性与日志的角色InnoDB中的事务完全符合 ACID 特性,即
● 原子性:原子性是指整个数据库事务是不可分割的工作单位。只有 事务中所有的数据库操作都执行成功,才算整个事务成功。如果事务中任何一个操作执行失败,则已经执行成功的操作也必须撤销,将数据库状态退回到执行事务之前。● 一致性:事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。● 隔离性:事务的隔离性要求每个读写事务的对象对其他事务的操作对象能相互分离,即在事务提交前对其他事务不可见。● 持久性:事务一旦提交,其结果是永久性的。即使发生宕机等故障,数据库也能将数据恢复。这种保证,是从事务角度来保证结果的永久性的。不是说,所有的硬盘都损坏也可以保证数据不丢失。
事务的隔离性是由 锁、MVCC实现的。而原子性、一致性和持久性,则是由 redo log 和 undo log 协同实现的:
**原子性 (Atomicity)**:主要由 undo log 来保证。当事务需要回滚时,系统会利用undo log记录的”反向”操作,将数据恢复到事务开始前的状态 ...
Kubernetes笔记【历史学习文档】一、Kubernetes的前世看似很新(相对于刚出现时来说),但它却是谷歌十几年以来大规模应用容器技术的经验积累和升华的重要成果。确切地说,Kubernetes是谷歌严格保密十几年的秘密武器——Borg的一个开源版本。Borg是谷歌的一个久负盛名的内部使用的大规模集群管理系统,它基于容器技术,目的是实现资源管理的自动化,以及跨过个数据中心资源利用率的最大化。十几年以来,谷歌一直通过Borg系统管理者数据庞大的应用程序集群,由于谷歌员工都签署了保密协议,即使离职也不能泄露Borg的内部设计,所以外界一直无法了解关于它的更多信息。直到 2015 年 4 月,传闻许久的Borg论文发布,伴随着Kubernetes的高调宣传被谷歌首次公开。
Borg就是一个喷气式飞机的驾驶系统,非常的专业和高大上,他适用于谷歌这样的大公司,它有几百万的机器。Kubernetes是一个它的简化版,它是一辆设计优良的轿车,它适合中小型公司,更方便的用它来调度自己的集群。
但即使是简化版,K8s的 go源代码量超过 430 万行(总代码量已经超过 520 万行)
二、Kube ...
Argon2密码哈希算法深度解析:原理、实现与实战应用引言做后端开发这些年,密码存储一直是个让人头疼的问题。早期项目用MD5,后来知道不安全了改SHA-256,再后来听说要加盐,又搞了SHA-512+随机盐。但总感觉心里不踏实,直到遇到了Argon2。
这篇文章不是简单的API调用教程,而是要把Argon2的底层原理掰开了讲清楚,告诉你为什么它比传统哈希算法安全,以及在实际项目中怎么用。
第一部分:问题背景 - 为什么需要Argon21.1 传统哈希算法的根本问题我们先看看为什么SHA-512这类算法在密码存储上有天然缺陷:
123456789101112131415import hashlibimport time# SHA-512的计算速度测试def test_sha512_speed(): password = "user_password_123" salt = "random_salt_xyz" start_time = time.time() for i in range(1000000): # 10 ...
Java监视器有等待队列,为什么synchronized还是非公平锁?之前在看synchronized的源码时发现了一个有趣的问题:既然Java的监视器(Monitor)底层有等待队列(Entry Set)来管理竞争锁的线程,那为什么synchronized还是实现不了公平锁呢?
其实准确来说,不是”实现不了”,而是synchronized从设计之初就选择了性能和简便性,所以压根没打算做成公平锁。
监视器的基本结构每个Java对象都关联着一个监视器,包含几个关键部分:
Owner: 当前持有锁的线程
Entry Set: 等待获取锁的线程队列
Wait Set: 调用wait()后进入等待状态的线程队列
线程获取synchronized锁的流程:
锁没人用(Owner为空)→ 直接拿到锁
锁被占用 → 进入Entry Set排队等待
synchronized为什么是非公平的?虽然有Entry Set这个队列,但synchronized的锁分配策略就是非公平的,主要原因:
1. 新线程可以”插队”这是最关键的点。当锁释放时,新来的线程可以直接和Entry Set中等待的线程竞 ...
操作系统密码存储机制详解:Linux、macOS、Windows密码管理深度分析引言用户密码是操作系统安全的第一道防线,不同操作系统采用了各自独特的密码存储和管理机制。本文将深入分析Linux、macOS和Windows三大主流操作系统如何安全地保存管理员密码,以及它们采用的加密算法和安全防护措施。
1. Linux系统密码存储机制1.1 传统的/etc/passwd文件在早期的Unix系统中,用户密码直接存储在/etc/passwd文件中,但这存在严重的安全隐患,因为该文件对所有用户可读。
12# 传统格式(已不推荐)root:x:0:0:root:/root:/bin/bash
1.2 现代的Shadow密码系统现代Linux系统使用Shadow密码系统,将密码哈希值存储在/etc/shadow文件中:
12# /etc/shadow文件格式root:$6$salt$hashedpassword:18000:0:99999:7:::
字段解释:
用户名:root
密码哈希:$6$salt$hashedpassword
最后修改日期:18000(从1970年 ...
关于隐私集合求交 (PSI) 的认识隐私集合求交(Private Set Intersection, PSI)是密码学和数据工程交叉领域中的一个经典问题:两个或多个参与方,如何在不泄露各自私有数据的前提下,计算出他们数据集的交集?
这个需求在现实世界中非常普遍,例如:
广告归因:广告平台和广告主需要知道哪些观看了广告的用户最终完成了购买,但双方都不想直接暴露自己的全部用户列表。
联系人发现:手机应用想知道你的通讯录里有哪些人也注册了该应用,但你不想上传整个通讯录。
安全情报共享:多个情报机构希望找出共同的嫌疑人名单,但各自的名单都是高度机密的。
本文将梳理几种主流的 PSI 实现方案,分析它们的设计思路、性能、安全性,以及各自的适用场景。
核心密码学概念:安全模型在深入了解各种 PSI 协议之前,我们必须先理解评估其安全性的两个基本模型。这决定了一个协议能抵御什么样的攻击者。
半诚实模型 (Semi-Honest / Honest-but-Curious)
定义:这是密码学协议中最常见的威胁模型。在此模型中,参与方会完全遵守协议的每一步指令,如同一个诚实的学生。但是 ...
我想刚接触大数据领域的同学,常常被一堆名词砸晕:Hadoop、HDFS、YARN、Hive、Spark、HBase… 【东西也太多了吧】,个个看起来都很有用,但彼此之间到底是什么关系?跑一个作业的时候,数据和指令又是在它们之间如何流转的?
这篇文章不打算讲原理讲概念,我们就从一个开发者的角度,用一个好理解的类比,把这几位的关系捋清楚。
一个公司运作的类比想象一下,我们开了一家大型的互联网公司,这家公司就是我们的 Hadoop集群。
HDFS (Hadoop Distributed File System):这是公司的巨型中央仓库。所有部门的数据、资料、历史文档(也就是我们的数据,各种结构化或者半结构化的数据都可以)都堆在这里。这个仓库非常大,由很多个普通的货架(服务器硬盘)组成,但对外看起来是一个整体。它有个管理员(NameNode),知道每个资料(数据块)放在了哪个货架的哪个位置,还做了备份,防止资料丢失。它的特点是:存东西和整批取东西很方便,但你要是想在某个文件中间改个字,就太难了。
YARN (Yet Another Resource Negotiator):这是公司的行政和 ...
前言聊到大数据处理,Hadoop 是绕不开的话题,而提到 Hadoop 生态,就不得不说 Hive。这玩意儿到底是啥?简单来说,Hive 就是一个能让你用类似 SQL 的语言(叫 HQL)去查 HDFS 上海量数据的工具。对于熟悉 SQL 的人来说,这极大降低了数据分析的门槛,不用上来就手写复杂的 MapReduce 程序了。
但这并不意味着 Hive 是万能的。它跑的是 MapReduce(或者 Tez、Spark),天生就是为批处理设计的,所以别指望它能有毫秒级的实时查询响应,那不是它的活。
Hive 能干啥?Hive 本身不存储数据,它更像一个数据目录和查询引擎。它能处理的数据和文件类型其实非常灵活:
数据源: 主要处理存储在 HDFS 上的结构化或半结构化数据。
文件格式: 默认可以直接加载文本文件(TEXTFILE),你只需要在建表时告诉 Hive 数据的列分隔符和行分隔符。除此之外,它也支持更高效的列式存储格式,如 ORC 和 Parquet,以及 SequenceFile、RCFile 等。用好这些格式对性能提升有很大帮助。
核心思想是 **”Schema on Re ...
深入哈希函数:SHA-256的数学之旅上次我们聊了哈希是干啥的,说它是个”单向搅拌机”。那今天,咱们就把这台搅拌机的盖子掀开,看看里面的齿轮和刀片(也就是数学原理)到底是怎么工作的。
我们拿大名鼎鼎的 SHA-256 来开刀。放心,这篇文章不是让你去当数学家,也不是让你自己去实现一个。而是用一个开发者的视角,去理解我们每天都在用的工具,它背后那些精妙的设计。
理解原理是为了更好地使用它,而不是让你自己去实现一个! 专业的事交给密码学家,我们负责把它用对。
宏观视角:Merkle–Damgård 结构在我们一头扎进 SHA-256 的细节之前,得先了解大部分哈希函数(包括 MD5、SHA-1、SHA-256)的通用设计蓝图——Merkle–Damgård 结构。
这结构思想很简单:既然我一次性处理不了无限长的数据,那我把它切成一块一块的,不就行了?
它就像一个链式反应炉:
把你的输入数据(比如”hello world”)切成固定大小的块(Block)。
定义一个初始的哈希值(IV - Initial Value),这可以看作是反应炉的”种子”。
把第一个数据块和”种子”一起扔进一个叫做 ...







