kdf

package
v1.2.55 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 10, 2026 License: Apache-2.0 Imports: 9 Imported by: 0

README

📊 KDF(密钥派生函数)算法对比

🔧 核心算法对比

特性 PBKDF2 HKDF
算法类型 基于密码的密钥派生 基于密钥材料的密钥派生
输入源 用户密码(低熵) 已有密钥材料(高熵)
安全目标 提升弱密码安全性 密钥扩展和分离
主要应用 用户认证、密码存储 协议密钥派生、多密钥管理
迭代机制 高迭代次数(抗暴力破解) 无迭代(高效扩展)
典型参数 迭代10万次,盐值16字节 info参数区分用途

🎯 适用场景分析

PBKDF2 适用场景
// 场景1:用户密码加密存储
password := "user-password"
salt := GenerateSalt(16)
encryptionKey := PBKDF2(password, salt, 100000, 32, SHA256)

// 场景2:文件加密保护
filePassword := "file-secret-2024"
fileSalt := fixedFileSalt
fileKey := PBKDF2(filePassword, fileSalt, 50000, 32, SHA256)

推荐使用场景:

  • 🔐 用户认证系统:密码哈希存储
  • 📁 文件加密:基于密码的文件保护
  • 🔑 密钥生成:从弱密码生成强密钥
  • 🛡️ 密码管理器:主密码派生加密密钥
HKDF 适用场景
// 场景1:TLS协议密钥派生
masterSecret := TLS握手结果
salt := randomSalt
encryptionKey := HKDF(SHA256, masterSecret, salt, "encryption", 32)
authenticationKey := HKDF(SHA256, masterSecret, salt, "authentication", 32)

// 场景2:多应用密钥分离
baseKey := sharedMasterKey
dbKey := HKDF(SHA256, baseKey, salt, "database-encryption", 32)
logKey := HKDF(SHA256, baseKey, salt, "log-encryption", 32)

推荐使用场景:

  • 🌐 网络协议:TLS、SSH密钥派生
  • 🔄 密钥扩展:从主密钥派生子密钥
  • 🏢 多租户隔离:同一系统不同客户密钥分离
  • 📊 数据分类加密:不同类型数据使用不同密钥

⚡ 性能和安全对比

PBKDF2 特点
  • 优势
    • 专门设计处理弱密码输入
    • 高迭代次数增加暴力破解成本
    • 标准化程度高,广泛部署
  • 劣势
    • 性能开销较大(设计如此)
    • 不适合高频次调用
HKDF 特点
  • 优势
    • 高效快速,适合实时应用
    • 支持灵活的密钥分离
    • 标准化RFC 5869
  • 劣势
    • 要求输入密钥材料已有足够熵值
    • 不适合直接处理用户密码

🛡️ 安全最佳实践

PBKDF2 参数建议
// 生产环境推荐参数
iterations := 100000    // 10万次迭代
keyLength := 32         // AES-256密钥
saltLength := 16        // 128位盐值
hashAlgorithm := SHA256 // 或SHA512更高安全
HKDF 参数建议
// 典型配置
hashAlgorithm := SHA256
keyLength := 32
info := []byte("specific-purpose") // 明确标识用途

🔄 实际应用架构

企业级密码管理架构
用户密码 → PBKDF2 → 主密钥 → HKDF → 多个应用密钥
    ↓           ↓           ↓
认证密钥    加密密钥    签名密钥
多租户数据加密方案
主密码 → PBKDF2 → 租户主密钥 → HKDF → 租户数据密钥
    ↓           ↓              ↓
租户A密钥   租户B密钥      租户C密钥

💡 选择指南

考虑因素 推荐算法 理由
用户密码处理 PBKDF2 专门设计处理低熵密码
协议密钥派生 HKDF 高效扩展已有密钥材料
多密钥管理 HKDF 支持灵活的密钥分离
资源受限环境 HKDF 性能开销更小
最高安全性 PBKDF2+SHA512 更强的抗暴力破解

📋 总结建议

  1. 新项目选择

    • 用户认证系统:首选PBKDF2
    • 协议实现:首选HKDF
    • 混合场景:PBKDF2生成主密钥 + HKDF派生子密钥
  2. 安全升级路径

    • 现有PBKDF2系统:增加迭代次数到10万+
    • 新部署:考虑Argon2替代PBKDF2(更高安全性)
  3. 性能优化

    • PBKDF2:平衡安全与性能,选择合适迭代次数
    • HKDF:利用并行计算优势

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func DeriveAES256KeyFromPassword

func DeriveAES256KeyFromPassword(password string, salt []byte) ([]byte, error)

DeriveAES256KeyFromPassword 便捷函数:从密码派生AES-256密钥

func DeriveAES256KeyFromPasswordBase64

func DeriveAES256KeyFromPasswordBase64(password string, salt []byte) (string, error)

DeriveAES256KeyFromPasswordBase64 便捷函数:派生AES-256密钥并返回Base64编码

func DeriveHMACKeyFromPassword

