文件传输协议翻译成汉语是“文件传输协议” 3DNow!(3D no waiting)翻译成汉语是“3D即时” 3DPA(3D Positional Audio,3D定位音频)翻译成汉语是“3D定位音频” 3DS(3D SubSystem,三维子系统)翻译成汉语是“三维子系统” ABS(Auto Balance System,自动平衡系统)翻译成汉语是“自动平衡系统” AC(Audio Codec,音频多媒体数字信号编解码器)翻译成汉语是“音频编解码器” ACOPS: Automatic CPU OverHeat Prevention System(CPU过热预防系统)翻译成汉语是“CPU过热自动预防系统” ACPI(Advanced Configuration and Power Interface,先进设置和电源管理)翻译成汉语是“先进配置和电源接口” AE(Atmospheric Effects,雾化效果)翻译成汉语是“大气效果” AFR(Alternate Frame Rendering,交替渲染技术)翻译成汉语是“交替帧渲染技术” AGAS(Anti Glare Anti Static Coatings,防强光、防静电涂层)翻译成汉语是“防眩光防静电涂层” AGP: Accelarated Graphic Port(加速图形端口),一种CPU与图形芯片的总线结构翻译成汉语是“加速图形端口,一种CPU与图形芯片的总线结构” AGU(Address Generation Units,地址产成单元)翻译成汉语是“地址生成单元” AH: Authentication Header,鉴定文件头翻译成汉语是“认证头” AHA(Accelerated Hub Architecture,加速中心架构)翻译成汉语是“加速中心架构” AL: Artificial Life(人工生命)翻译成汉语是“人工生命” ALU(Arithmetic Logic Unit,算术逻辑单元)翻译成汉语是“算术逻辑单元” AMR(Audio/Modem Riser,音效/数据主机板附加直立插卡)翻译成汉语是“音频/调制解调器主机板附加直立插卡” AMR(Audio/Modem Riser;音效/调制解调器主机板附加直立插卡)翻译成汉语是“音频/调制解调器主机板附加直立插卡” Anisotropic Filtering(各向异性过滤)翻译成汉语是“各向异性过滤” API(Application Programming Interfaces,应用程序接口)翻译成汉语是“应用程序接口” APIC: Advanced Programmable Interrupt Controller(高级程序中断控制器)翻译成汉语是“高级可编程中断控制器” APM(Advanced Power Management,高级能源管理)翻译成汉语是“高级电源管理” APPE(Advanced Packet Parsing Engine,增强形帧解析引擎)翻译成汉语是“增强型帧解析引擎” ARP(Address Resolution Protocol,地址解析协议)翻译成汉语是“地址解析协议” ASC(Anti Static Coatings,防静电涂层)翻译成汉语是“防静电涂层” ASC(Auto-Sizing and Centering,自动调效屏幕尺寸和中心位置)翻译成汉语是“自动调整和居中屏幕尺寸和位置” ASCII(American Standard Code for Information Interchange,美国国家标准信息交换代码)翻译成汉语是“美国信息交换标准代码” ASIC: Application Specific Integrated Circuit(特殊应用积体电路)翻译成汉语是“专用集成电路” ASK IR(Amplitude Shift Keyed Infra-Red,长波形可移动输入红外线)翻译成汉语是“幅度移键红外线” ASMO(Advanced Storage Magneto-Optical,增强形光学存储器)翻译成汉语是“增强型光存储器” ASPI(Advanced SCSI Program Interface,高级SCSI编程接口。它定义了当和SCSI主机适配器通讯时应用程序使用的一系列软件命令)翻译成汉语是“高级SCSI编程接口。它定义了当与SCSI主机适配器通信时应用程序使用的一系列软件命令” AST(Average Seek time,平均寻道时间)翻译成汉语是“平均寻道时间” ATA(AT Attachment,AT扩展型)翻译成汉语是“AT扩展接口” ATAPI(AT Attachment Packet Interface)翻译成汉语是“AT附加包接口” ATC(Access Time from Clock,时钟存取时间)翻译成汉语是“时钟访问时间” ATL: ActiveX Template Library(ActiveX模板库)翻译成汉语是“ActiveX模板库” ATM(Asynchronous Transfer Mode,异步传输模式)翻译成汉语是“异步传输模式” ATOMM(Advanced super Thin-layer and high-Output Metal Media,增强形超薄高速金属媒体)翻译成汉语是“增强型超薄高速金属媒体” ATX: AT Extend(扩展型AT)翻译成汉语是“扩展型AT” Auxiliary Input(辅助输入接口)翻译成汉语是“辅助输入接口” AV(Analog Video,模拟视频)翻译成汉语是“模拟视频” AVI(Audio Video Interleave,音频视频插入)翻译成汉语是“音频视频交错” Back Buffer,后置缓冲翻译成汉语是“后置缓冲区” Backface culling(隐面消除)翻译成汉语是“背面裁剪” BASIC:Beginner's All-purpose Symbolic Instruction Code(初学者通用指令代码)翻译成汉语是“初学者通用符号指令代码” Battle for Eyeballs(眼球大战,各3D图形芯片公司为了争夺用户而作的竞争)翻译成汉语是“眼球大战,各3D图形芯片公司为了争夺用户而进行的竞争” BCF(Boot Catalog File,启动目录文件)翻译成汉语是“启动目录文件” Benchmarks:基准测试程序数值翻译成汉语是“基准测试程序数值” BGA(Ball Grid Array,球状矩阵排列)翻译成汉语是“球栅阵列” BGA(Ball Grid Array,球状矩阵排列)翻译成汉语是“球栅阵列” BGA: Ball Grid Array(球状网格阵列)翻译成汉语是“球栅阵列” BHT(branch prediction table,分支预测表)翻译成汉语是“分支预测表” BIF(Boot Image File,启动映像文件)翻译成汉语是“启动映像文件” Bilinear Filtering(双线性过滤)翻译成汉语是“双线性过滤” BIOS(Basic Input/Output System,基本输入/输出系统)翻译成汉语是“基本输入/输出系统” BLA: Bearn Landing Area(电子束落区)翻译成汉语是“电子束着陆区” BMC(Black Matrix Screen,超黑矩阵屏幕)翻译成汉语是“超黑矩阵屏幕” BOD(Bandwidth On Demand,弹性带宽运用)翻译成汉语是“按需带宽” BOPS:Billion Operations Per Second,十亿次运算/秒翻译成汉语是“每秒十亿次运算” bps(bit per second,位/秒)翻译成汉语是“位/秒” BPU(Branch Processing Unit,分支处理单元)翻译成汉语是“分支处理单元” Brach Pediction(分支预测)翻译成汉语是“分支预测” BSD(Berkeley Software Distribution,伯克利软件分配代号)翻译成汉语是“伯克利软件发行版” BSRAM(Burst pipelined synchronous static RAM,突发式管道同步静态存储器)翻译成汉语是“突发式流水线同步静态存储器” BTB/C: Branch Target Buffer/Cache(分支目标缓冲)翻译成汉语是“分支目标缓冲/缓存” C2C: card-to-card interleaving,卡到卡交错存取翻译成汉语是“卡到卡交错存取” CAD: computer-aided design,计算机辅助设计翻译成汉语是“计算机辅助设计” CAM(Common Access Model,公共存取模型)翻译成汉语是“公共访问模型” CAS(Column Address Strobe,列地址控制器)翻译成汉语是“列地址选通” CBR(Committed Burst Rate,约定突发速率)翻译成汉语是“承诺突发速率” CC: Companion Chip(同伴芯片),MediaGX系统的主板芯片组翻译成汉语是“同伴芯片,MediaGX系统的主板芯片组” CCD(Charge Coupled Device,电荷连接设备)翻译成汉语是“电荷耦合器件” CCIRN: Coordinating Committee for Intercontinental Research Networking,洲翻译成汉语是“洲际研究网络协调委员会” CCM(Call Control Manager,拨号控制管理)翻译成汉语是“呼叫控制管理器” cc-NUMA(cache-coherent non uniform memory access,连贯缓冲非统一内存寻址)翻译成汉语是“缓存一致性非均匀内存访问” CCS(Cut Change System)翻译成汉语是“切割改变系统” CCT(Clock Cycle Time,时钟周期)翻译成汉语是“时钟周期” CDR(CD Recordable,可记录光盘)翻译成汉语是“可记录光盘” CD-ROM/XA(CD-ROM eXtended Architecture,唯读光盘增强形架构)翻译成汉语是“只读光盘扩展架构” CDRW(CD-Rewritable,可重复刻录光盘)翻译成汉语是“可重复刻录光盘” CDSL: Consumer Digital Subscriber Line(消费者数字订阅线路)翻译成汉语是“消费者数字用户线路” CE(Consumer Electronics,消费电子)翻译成汉语是“消费电子” CEM(cube environment mapping,立方环境映射)翻译成汉语是“立方环境映射” Center Processing Unit Utilization,中央处理器占用率翻译成汉语是“中央处理器占用率” CEO(Chief Executive Officer,首席执行官)翻译成汉语是“首席执行官”
CEO(执行董事)
CG(图形生成)
CGI(网关接口)
CHRP(通用硬件参考平台)
CIEA: 商业互联网交换协会
CIR(承诺信息速率)
CISC(复杂指令集计算)
CISC(复杂指令集计算)
Clipping(剪切纹理)
CLK(时钟周期)
时钟合成器
CLV(恒定线性速度)
CMOS: 补偿金属氧化物半导体
CMOS: 补偿金属氧化物半导体
CMOS: 补偿金属氧化物半导体
COB(板载缓存)
COB(板载缓存)
COD(芯片内缓存)
COD(芯片内缓存)
COM: 组件对象模型
COMDEX: 计算机分销展览会
compressed textures(压缩纹理)
协作命令引擎
COO(首席组织官)
CP: 陶瓷封装
CPGA(陶瓷针栅阵列)
CPGA(陶瓷针栅阵列)
CPGA: 陶瓷针栅阵列
CPS: 认证实践声明
CPU(中央处理单元)
CPU: 中央处理单元
CPU:中央处理单元
CRC: 循环冗余校验
CRT(阴极射线管)
CS(通道分离)
CSE(配置空间启用)
CSS(通用指令集)
CSS: 层叠样式表
CTO(首席技术官)
CTS(腕管综合征)
CTS(清除发送)
CVS(计算机视觉综合症)
DAC(数模转换器)
DAC: 双地址周期
DAE(数字音频提取)
数据前送
DB: 深度缓冲
DB: 设备插槽
DBS-PC: 直接广播卫星PC
DCD: XML文件内容描述
DCE: 数据电路终端设备
DCOM: 分布式组件对象模型
DCT: 显示压缩技术
DDC:显示数据通道
DDR SDRAM(双数据速率SDRAM)
DDSS II(第二代双层动力悬吊系统)
DDSS(双层动力悬吊系统)
DEC(直接蚀刻涂层)
Decal(印花法)
Decode(解码)
DES: 数据加密标准
DFL(动态聚焦镜头)
DFP(数字平面显示器)
DFS(数字灵活扫描)
DFS: 动态平面着色(可用于加速)
DHCP: 动态主机配置协议
DIB(双独立总线)
DIB: 双独立总线(包括L2缓存总线和PTMM总线)
DIC: 数字图像控制
Digital Multiscan II(数字智能多频追踪)
DIL(双列直插)
DIMM(双重内嵌式内存模块)
DIR(直接渲染基础)
方向性光源
DiscWizard(磁盘管理软件)
Dithering(抖动)
DLP(数字光处理)
DLS-2(第二代可下载音色)
DMA(直接内存访问)
DME: 直接内存执行
DMF: 分发媒体格式
DMI(桌面管理接口)
DMT: 离散多调模式
DNA: 分布式互联网应用程序
DNS(域名系统)
DOCSIS(线缆服务接口数据规格)
DOF(景深)
DOSD: 同屏数字化显示
DOSD: 数字屏显(Digital On Screen Display)
点距(Dot Pitch)
点型纹理融合(点纹理混合)
双缓冲(Double Buffering)
DP: 双核处理(Dual Processing)
DPC(桌面PC,桌面计算机)
DPMS(显示能源管理信号)
DQL(动态四极镜)
DRAM(动态随机存取存储器)
DRDRAM(直接RAMbus DRAM,直接RAMbus内存)
DS3D(DirectSound 3D流)
DSD(直接数字信号流)
DSL(可下载样本,可下载音色)
DSL: 数据选通链路(Data Strobe Link)
DSP(数字信号处理)
DST(驱动自检程序)
DTD: 文档类型定义(Document Type Definition)
DTE: 数据终端设备(Data Terminal Equipment)
DVD(数字视频光盘)
DVI(数字视频接口)
DX: 具有数学协处理器的CPU
ECC: 错误检查与纠正(Error Check Correct)
DxR: 动态可扩展分辨率(DynamicXTended Resolution)
DXTC(DirectX纹理压缩,基于S3TC)
动态Z缓冲(Dynamic Z-buffering),用于显示物体远近,可用于远景
EAX(环境音效扩展技术)
EB(扩展总线)
EBR(超额突发速率)
EC(嵌入式控制器)
EC(微型控制器)
ECC(错误检查与修正)
ECC: 椭圆曲线加密(Elliptic Curve Crypto)
ECRS: 入口调用返回堆栈(Entry Call Return Stack),用于代替RAM存储返回地址
E-DDC(增强型显示数据通道,增强型视频数据通道协议,定义了显示输出与主系统之间的通信通道,能提高显示输出的画面质量)
边缘抗锯齿(Edge Anti-aliasing)
E-EDID(增强型扩充身份识别数据,定义了电脑通信视频主系统的数据格式)
EEPROM(电擦写可编程只读存储器)
EFEAL(扩展场椭圆孔镜头)
EIDE(增强型集成驱动器电子)
EISA(增强型工业标准架构)
嵌入式芯片(嵌入式)
EMI(电磁干扰)
EMP: 紧急事件管理端口(Emergency Management Port)
环境映射凹凸映射(environment mapped bump mapping)
EPIC(显式并行指令代码)
EPIC: 显式并行指令计算(Explicitly Parallel Instruction Computing),是一个64位指令集
ERP(估计零售价)
ERP: 企业资源计划(Enterprise Requirement Planning)
ES(能源之星)
ESCD(扩展系统配置数据)
ESDJ(简化CPU双重跳线法)
ESP: 封装安全有效载荷(Encapsulating Security Payload)
执行缓冲区(Execute Buffers)
扩展突发传输(Extended Burst Transactions)
扩展立体声(Extended Stereo)
FADD(浮点加)
FAQ: 常见问题解答(Frequently Asked Questions)
FAT(文件分配表)
FBC(帧缓冲缓存)
FCPGA(反转芯片针脚栅格阵列)
FDBM(液态轴承马达)
FDC(软盘控制器)
FDD(软盘驱动器)
FDIV(浮点除)
FDM: 频率分割(Frequency Division Multi)
FEMMS:快速进入/退出多媒体状态(Fast Entry/Exit Multimedia State)
FFT(快速傅里叶变换)
FID(频率识别号码)
FIFO(先进先出队列)
FIR(有限脉冲响应)
FireWire(火线,即IEEE1394标准)
平面投影(Flat)
翻转双缓冲(flip double buffered)
芯片反转(flip-chip)
FLOP(每秒浮点操作数)
流控制(Flow-control)
FM(频率调制)
FM: 闪存(Flash Memory)
FMD ROM(荧光材料只读存储器)
FMUL(浮点乘)
雾化表画质(fog table quality)
雾化效果(Fog)
FPU(浮点运算单元)
FPU: 浮点处理单元(Floating-point Processing Unit)
FPU:浮点运算单元(Float Point Unit)
FR(频率响应)
帧数为王(Frames rate is King)
FRC: 帧率控制(Frame Rate Control)
FRC: 帧比率控制
FRC: 功能冗余检测(仅双核处理器具备此特性)
FRICC: 联邦研究互联网协调委员会
Front Buffer,前缓冲
FSAA(全景抗锯齿)
FSB: 前端总线,即外部总线
FSE(频率转换效果)
FSUB(浮点减法)
FTP(文件传输协议)
FWH(固件中心)
GART(图形地址重映射表)
GDI(图形设备接口)
Ghost:(通用硬件导向系统迁移)
Gigabyte
GMCH(图形与内存控制器中心)
GMR(巨型磁阻)
Gouraud Shading,高洛德着色,也称为内插法均匀着色
GPF(一般保护故障)
GPIs(通用输入)
GPS(全球定位系统)
GPU(图形处理器)
GTF(通用时间公式,定义了生成画面所需的时间,包括画面刷新率等)
GUI(图形用户界面)
GVPP(通用视觉处理器)
HAL(硬件抽象层)
硬件运动补偿
HCI: 主机控制器接口
HCT:硬件兼容性测试
HDA(硬盘组件)
HDSL: 高比特率数字用户线路
HDTV(高清电视)
HEL: 硬件仿真层
HiFD(高容量软盘)
高三角形计数
HL-PBGA: 表面贴装,高耐热、轻薄型塑料球状矩阵封装
HPS(高性能服务器)
HPW(高性能工作站)
HRTF(头部相关传输函数)
HTA: 超文本应用程序
HTML(超文本标记语言)
HTTP(超文本传输协议)
HVD(高压差分)
I/O(输入/输出)
I/O: 输入/输出
IA(英特尔架构)
IA: 英特尔架构
IA:英特尔架构
IAB: 因特网活动委员会
ICD(可安装客户端驱动程序)
ICH(输入/输出控制器中心)
ICMB: 机架内部管理总线
ICMP(因特网控制消息协议)
ICU(指令控制单元)
ID:识别,标识号码
ID:识别,标识号码
IDCT(逆离散余弦变换,GeForce的DVD硬件增强技术)
IDE(集成驱动器电子)
IDF(英特尔开发者论坛)
IETF(因特网工程任务组)
IETF: 因特网工程任务组
IEU(整数执行单元)
IHVs:独立硬件供应商
IID(双耳强度差异)
IIR(无限脉冲响应)
IKE: 因特网密钥交换协议
IMAP4: 第四版因特网消息存取协议
IMM: 英特尔移动模块
IMM: 英特尔移动模块
Immediate Mode,直接模式
INF File(信息文件)
INI File(初始化文件)
Instruction Coloring(指令着色)
Instructions Cache,指令缓存
Interactive 3D Audio(交互式3D音效)
Interactive Around-Sound(交互式环绕声)
Internet(因特网)
IP(网际协议)
IPC(每时钟周期指令数)
IPPR: 图像处理与模式识别
IR(红外线)
IrDA(红外线通信接口,可进行局域网存取和文件共享)
IRQ(中断请求)
IS: 内置堆栈
ISA(指令集架构)
ISA(指令集架构)
ISA: 工业标准架构
ISDN(综合业务数字网络)
ISO/MPEG: 国际标准化组织运动图像专家组
ISO/MPEG: 国际标准化组织活动图像专家小组
ISOC: 互联网协会
ISP(Internet Service Provider,因特网服务提供商)
ISVs:独立软件销售商
ITD(Interaural Time Difference,双耳时间差)
JIT: 及时制生产
JVM: Java虚拟环境
KBC(KeyBoard Control,键盘控制单元)
KNI(Katmai New Instructions,Katmai新指令集,即MMX2)
KNI(Katmai New Instructions,Katmai新指令集,即SSE)
重装电脑显示dbcghost 重装电脑显示dbcghost()一、概述HMAC(基于哈希的消息认证码)是由H.Krawezyk,M.Bellare和R.Canetti于1996年提出的一种基于哈希函数和密钥的消息认证方法,并于1997年作为RFC2104被发布,在IPSec和其他网络协议(如SSL)中得到广泛应用,现已成为互联网安全的事实标准。它可以与任何迭代散列函数配合使用。
HMAC算法除了需要消息摘要算法外,还需要一个密钥。HMAC的密钥可以是任何长度,如果密钥的长度超过了摘要算法信息分组的长度,则首先使用摘要算法计算密钥的摘要作为新的密钥。通常不建议使用太短的密钥,因为密钥的长度与安全强度相关。通常选取的密钥长度不小于所选用摘要算法输出的信息摘要的长度。
HMAC认证的主要目的是为了能够验证对方身份的正确性和消息的有效性,与消息摘要的最大不同之处在于有签名密钥。而摘要算法,只是能够证明消息的有效性。HMAC被广泛应用于网络协议的认证阶段,例如邮件协议使用到了它,SSL也有它的存在。
二、举例说明 HMAC的核心思想是身份认证和消息有效性认证。 1、前提条件在消息认证码生成的一方和校验的一方,必须有一个共同的密钥。双方约定使用相同的哈希函数对数据进行运算。2、流程发送者:发送原始消息将原始消息生成消息认证码:哈希函数(原始消息+密钥)=散列值(消息认证码)将消息认证码发送给对方接收者:接收原始数据接收消息认证码校验:哈希函数(接收的消息+密钥)*哈希函数=散列值,将本地计算的散列值和接收的散列值进行比较。
三、HMAC算法表示 算法公式: HMAC(K,Text)= H((K⊕opad)| H((K⊕ipad)| Text)) H代表所采用的HASH算法(如MD5、SHA1、SHA-256等)。 K代表认证密码。 Text代表一个消息输入。 ⊕代表异或。 |表示两个消息合并。 Opad用0x5c重复填充大小为B的数组。 Ipad用0x36重复填充大小为B的数组。 Apad用0x878FE1F3重复(L/4)次。 B代表H中所处理的块大小,这个大小是处理块大小,而不是输出hash的大小。 如MD5、SHA-1和SHA-256对应B= 64, SHA-384和SHA-512对应B= 128。 L表示hash结果的大小,L=16 for MD5, L=20 for SHA-1。 C演示代码表示: void hmac_md5(text, text_len, key, key_len, digest)unsigned chartext;/ pointer to data stream/int text_len;/ length of data stream/unsigned charkey;/ pointer to authentication key/int key_len;/ length of authentication key/unsigned chardigest;/ output: digest/{ unsigned char tk[16]; unsigned char k_ipad[64];/ inner padding- key XOR with ipad/ unsigned char k_opad[64];/ outer padding- key XOR with opad/ MD5_CTX context;/ if key is longer than 64 bytes reset it to key=MD5(key)/ if(key_len> 64){ MD5_CTX tctx; MD5Init(&tctx); MD5Update(&tctx, key, key_len); MD5Final(tk,&tctx); key= tk; key_len= 16;}/ start out by storing key in pads/ memset(k_ipad, 0, sizeof(k_ipad)); memset(k_opad, 0, sizeof(k_opad)); memcpy(k_ipad, key, key_len); memcpy(k_opad, key, key_len);/ XOR key with ipad and opad values/ for(int i=0; i<64; i++){ k_ipad[i] ^= 0x36; k_opad[i] ^= 0x5c;}/ perform inner MD5/ MD5Init(&context);/ init context for 1st pass/ MD5Update(&context, k_ipad, 64)/ start with inner pad/ MD5Update(&context, text, text_len);/ then text of datagram/ MD5Final(digest,&context);/ finish up 1st pass// perform outer MD5/ MD5Init(&context);/ init context for 2nd pass/ MD5Update(&context, k_opad, 64);/ start with outer pad/ MD5Update(&context, digest, 16);/ then results of 1st hash/ MD5Final(digest,&context);/ finish up 2nd pass*/}四、运算步骤如果密钥K的长度大于B的字长,对密钥K计算hash(K),结果作为输入密钥;在密钥K后面添加0来创建一个字长为B的字符串(例如,如果K的字长是20字节,B=64字节,则K后会加入44个零字节0x00);将第(2)步生成的B字长的字符串与ipad做异或运算;将数据流text补充至第(3)步的结果字符串的尾部;用H作用于第(4)步生成的数据流;将第(2)步生成的B字长字符串与opad做异或运算;再将第(6)步的结果补充至第五步的结果的尾部;用H作用于第(7)步生成的数据流,输出最终结果。
由上述描述过程,我们知道HMAC算法的计算过程实际上是对原文做了两次类似于加盐处理的哈希过程。HMAC的密钥长度可以是任意大小,如果小于n(hash输出值的长度),那么将会削弱算法的安全强度。建议使用长度大于n的密钥,但是采用长度大的密钥并不意味着增强了函数的安全性。密钥应该是随机选取的,可以采用一种强伪随机发生器,并且密钥需要定期更新,这样可以减少弱密钥的危险性以及已经暴露密钥所带来的破坏。
通过上述描述过程,我们了解到HMAC算法的计算过程实际上是对原文进行了两次类似于加盐的哈希处理。HMAC的密钥长度可以是任意长度,若小于n(哈希输出值的长度),则会降低算法的安全性强度。建议使用长度超过n的密钥,但使用较长的密钥并不意味着提高了函数的安全性。密钥应当是随机选择的,可以采用一种强伪随机发生器,并且密钥需要定期更换,这样可以降低弱密钥的风险以及已泄露密钥带来的损害。
五、计算结果展示 消息:ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 密钥:i love you
HMAC函数 计算结果 字节长度 1 Hmac-md2 62b22a645d7f331422b4d087e0558675 16 2 Hmac-md4 fbff23b3c9903291fdc5a00d410b77a8 16 3 Hmac-md5 79e44af262dc67cf7feefc2a08a2fda6 16 4 Hmac-sha1 ea1a4b8e9185f607ba02b9773cb7dadd736de12b 20 5 Hmac-sha256 8635a9cfa8c0f8569cb08b4268446df0c5a9088a407b25a09dd5f050bd0d5cf7 32 6 Hmac-sha512 4e9efe08ad0229636975e9f756c6802cce93e75adbfaacf94cad9bdf9dba35a9e3bdd42619bce98b6d4c118b8a7431bb9b15ea88ba26d8de365252c7308be39b 64 7 Hmac-sha224 5235a3edbc52ed72fb1cc3bb9d32745b56eaee4e91a056019ee75116 28 8 Hmac-sha384 15ae925c4dc725c155a5155c7877e0fd29b7dc6f2e811f2b0252112a7aa2fee3cf2ee40f8642805850862e0ffb601053 48 9 Hmac-sha3-224 9d53a512f6cc446734627cdea59057c254db3bbc7f490a35e680fd08 28 10 Hmac-sha3-256 df7cd9e4c124a764ae151694b2acae7cec0490a0ddeece8e9e76023afdbf5dbc 32 11 Hmac-sha3-384 4bb7e1eda41dd5b803b1bfbdf93070d757b18c6e18e759155bfd2fed5000ef4d4630b2d55ad2f0a6d18631b2c338c997 48 12 Hmac-sha3-512 bf8c6284396c6c3fab7bab7558109715ed40c9b8012391fd51c23f5c57143aa1aba7dd5e0a2106fbda3e0c4d547015aa2911ce9049201409bd618cd71b87b3e8 64
六、支持的散列函数 目前用于对消息进行认证的主要方式有2种:消息加密和消息认证码。 消息加密:它利用分组密码对整个消息加密,将密文作为认证符;消息认证码:秘钥+散列函数。 消息认证码的方式比消息加密的方式计算速度更快,这对于高速网络业务处理来说,分秒必争。 消息认证码的关键是散列函数的选择,这就要在安全强度和速度两方面综合考虑。 HMAC算法首先它是基于消息摘要算法的,目前主要集合了MD和SHA两大系列消息摘要算法,其中MD系列的算法有HMAC-MD2、HMAC-MD4、HMAC-MD5三种算法;SHA系列的算法有HMAC-SHA1、HMAC-SHA224、HMAC-SHA256、HMAC-SHA384、HMAC-SHA512五种算法。 HMAC算法还支持大量的消息摘要算法:md5、sha1、sha256、sha512、adler32、crc32、crc32b、fnv132、fnv164、fnv1a32、fnv1a64、gost、gost-crypto、haval128,3、haval128,4、haval128,5、haval160,3、haval160,4、haval160,5、haval192,3、haval192,4、haval192,5、haval224,3、haval224,4、haval224,5、haval256,3、haval256,4、haval256,5、joaat、md2、md4、ripemd128、ripemd160、ripemd256、ripemd320、sha224、sha3-224、sha3-256、sha3-384、sha3-512、sha384、sha512/224、sha512/256、snefru、snefru256、tiger128,3、tiger128,4、tiger160,3、tiger160,4、tiger192,3、tiger192,4、whirlpool。
七、HMAC独特优势 与数字签名相比,HMAC并不完美,存在一个缺点和两个无法解决的问题。 缺点:密钥分发困难。 无法解决的问题:不能进行第三方证明和不能防止否认。 理想往往败给现实,数字签名需要分发公钥与私钥,且签名验证速度慢,证书颁发还要到专门的机构申请和缴费。HMAC对密码的使用处理比较简单,对于要求快速处理的业务来说,其好处的吸引力非常诱人。 而与分组密码认证相比,HMAC有几大优势: 一般的散列函数的软件执行速度比分组密码更快;密码散列函数的库代码来源广泛;如果找到或需要更快或更安全的散列函数,能够很容易地代替原来嵌入的散列函数。
八、典型应用 1、IPSec和SSL协议中的应用 HMAC算法广泛应用于互联网的安全认证和安全传输中。 在浏览网页时,https开头的网址都是用到了SSL协议,用于保证网页内容的安全,这是由HMAC算法实现的。 IPSec VPN是实现远程接入的一种VPN技术,IPSec全称为Internet Protocol Security,在公网上为两个私有网络提供安全通信通道,通过加密通道保证连接的安全—在两个公共网关间提供私密数据封包服务。在使用公网传送内部专网的内容时,IPSec VPN在IP传输上通过加密隧道,保证在IP公网上传输的数据的安全性,从而实现总部到分支机构之间的语音,视频等数据的互通。如今,很多国际的企业已经把VPN作为总部到分支机构的主要连接手段,比如国际大型的组织,商业机构,连锁门店已经采用VPN这种安全的技术。这种VPN技术中就使用了HMAC算法。
2、API接口签名验证 我们在网上购物、买票、银行转账、炒股等都用到了HMAC算法。各大银行和BAT大厂的后台与前端都用到了API接口签名验证。 用户需要先在网站上申请key、secret,然后校验流程如下: 方法一参数方式 请求接口: 客户端: 1>生成当前时间戳timestamp=now和唯一随机字符串nonce=random;
1>生成当前时间戳timestamp=now及唯一的随机字符串nonce=random; 2>根据请求参数名的字母顺序对非空请求参数进行排序(包括accessKey); stringA="home=world&name=hello&work=java&accessKey=key×tamp=now&nonce=random"; 3>通过HMAC-SHA256算法计算签名signature=HMAC-SHA256(secret, stringA); 4>最终请求 . 服务器: 1>根据请求参数名的字母顺序对非空请求参数进行排序(包括accessKey); stringB="home=world&name=hello&work=java&accessKey=key×tamp=now&nonce=random"; 2>通过key在数据库获取secret; 3>通过HMAC-SHA256算法计算签名signature=HMAC-SHA256(secret, stringB); 4>将生成的签名signature与接收到的签名串进行比较。 方法二请求体Body方式 客户端: 1>将请求参数封装成JSON字符串,即请求体body; 2>使用HMAC-SHA256算法加上secret对Msg(请求url+timestamp+nonce+body)进行加密,生成摘要signature; 3>将key和signature放入header中,一并发送给服务器。 服务器: 1>获取请求中的请求体body字符串; 2>使用HMAC-SHA256算法加上secret(通过header中的key在数据库获取)对Msg(请求url+timestamp+nonce+body)进行加密,生成摘要signature; 3>服务端生成的摘要串与客户端通过header传递过来的摘要串进行比较。 timestamp+nonce方案(防止重放攻击) nonce指唯一的随机字符串,用于标识每个被签名的请求。通过为每个请求提供一个唯一的标识符,服务器可以防止请求被多次使用(记录所有使用过的nonce以防止它们被二次使用)。 假设客户端和服务器最多允许存在15分钟的时间差,并记录服务端的nonce集合。当新的请求到来时,首先检查携带的timestamp是否在15分钟内,如超出时间范围,则拒绝;然后查询携带的nonce,如存在于已有集合中,则拒绝。否则,记录该nonce,并删除集合内时间戳大于15分钟的nonce(可以使用redis的expire,在新增nonce的同时设置它的超时失效时间为15分钟)。 注意使用HMAC-SHA256更为安全,而且我们可以直接将请求参数封装成JSON字符串放入请求体中(也就是通过io流)进行传递。 方法三 Token+AppKeyToken身份验证 1>用户登录向服务器提供认证信息(如账号和密码),服务器验证成功后返回Token给客户端; 2>客户端将Token保存在本地,后续发起请求时,携带此Token; 3>服务器检查Token的有效性,有效则放行,无效(Token错误或过期)则拒绝。 为客户端分配AppKey(密钥,用于接口加密,不参与传输)将所有请求参数组合成串,根据HMAC+AppKey签名算法生成签名值,发送请求时将签名值一起发送给服务器验证。这样,即使Token被劫持,对方不知道AppKey,就无法伪造请求和篡改参数。再结合重发攻击解决方案,即使请求参数被劫持也无法伪造二次重复请求。3、客户端与服务器身份认证 (1)客户端先向服务器发送一个验证请求; (2)服务器接收此请求后生成一个随机数并通过网络传输给客户端(此为挑战); (3)客户端将收到的随机数提供给ePass,由ePass使用该随机数与存储在ePass中的密钥进行HMAC-MD5运算并得到一个结果作为认证证据传给服务器(此为响应); (4)与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端电脑传回的响应结果相同,则认为客户端是一个合法用户。
