---
title: "内存运行时加密"
description: "Fystack 如何借助受保护的缓冲区、清零机制和运行时策略来保护内存中的敏感凭证，防范基于内存的攻击。"
url: https://docs.fystack.io/zh/security/runtime-key-encryption
last_updated: 2026-11-13
---

> ## Documentation index
> Fetch the complete documentation index at: https://docs.fystack.io/llms.txt
> Use it to discover all available pages before exploring further.

# 内存运行时加密

## 1. 概述

当应用程序使用 API key、访问令牌或私有凭证等敏感数据时，这些数据会暂时驻留在堆内存中。
为降低恶意软件或内存扫描器定位这些机密的可能性，我们采用了基于 [memguard](https://github.com/awnumar/memguard) 构建的专用内存保护层。这可以确保敏感信息存放在锁定、受保护且生命周期短暂的内存区域中，防止意外泄露或使用后残留。

> **Warning.** 虽然内存运行时加密能显著降低侧信道攻击的风险，但并不能 100% 完全消除此类风险，也不能完全替代类似 Confidential VM 的完整 TEE（可信执行环境）。

_Diagram: 使用锁定、受保护的堆内存进行内存运行时加密_

内存运行时加密：通过锁定、受保护的堆内存，保护敏感密钥和凭证免受内存扫描器和恶意软件的侵害。

## 2. 为什么重要

即使在静态存储和传输过程中都进行了加密，机密在使用时（为运行时操作而解密时）仍然可能暴露。内存攻击往往正是针对这一时间窗口，通过扫描进程堆来寻找可识别的密钥特征。

通过将凭证隔离在受保护的内存中：

- **数据被锁定在物理 RAM 中，不会被交换到磁盘。**
- **内存页周围设有保护区域，可检测或阻止访问尝试。**
- **缓冲区在使用后会被显式擦除。**
- **机密在内存中的存活时间被缩短到毫秒或秒级。**

这一方法为防范运行时凭证窃取和进程内恶意软件提供了纵深防御。

## 3. 架构概述

### 3.1 解密与加载

敏感数据（例如 API key 或令牌）从安全存储中解密，或从密钥管理服务中获取，然后直接放入受保护的堆内存。

### 3.2 受保护内存区

数据加载后会保存在 memguard 保护的安全区（enclave）中：

- 不可交换（基于 mlock 的保护）
- 周围设有保护页
- 出错或作用域结束时自动销毁

### 3.3 短暂访问

受保护的数据只会在需要它的操作（例如认证、签名或加密）期间被短暂访问，不会在内存的其他位置创建永久副本。

### 3.4 立即清零

操作完成后，内存缓冲区会被安全擦除并释放，不会留下任何可恢复的机密痕迹。

## 4. 总结

敏感凭证只会被解密到受保护的堆内存中，与普通进程空间隔离。它们只被短暂使用，随即被擦除，且绝不会写入日志或磁盘，从而确保即使主机被攻破或遭到内存检查，也无法恢复正在使用的机密。