func DeriveHMACKeyFromPassword(password string, salt []byte) ([]byte, error)

DeriveHMACKeyFromPassword 便捷函数:从密码派生HMAC密钥

func DeriveHMACKeyFromPasswordBase64

func DeriveHMACKeyFromPasswordBase64(password string, salt []byte) (string, error)

DeriveHMACKeyFromPasswordBase64 便捷函数:派生HMAC密钥并返回Base64编码

func GenerateSalt

func GenerateSalt(saltLen int) ([]byte, error)

GenerateSalt 生成随机盐值

func GenerateSaltBase64

func GenerateSaltBase64(saltLen int) (string, error)

GenerateSaltBase64 生成随机盐值并返回Base64编码结果

func HKDF

func HKDF(hashAlg HashAlgorithm, ikm []byte, salt []byte, info []byte, keyLen int) ([]byte, error)

HKDF 使用HKDF算法从输入密钥材料派生密钥

func HKDFBase64

func HKDFBase64(hashAlg HashAlgorithm, ikm []byte, salt []byte, info []byte, keyLen int) (string, error)

HKDFBase64 使用HKDF算法派生密钥并返回Base64编码结果

func HKDFString

func HKDFString(hashAlg HashAlgorithm, ikm string, salt []byte, info []byte, keyLen int) ([]byte, error)

HKDFString 使用HKDF算法从字符串输入密钥材料派生密钥

func HKDFStringBase64

func HKDFStringBase64(hashAlg HashAlgorithm, ikm string, salt []byte, info []byte, keyLen int) (string, error)

HKDFStringBase64 使用字符串输入密钥材料派生密钥并返回Base64编码结果

func PBKDF2

func PBKDF2(password []byte, salt []byte, iterations int, keyLen int, hashAlg HashAlgorithm) ([]byte, error)

PBKDF2 使用PBKDF2算法从密码派生密钥

func PBKDF2Base64

func PBKDF2Base64(password []byte, salt []byte, iterations int, keyLen int, hashAlg HashAlgorithm) (string, error)

PBKDF2Base64 使用PBKDF2算法派生密钥并返回Base64编码结果

func PBKDF2String

func PBKDF2String(password string, salt []byte, iterations int, keyLen int, hashAlg HashAlgorithm) ([]byte, error)

PBKDF2String 使用PBKDF2算法从字符串密码派生密钥

func PBKDF2StringBase64

func PBKDF2StringBase64(password string, salt []byte, iterations int, keyLen int, hashAlg HashAlgorithm) (string, error)

PBKDF2StringBase64 使用字符串密码派生密钥并返回Base64编码结果

Types

type HashAlgorithm

type HashAlgorithm string

HashAlgorithm 哈希算法类型

const (
	HashSHA256 HashAlgorithm = "sha256"
	HashSHA512 HashAlgorithm = "sha512"
)

type KDFManager

type KDFManager struct {
	// contains filtered or unexported fields
}

KDFManager KDF管理器,提供便捷的密钥派生功能

func DefaultKDFManager

func DefaultKDFManager() *KDFManager

DefaultKDFManager 获取默认KDF管理器

func NewKDFManager

func NewKDFManager() *KDFManager

NewKDFManager 创建KDF管理器

func (*KDFManager) DeriveFromKeyMaterial

func (m *KDFManager) DeriveFromKeyMaterial(ikm []byte, salt []byte, info []byte) ([]byte, error)

DeriveFromKeyMaterial 从密钥材料派生密钥(使用HKDF)

func (*KDFManager) DeriveFromKeyMaterialString

func (m *KDFManager) DeriveFromKeyMaterialString(ikm string, salt []byte, info []byte) ([]byte, error)

DeriveFromKeyMaterialString 从字符串密钥材料派生密钥

func (*KDFManager) DeriveFromPassword

func (m *KDFManager) DeriveFromPassword(password []byte, salt []byte) ([]byte, error)

DeriveFromPassword 从密码派生密钥(使用PBKDF2)

func (*KDFManager) DeriveFromPasswordString

func (m *KDFManager) DeriveFromPasswordString(password string, salt []byte) ([]byte, error)

DeriveFromPasswordString 从字符串密码派生密钥

func (*KDFManager) DeriveMultipleKeys

func (m *KDFManager) DeriveMultipleKeys(password []byte, salt []byte, keyCount int) ([][]byte, error)

DeriveMultipleKeys 派生多个密钥(用于不同用途)

func (*KDFManager) WithHashAlgorithm

func (m *KDFManager) WithHashAlgorithm(hashAlg HashAlgorithm) *KDFManager

WithHashAlgorithm 设置默认哈希算法

func (*KDFManager) WithIterations

func (m *KDFManager) WithIterations(iterations int) *KDFManager

WithIterations 设置默认迭代次数

func (*KDFManager) WithKeyLength

func (m *KDFManager) WithKeyLength(keyLen int) *KDFManager

WithKeyLength 设置默认密钥长度

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL