硬件动态令牌特性动态口令生成算法C语言实现用例计算输入输出用例.docx
- 文档编号:2059171
- 上传时间:2022-10-26
- 格式:DOCX
- 页数:19
- 大小:20.73KB
硬件动态令牌特性动态口令生成算法C语言实现用例计算输入输出用例.docx
《硬件动态令牌特性动态口令生成算法C语言实现用例计算输入输出用例.docx》由会员分享,可在线阅读,更多相关《硬件动态令牌特性动态口令生成算法C语言实现用例计算输入输出用例.docx(19页珍藏版)》请在冰豆网上搜索。
硬件动态令牌特性动态口令生成算法C语言实现用例计算输入输出用例
附 录 A
(规范性附录)
硬件动态令牌特性
A.1 令牌硬件要求
高温
使用GB/T2423.2-2008中试验方法Bb,严酷等级选择温度:
+50℃,持续时间:
2h。
低温
使用GB/T2423.1-2008中试验方法Ab,严酷等级选择温度:
-10℃,持续时间:
2h。
高低温冲击
使用GB/T2423.22-2002,严酷等级选择高温温度:
+50℃,低温温度:
-10℃,暴露试验时间:
10min,转换时间:
(2~3)min,循环数:
3个。
湿度
使用GB/T2423.9-2001,严酷等级选择温度:
30℃±2℃,相对湿度93%±3%,试验时间:
2h。
工作海拔
使用GB/T2423.21-1991,严酷等级选择气压:
55kPa,持续时间:
2h。
跌落
使用GB/T2423.8-1995中方法一,严酷等级选择跌落高度:
1000mm。
防尘防水
遵守GB/T4208-2008中IP44的要求。
标记和印刷
使用GB/T2423.53-2005,试验液体:
人工合成汗液,力的大小:
1N±0.2N,循环次数:
1000次。
产品必须具备标记文字为:
“序列号”和“有效期”。
振动
使用GB/T2423.10-2008,严酷等级选择频率范围:
10Hz到300Hz,振动幅值:
3.5mm,持续时间:
60min。
静电放电
不低于GB/T17626.2-2006中试验等级3的标准,即满足外壳端口接触放电±6kV,空气放电±8kV。
试验过程中试验样品是否处于工作状态的判断标准
样品带电运行,目视检查,提供最少12个显示相同动态口令的样品,6个一组为参与试验样品,6个一组为不参与试验样品,参与试验的样品显示动态口令与不参与试验样品一致即为合格。
A.2 令牌安全特性
种子密钥安全
种子密钥为令牌重要安全要素,令牌必须保证产品内的种子密钥的完整性,且种子密钥为单向导入令牌(或在令牌内生成),种子密钥不能被导出产品外部。
令牌必须拥有种子密钥的保护功能。
令牌种子密钥加密、存储、使用在令牌芯片的安全区域内实现。
令牌芯片安全
本标准涉及的令牌芯片,应是国家密码管理局批准产品型号证书的安全芯片。
令牌物理安全
令牌具有低电压检测功能。
令牌完成种子密钥导入后,通讯I/O端口应失效,不能再输入或输出信息,包括但不限于内部参与口令生成运算的K、T、C信息。
令牌应防范通过物理攻击的手段获取设备内的敏感信息,物理攻击的手段包括但不限于开盖、搭线、复制等。
令牌芯片必须具备令牌掉电后,会自动销毁种子密钥的措施。
令牌芯片应保证种子密钥无法通过外部或内部的方式读出,包括但不限于:
调试接口、改编的程序。
令牌芯片可防范通过物理攻击的手段获取芯片内的敏感信息,确保种子密钥和算法程序的安全性。
令牌芯片应具备抵抗旁路攻击的能力,包括但不限于:
抗SPA/DPA攻击能力,抗SEMA/DEMA攻击能力。
在外部环境发生变化时,令牌芯片不应泄漏敏感信息或影响安全功能。
外部环境的变化包含但不限于:
高低电压、高低温、强光干扰、电磁干扰、紫外线干扰、静电干扰。
使用安全
具有数字和功能按键的令牌必须具有PIN保护功能,PIN长度不少于6位,并具有PIN防暴力穷举功能。
令牌可具有PIN找回功能,即令牌用户如果忘记令牌PIN,可通过安全有效的环境与机制找回令牌PIN,或对令牌PIN进行重新设置(如远程解PIN)。
PIN输入错误的次数不可超过5次,若超过,应至少等待1h才可继续尝试。
PIN输入超过最大尝试次数的情况不可超过5次,否则令牌应永久锁定,不可再使用。
令牌基本使用寿命为3年,令牌产品最长使用不超过5年。
室温环境下,令牌时间偏差小于2min/年。
安全评估
动态令牌产品安全评估遵守以下国标规定:
GB/T18336.1-2008
GB/T18336.2-2008
GB/T18336.3-2008
GB/T21079.1-2007
附 录 B
(资料性附录)
动态口令生成算法C语言实现用例
B.1 采用SM3的动态口令生成算法用例
#include
#include
#include
#include"sm3.h"
#include"sm_dpwd.h"
#ifdef__cplusplus
#defineINLINEinline
#else
#defineINLINE
#endif
INLINEboolIsBigEndian()
{
unionT
{
charc[2];
shorts;
};
Tt;
t.s=0x0031;
if(t.c[1]==0x31)
{
returntrue;
}
returnfalse;
}
INLINEboolIsLittleEndian()
{
return!
IsBigEndian();
}
INLINEuint32Reverse32(uint32x)
{
return((x&0x000000ff)<<24)
|((x&0x0000ff00)<<8)
|((x&0x00ff0000)>>8)
|((x&0xff000000)>>24);
}
INLINEuint64Reverse64(uint64x)
{
uint32nTemp[3]={0};
memcpy(nTemp+1,&x,sizeof(uint64));
nTemp[0]=Reverse32(nTemp[2]);
nTemp[1]=Reverse32(nTemp[1]);
return*(uint64*)nTemp;
}
INLINEsm_wordML(byteX,uint8j)
{
if(IsBigEndian())
{
return(sm_word)(X<<(j%32));
}
else
{
returnReverse32((sm_word)(X<<(j%32)));
}
}
INLINEsm_wordSUM(sm_wordX,sm_wordY)
{
if(IsBigEndian())
{
return(X+Y);
}
else
{
returnReverse32(Reverse32(X)+Reverse32(Y));
}
}
intTruncateSM3(INbytepSrc[32],INintnSrcLen,OUTbytepDst[4],INintnDstSize)
{
if(nSrcLen!
=32||nDstSize<4)
{
return-1;
}
memset(pDst,0,nDstSize);
byte*S=(byte*)pSrc;
sm_wordS1=ML(S[0],24)|ML(S[1],16)|ML(S[2],8)|ML(S[3],0);
sm_wordS2=ML(S[4],24)|ML(S[5],16)|ML(S[6],8)|ML(S[7],0);
sm_wordS3=ML(S[8],24)|ML(S[9],16)|ML(S[10],8)|ML(S[11],0);
sm_wordS4=ML(S[12],24)|ML(S[13],16)|ML(S[14],8)|ML(S[15],0);
sm_wordS5=ML(S[16],24)|ML(S[17],16)|ML(S[18],8)|ML(S[19],0);
sm_wordS6=ML(S[20],24)|ML(S[21],16)|ML(S[22],8)|ML(S[23],0);
sm_wordS7=ML(S[24],24)|ML(S[25],16)|ML(S[26],8)|ML(S[27],0);
sm_wordS8=ML(S[28],24)|ML(S[29],16)|ML(S[30],8)|ML(S[31],0);
sm_wordOD=SUM(SUM(SUM(SUM(SUM(SUM(SUM(S1,S2),S3),S4),S5),S6),S7),S8);
memcpy(pDst,&OD,sizeof(sm_word));
return0;
}
#defineSM_DPWD_KEY_LEN_MIN(128/8)
#defineSM_DPWD_CHALLENGE_LEN_MIN(4)
#defineSM_DPWD_LEN_MAX(10)
#defineSM_HASH_OUT_LEN(32)
intSM3_DPasswd(INbyte*pKey,INintnKeyLen,INuint64*pTime,INuint64*pInterval,INuint32*pCounter,
INchar*pChallenge,INintnGenLen,OUTchar*pDynPwd,INintnDynPwdSize)
{
if(pKey==NULL||(pTime==NULL&&pCounter==NULL&&pChallenge==NULL)
||pDynPwd==NULL||nKeyLen
||(pChallenge!
=NULL&&strlen(pChallenge) ||nDynPwdSize { returnSM_DPWD_PARAM_ERROR; } memset(pDynPwd,0,nDynPwdSize); //T=To/Tc if(pTime! =NULL&&pInterval! =NULL&&*pInterval! =0) { *pTime=(*pTime)/(*pInterval); } //Converttobig-endian. if(! IsBigEndian()) { if(pTime! =NULL) { *pTime=Reverse64(*pTime); } if(pCounter! =NULL) { *pCounter=Reverse32(*pCounter); } } intoffset=0; byte*sm_i=NULL; bytesm_o[SM_HASH_OUT_LEN]={0}; intsm_i_len=0; intsm_o_len=sizeof(sm_o); uint32pwd={0}; //ID(T|C|Q)Lengthatleast128bits sm_i_len=(pTime? sizeof(ui
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 硬件 动态 令牌 特性 口令 生成 算法 语言 实现 计算 输入输出