03 密码学
1 公钥密码学理论
两种加密方式:对称加密和非对称加密
1.1 对称加密
区别:主要区别就是密钥对的区别
对称加密(单秘钥加密),加解密都是只有一把key ,使用相同的秘钥进行加密和解密炒作
发送方使用密钥对数据进行加密,接收方使用相同的密钥对密文进行解密,从而还原出原始的明文数据。
比较有名的是 DES 3DES AES TDEA blowful rc245
对称加密的特点包括:
- 速度和效率: 对称加密使用相同的密钥进行加密和解密,因此加密和解密的过程非常快速和高效。
- 简单性: 对称加密算法相对简单,实现起来较为容易。
- 适用于大数据量: 对称加密适用于大数据量的加密和解密,因为它的处理速度较快。
- 密钥管理: 对称加密需要确保密钥的安全性,因为任何拥有密钥的人都可以对数据进行解密。因此,对称加密在密钥的生成、分发和管理方面需要特别注意。
- 密钥分发: 密钥的安全分发是对称加密的一个挑战。发送方和接收方必须事先共享密钥,这要求在安全可靠的通信渠道上进行密钥交换。
1.2 非对称加密
非对称加密 (公钥密码学、双密码加密。现在的加密体系),
双秘钥是哪两个?:
privatekey :私有,进行加密(俗称私钥)私钥是用于解密的密钥,必须保密,并且只有密钥的持有者可以使用私钥进行解密。私钥用于解密公钥加密的数据。
publickey:公开的,所有人都知道,进行解密(俗称公钥)公钥是用于加密的密钥,可以公开分享给其他人。任何人都可以使用公钥对数据进行加密,但无法使用公钥进行解密。
非对称加密的运作过程如下:
- 发送方使用接收方的公钥对数据进行加密。
- 加密后的数据通过不安全的通信渠道发送给接收方。
- 接收方使用自己的私钥对收到的密文进行解密,得到原始的明文数据。
非对称加密的特点包括:
- 安全性: 非对称加密提供了更高的安全性,因为公钥用于加密数据,而私钥用于解密数据。即使公钥被公开获取,也无法轻易破解密文,因为只有私钥持有者才能解密数据。
- 密钥分发: 非对称加密解决了密钥分发的问题。发送方只需获取接收方的公钥,而无需共享私钥。这使得非对称加密在保护数据传输的同时,简化了密钥管理的复杂性。
- 数字签名: 非对称加密还可以用于数字签名,即使用私钥对数据进行加密,证明数据的完整性和认证发送方身份。接收方可以使用发送方的公钥进行验证。
- 计算复杂性: 相对于对称加密,非对称加密的计算复杂性较高,处理速度较慢。因此,非对称加密通常用于加密小数据量或者进行密钥交换,而不是对大量数据进行加密
非对称加密比较有名的是:RSA ECC(椭圆曲线)GPG(用过,加密文件)
ECC分支:
- ECDSA 特别算法Secp256K1啥的
- EDDSA 特别算法Ed25519啥的
2.对称密码学系列
2.1. DES
特点
- 秘钥长度:56位
- 分组密码:处理64位的分组数据
- 加密和解密都需要同一把私钥
- 16轮加密包含:拓展、置换、S盒替代、再次置换(16轮加密流程可以了解下)
- 安全性:已被攻破,实际项目不会用,
- 复杂性和速度。
- 3DES替换,目前还安全
安全性:特别经典,但已被攻破
2.2. 3DES
3DES就是3重DES加密,目前也不用了,现在主流都是AES,
特点
- 秘钥长度:56位,由于引入了对称秘钥的3次应用,所以实际秘钥长度是3个56,
- 分组密码:处理64位的分组数据
- 加密和解密都需要同一把私钥
- 3个16轮加密包含:拓展、置换、S盒替代、再次置换(16轮加密流程可以了解下)
- 安全性:比DES高的多,目前是安全的。
- 复杂性和速度性能会有损耗。
2.3.AES:
特点
- 秘钥长度:比较灵活,可以是128位 192位 256位
- 分组密码:128位的分组密码(分组的意思就是如果数据块太长了,就只能按照128位去分组,分完组之后再加密)
- 加密和解密都需要同一把私钥
- 基于置换和代换网络,轮数取决于秘钥长度:AES-128使用10轮加密,AES-192使用12轮加密,AES-256使用14轮加密。通过增加轮数,AES提供了更高的安全级别,每一轮都有初始轮、主要轮、最终轮,主要轮都有四个步骤:字节替代(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)和轮密钥加(AddRoundKey),
- 安全性:目前是安全的,没被破解
- 应用:文件加密解密,数据加密解密,
2.4. DES 、3DES、AES 对比
共同点:
- 单秘钥对称加密
- 分组密码
- 都有多轮
不同点:
- DES已被破解
- 3DES是DES的补充,安全性有保障,实际应用少,
- DES(64位)和AES(128、192、256)秘钥长度不一样,
- AES安全性好一点,目前暂未被破解。
应用场景:
文件数据加密,无法做秘钥签名,因为是单秘钥的
3. 非对称加密系列
3.1 核心:
公钥加密,私钥解密。
你要发一段话给别人,就用别人公开的公钥进行加密,加密之后任何人都解不开这个秘密,除非拿到了私钥才能解开秘密得到里面的内容
3.2 常用:
常用的非对称加密算发有 RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。
ECC分:
- EDDSA->ED25519,应用:ECDSA 在 TLS/SSL、SSH、数字签名等领域广泛应用。
- Ed25519 是一种基于 Edwards 曲线的数字签名算法,它提供了高度的安全性和性能;Ed25519 也是加密货币中使用比较广泛的签名算法,如波卡等链。(ECC变种)
- EdDSA->secp256k1,应用:EdDSA 由 Daniel J. Bernstein 等人提出,并且被应用于密码学协议中,如密码学货币、加密货币等。(ECC变种,这个是被用的最多)公钥很多都是02/03/04开头的
- Secp256k1 是一种椭圆曲线,常用于加密货币领域,如比特币和以太坊。
3.3 ECC算法:
**ECC(Elliptic Curve Cryptography)**:椭圆曲线密码学是一类基于椭圆曲线数学问题的非对称加密算法。相比于传统的非对称加密算法,如RSA,ECC提供了相同安全级别下更短的密钥长度和更高的计算效率,因此在资源受限的环境中得到广泛应用。
公钥用于加密
基于椭圆曲线-离散对数
秘钥长度比RSA短,短秘钥,256位的ECC安全性相当于3072位的RSA
安全高
效率高
应用场景:数字货币
3.4 RSA特点:
RSA(Rivest-Shamir-Adleman)是最常用的非对称加密算法之一。它基于大数分解的困难性,使用公钥进行加密,私钥进行解密。RSA广泛应用于数据加密、数字签名和密钥交换等领域。
- 公钥用于加密
- 基于数学难题(因数分解啥的)–>安全性很高
- 秘钥长度:1024,2048,4096,秘钥越长越安全
- 加密解密:公钥模幂运算,私钥解密
- RSA发送方使用自己的私钥签名消息,接收方用公钥验证
- 性能:性能慢,所以一般是对很小数据加密,
应用:数字证书、签名认证,点击邮件加密,交易签名用到
场景比较多的是混合加密,
所谓混合加密就是使用在实际的应用中把对称加密和非对称加密结合起来使用。
我们都知道非对称加密算法比对称加密算法慢数千倍,但在保护通信安全方面,非对称加密算法却具有对称密码难以企及的优势。
所以在实际的应用中,都是对称加密与非对称加密混合使用。
取其优势,去其糟粕,达到完美使用的一个目的。
对称加密技术:
一一对应,加密和解密都是用一把钥匙,所以发送者和接收者手上必须同时持有钥匙
优点:这种算法比较简单且计算量比较小,对网络开放、从而能够效率高地加密。速度更快
缺点,不能保证协商秘钥过程的安全性。二是每次通信都使用唯一秘钥,秘钥越来越多不好管理。三是对称加密算法只能对数据进行加解密,保证数据的机密性,但无法验证通讯双方的真实身份,不能确定数据的完整性。
非对称密钥加密技术:
有公钥私钥两把钥匙,公钥(公布于众)用于加密数据,私钥(私密持有)用于解密数据
优点:更安全,可以一对多个接收方,简化秘钥(秘钥少)发放,支持数字签名。
缺点:计算过程特别复杂,运行数据的加密和解密速度比较慢
Schnorr和BLS算法介绍
Schnorr 签名和 BLS 签名在区块链技术中都有着重要的应用。
它们各自具备独特的优势,使其在不同的区块链应用场景中得到广泛使用。
3.5 Schnorr 签名算法
Schnorr签名广泛应用于区块链和加密货币领域
3.5.1 Schnorr基本步骤
下面是Schnorr算法的基本步骤:
- 密钥生成:
- 随机选择一个私钥(私钥是一个随机数)。
- 使用椭圆曲线上的点乘法运算生成对应的公钥(不懂没关系)。
- 签名生成:
- 选择一个随机数作为临时私钥。
- 使用临时私钥和消息的哈希值计算出一个临时公钥。(只需要一次哈希)
- 使用临时私钥、消息和临时公钥等参数计算出签名的值。
- 验证签名:
- 使用公钥和消息的哈希值重复计算出签名的值。
- 将计算得到的签名值与原始的签名值进行比较,如果相等,则验证通过。
3.5.1 Schnorr优点
- 高效性:相比于其它签名算法,Schnorr签名在计算上更加高效,特别是在签名生成和验证过程中,计算量较小,签名和验证的速度快
- 短签名:Schnorr签名长度较短,有助于节省带宽和存储空间。
- 线性性质:Schnorr签名具有线性性质,这意味着可以对多个签名进行聚合,从而减少交易的大小和验证的成本。
- 安全性:基于离散对数问题的安全性,难以被破解。
- 抗量子计算攻击:Schnorr签名方案被认为对量子计算攻击有较好的抵抗性,因此在未来量子计算成为现实时,Schnorr签名可能会成为主流选择。
3.5.2. Schnorr应用
比特币的Taproot升级中使用了基于Schnorr签名的聚合签名技术。此外,许多密码协议和标准也采用了Schnorr签名算法。紧凑型和灵活性都很高
总之,Schnorr签名算法以其高效和安全的特点,成为了现代密码学中的一个重要工具,尤其在对资源要求较高的应用场景中具有显著优势
3.6 BLS算法
Schnorr验证的有点BLS都具备,
支持批量验证的特点,对多重签名的场景支持度相当高
以太坊升级后用的多
BLS(Boneh-Lynn-Shacham)签名算法是一种基于双线性对(bilinear pairing)的数字签名方案
3.6.1基本步骤
以下是BLS签名算法的基本步骤:
- 密钥生成:
- 随机选择一个私钥(私钥是一个随机数)。
- 使用椭圆曲线上的点乘法运算生成对应的公钥。
- 签名生成:
- 将消息的哈希值作为输入。
- 使用私钥对哈希值进行签名,生成一个签名值。
- 验证签名:
- 使用公钥和消息的哈希值重复计算出签名的值。
- 将计算得到的签名值与原始的签名值进行比较,如果相等,则验证通过。
3.6.2 特点和应用
- 简洁性:BLS签名非常简洁,签名的大小固定且较小,只有一个群元素。
- 效率:签名生成和验证的计算量相对较小,尤其是在签名长度较短的情况下。
- 聚合签名:BLS签名具有天然的签名聚合(aggregate signature)特性,多个签名可以被聚合成一个签名,从而减少存储和传输的开销。这在区块链和分布式系统中尤为有用。
- 多重签名:BLS也支持多重签名(multi-signature),多个用户可以共同签署同一消息,生成一个联合签名。
不同点:
签名聚合:
- BLS签名算法:BLS签名算法天然支持签名的聚合。多个BLS签名可以通过简单的数学运算合并为单个签名,从而减少传输和验证的开销。
- Schnorr签名算法:Schnorr签名算法不直接支持签名的聚合。要实现签名聚合,需要额外的协议或方案。
4 单向散列函数算法介绍(属于对称加密)
MD5、SHA-1、SHA-2、SHA-3(以太坊)、blake、blake2(用的多)、波赛登(用的多)
单向散列函数(One-way hash function)是一种重要的密码学工具,它将输入数据转换为固定长度的输出值,称为哈希值,同时具备以下特性:
- 单向性(One-way property):计算从哈希值到原始输入的逆过程是困难的。即给定哈希值,计算出原始输入是困难的。
- 固定输出长度:单向散列函数生成的哈希值具有固定的长度,无论输入的长度如何。
- 抗碰撞性(Collision resistance):很难找到两个不同的输入,它们生成相同的哈希值
4.1 MD5
4.1.1 MD5特点
以下是MD5的基本特点和特性:
- 单向性:MD5是一种单向散列函数,根据给定输入计算出固定长度的哈希值,但从哈希值推导出原始输入是非常困难的,这是其单向性的关键特性。
- 固定输出长度:无论输入的长度如何,MD5生成的哈希值始终为128位,长度固定。它将输入数据转换为一个128位(16字节)的哈希值,通常表示为32个十六进制数字。
- 快速计算:相对于较新的哈希函数,如SHA-256,MD5计算速度较快,适用于一些对性能要求较高的场景。
4.1.2 MD5步骤
- 填充数据:将输入数据进行填充,使其长度满足对512位(64字节)块的整数倍。填充方式是在数据末尾添加一个”1”比特,然后填充若干”0”比特,直到满足长度要求。
- 初始化状态:定义四个32位的寄存器(A、B、C、D)作为MD5的内部状态。初始时,这些寄存器包含预定义的固定值。
- 处理块数据:将填充后的数据划分为512位(64字节)的块,并对每个块进行处理。
- 划分为子块:将每个512位块划分为16个32位的子块,每个子块占据4个字节。
- 初始化变量:定义四个32位变量(A、B、C、D),并将其初始化为初始状态的寄存器值。
- 循环运算:通过四轮循环,对子块进行一系列的位运算和非线性函数操作,更新变量的值。
- 输出结果:经过循环运算后,得到最终的MD5哈希值。将四个32位变量按照小端字节序连接起来,形成128位(16字节)的哈希值。
4.1.3 MD5 用途
- 一致性验证:网上下载被人的文件,可以看到这个文件的MD5值,然后你用工具验证你下载的文件的MD5值和别人给出的这个MD5值是否一致?一致就说明数据在传输过程中没有问题。
- 数字证书 :如果有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
- 安全访问认证:在Unix系统中用户的密码是以MD5(或其它类似的算法)经Hash运算后存储在文件系统中。当用户登录的时候,系统把用户输入的密码进行MD5 Hash运算,然后再去和保存在文件系统中的MD5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。
然而,需要注意的是,MD5存在以下主要安全性问题:
- 碰撞攻击:MD5已经被证明对碰撞攻击不安全。碰撞指的是找到两个不同的输入,它们生成相同的MD5哈希值。这意味着攻击者可以通过构造特定的输入来伪造数据或篡改数据,从而破坏完整性。
- 预映射攻击:通过选择特定的输入,可以在计算MD5哈希值之前进行预计算,从而加速碰撞攻击的实施。
安全性:已被破解–>中国王小云
4.2 SHA 系列算法
安全散列算法(英语:Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族,能计算出一个数字消息所对应到的,长度固定的字符串(又称消息摘要)的算法。
且若输入的消息不同,它们对应到不同字符串的机率很高。SHA家族算法分别是SHA-0;SHA-1;SHA-224、SHA-256、SHA-384,SHA-512和SHA3。SHA-224、SHA-256、SHA-384,SHA-512 有时并称为 SHA-2, SHA3 是第三代安全散列算法(Secure Hash Algorithm 3),之前名为 Keccak 算法,在硬件实做上面,这个算法比起其他算法明显的快上很多,目前 SHA-0,SHA-1 已被破解。
sha-256属于sha-2家族
4.3 Blake 和 Blake2系列算法
BLAKE(及其后续版本 BLAKE2)是一种快速且安全的哈希算法,参与了SHA-3竞赛并成为了SHA-3的五个决赛选手之一。
BLAKE2 是一种快速、安全的哈希函数,是对 BLAKE 算法的改进。BLAKE2 于 2012 年发布,其设计目标是提供比 MD5、SHA-1 和 SHA-2 更高的安全性和更快的速度,同时保持高度的灵活性和简便性。
4.3.1 Blake 系列算法特点
- 高效性能:BLAKE2 比 SHA-2(如 SHA-256 和 SHA-512)更快,同时在现代 CPU 上的性能通常优于 MD5 和 SHA-1。BLAKE2 的设计充分利用了现代处理器的特性,使其在软件实现中非常高效。
- 高安全性:BLAKE2 提供了与 SHA-3 相媲美的安全性。它具有以下特性:
- 抗碰撞攻击:很难找到两个不同的输入使得它们的哈希值相同。
- 抗预映射攻击:很难找到一个给定哈希值对应的原始输入。
- 抗第二预映射攻击:很难找到与给定输入具有相同哈希值的另一个输
- 可变长度输出:BLAKE2 可以生成任意长度的哈希值,从 1 比特到 512 比特。这使得它在许多应用中非常灵活。(MD6固定128位)
- 简单易用:BLAKE2 的设计和实现都相对简单,这有助于降低实现中的错误风险。它还提供了多种变种,以满足不同需求:
- BLAKE2b:适用于 64 位平台,输出长度可达 512 比特。
- BLAKE2s:适用于 32 位平台,输出长度可达 256 比特。
- 内置特性:BLAKE2 集成了多种常用功能,这使得它在许多应用中更加便捷:
- 密钥哈希(Keyed Hashing):可以使用密钥生成消息认证码(MAC)。
- 盐值(Salted Hashing):允许使用盐值增强哈希的安全性。
- 个性化(Personalized Hashing):可以根据应用需求定制哈希值。
4.3.2 blake2 应用场景
由于其高效性和安全性,BLAKE2 被广泛应用于各种领域,包括但不限于:
- 密码学应用:如数字签名、消息认证码、随机数生成等。
- 数据完整性验证:如文件校验、数据备份验证等。
- 区块链和加密货币:BLAKE2 被许多区块链项目用作哈希函数。以太坊
4.4 Poseidon (波赛登)算法
Poseidon 是一种现代加密哈希函数,设计用于零知识证明(Zero-Knowledge Proofs, ZKPs)等高级密码学应用。它由研究人员 Benedikt Bunz, Dario Fiore, Iddo Bentov, and Pavel Vasin 等人设计。Poseidon 的设计目标是提供一种高效且安全的哈希算法,特别适合用于 zk-SNARKs 和 zk-STARKs 等 ZKP 系统中。
4.4.1 Poseidon 算法的特点
- 针对零知识证明优化: Poseidon 设计时考虑了在零知识证明系统中的应用,优化了哈希计算的效率,特别是减少了算术电路中的门数量(gate count)。Zero—Knowledge
- 基于加密结构: Poseidon 采用 Sponge 结构,这种结构在密码学中广泛应用于构建哈希函数和伪随机数生成器。Sponge 结构由两个主要阶段组成:吸收(absorb)和挤出(squeeze)。
- 高效性: Poseidon 的设计特别注重计算效率,适合在资源受限的环境中运行,比如区块链中的智能合约或零知识证明的证明生成过程。
- 灵活性: Poseidon 可以根据不同的应用需求进行配置,支持不同的安全参数和性能优化。
- 安全性: Poseidon 提供了较高的安全性,抗碰撞攻击、预映射攻击和第二预映射攻击,满足现代密码学的安全需求。
4.4.2 Poseidon 的构造
Poseidon 的具体实现涉及复杂的数学构造,包括有限域上的非线性变换和线性层的组合。以下是 Poseidon 的基本构造概述:
- 状态初始化: Poseidon 初始化一个状态向量,状态的大小通常取决于安全参数和哈希输出的长度。
- 非线性层(S-Box): Poseidon 在状态向量的每个元素上应用一个非线性变换(通常是有限域上的幂操作),这种变换称为 S-Box。
- 线性层: Poseidon 应用一个线性变换,将状态向量的元素混合。通常,这个线性变换是通过一个矩阵乘法实现的。
- 轮函数(Round Function): 非线性层和线性层组合成一个轮函数。Poseidon 多次应用轮函数,将输入数据充分混合,确保输出哈希值的安全性。
- Sponge 结构: Poseidon 使用 Sponge 结构处理输入数据。首先在吸收阶段将输入数据分块处理并更新状态向量,然后在挤出阶段从状态向量中提取哈希值。
4.4.3 Poseidon 的应用
- 区块链: Poseidon 因其高效性和安全性,被认为是区块链系统中实现零知识证明的理想哈希函数。例如,Poseidon 可以用于生成 zk-SNARKs 和 zk-STARKs 中的证明和验证过程。
- 隐私保护: Poseidon 可以用于保护数据隐私,通过零知识证明确保数据的完整性和保密性而无需透露实际数据内容。
- 智能合约: Poseidon 可以集成到区块链智能合约中,提供高效的哈希计算和验证功能,增强智能合约的安全性和性能。
5 总结【重要】
我们都知道,哈希算法 (Hash Algorithm) 是将任意长度的数据映射为固定长度数据的算法,也称为消息摘要。
一般情况下,哈希算法有两个特点,
一是原始数据的细微变化(比如一个位翻转)会导致结果产生巨大差距;入变出变
二是运算过程不可逆,理论上无法从结果还原输入数据。不可逆向
因此,哈希算法主要用于数据完整性校验和加密/签名。
哈希算法的安全性就在于碰撞难易度,即已知结果,构建出具有相同结果的输入数据的难易度。
常见的哈希算法有 MD5, SHA-1, SHA-2, SHA-3。
其中 MD5 已经可以在 2^21 复杂度(在主流智能手机上只需30秒)内完成碰撞,
谷歌也于17年早些时候在 2^64 复杂度(约 110 GPU年的计算量)内完成了第一次 SHA-1 碰撞。
至此,MD5 和 SHA-1 已经在安全领域被废弃。
当前除了 SHA-2,SHA-3 之外,还有另外一个哈希算法系列可供选择,那就是 BLAKE,BLAKE2 系列
比常见的 MD5,SHA-1,SHA-2,SHA-3 更快,同时提供不低于 SHA-3 的安全性。
对于区块链中的零知识证明系统,Poseidon 是目前应用的最广泛的算法。
6 门限共享秘密【其他】
门限秘密共享(Threshold Secret Sharing)是一种密码学技术,
用于将一个秘密信息分割成多个部分,分发给多个参与者,在满足一定门限条件时才能恢复出原始秘密。
这种方案提供了分散化的安全性,即不依赖于任何单个参与者的信任,只有在多个参与者合作的情况下才能获取秘密。
以下是门限秘密共享方案的基本原理:
- 秘密分割:将原始秘密信息分割成多个部分,每个部分称为共享(Share)。通常使用Shamir’s Secret Sharing算法或其他类似的方法进行分割。这些共享被分发给不同的参与者,每个参与者持有一个或多个共享。
- 门限条件:指定一个门限值(Threshold),需要达到该门限值才能重构秘密。例如,将门限值设置为3,意味着至少需要3个或更多的参与者合作才能恢复秘密。
- 秘密恢复:当参与者合作时,他们可以将各自的共享合并,通过一定的计算方法恢复出原始秘密。恢复秘密的计算通常使用插值算法或其他恢复算法,根据收集到的共享进行计算。
门限秘密共享方案的优势在于分散化的安全性,即没有单点故障或单个参与者能够获取完整的秘密。即使部分参与者受到攻击或泄露,只要门限条件得到满足,秘密仍然是安全的。这种方案在许多领域中有广泛应用,如多方身份验证、安全多方计算、密码学等。
6.1 云端可干扰抗秘钥丢失的方案(Seek做的)
实现逻辑
用到了门限共享秘密、异或算法
现在有一个云端服务cloud-server
本地钱包里面的SDK里面有一个秘密(或者私钥),我现在目的是我丢了这个秘钥我能找回来,但我又怕你们作恶,我就设计了一个这个方案。
首先我本地生成一个大随机数random number,
我现在拿我的这个秘密+random number做一次异或算法得到一个value
然后把这个random number通过API上传到云端去(加密后上传的,加密方式暂不管)
然后将这个value 去进行门限共享秘密拆分成n个sharnds ,假设n=6,k=3
假设其他丢失了,只得到3个,把这3个进行逆门限解密,可以得到这个value,
拿到value之后,再去请求云端,把这个random number拿下来,
这个时候手上就有value + random number 进行一次逆异或运算得到你的秘钥