哈希函数生日悖论攻击法及其在消息认证中的应用

需积分: 6 9 下载量 30 浏览量 更新于2024-07-12 收藏 861KB PPT 举报
"哈希函数的生日悖论攻击法" 哈希函数的生日悖论攻击法是密码学中的一种攻击方法,它利用了生日悖论原理来攻击哈希函数。生日悖论是指在一组随机事件中,找到至少两个事件相同的概率远远大于人们的直觉。 在哈希函数的生日悖论攻击法中,攻击者可以通过计算找到两个不同的输入,使得它们的哈希值相同。这意味着攻击者可以伪造一个消息,使得它的哈希值与原来的消息相同,从而攻击哈希函数的安全性。 在这个攻击法中,k个人有不同生日的概率可以用以下公式计算: Q(365, k) = (365!/(365-k)!)/365^k k个人中至少有两个人有相同生日的概率是: P(365, k) = 1 - Q(365, k) 通过计算,可以得出结论:当 k = 23 时,P(365, 23) = 0.5073,意味着在 23 个人中,至少有两个人同一天生的概率大于 1/2;当 k = 100 时,P(365, 100) = 0.999997,意味着在 100 人中,至少有两个人同一天生的概率非常高。 这也可以解释为什么在 23 人中,找到两人同一天生的概率大于 1/2。因为在 23 人中,考虑某一个人的特定生日,在剩下的 22 人中能找到相同特定生日的概率是很小的,即使剩余每个人都有不同的生日,也只有 22/365 的概率;但是只考虑同一天生,只有 253 种不同的组合。所以只要 23 人,找到两人同一天生的概率大于 1/2:253/365。 在现代密码学理论与实践中,哈希函数是一种重要的密码技术,用于消息认证和数据完整性验证。哈希函数可以将可变长度的消息映射为固定长度的散列值,以便验证消息的完整性和身份验证。 在消息认证中,哈希函数通常与秘密密钥捆绑起来,以提供身份验证和消息完整性验证。消息认证码(MAC)是一种需要使用秘密密钥的算法,以可变长的消息和秘密密钥作为输入,产生一个认证码。 在现代密码学理论与实践中,还有其他消息认证方法,例如消息加密和数字签名等。但是,哈希函数仍然是最常见的消息认证技术之一。 哈希函数的生日悖论攻击法是一种攻击哈希函数的方法,利用生日悖论原理来攻击哈希函数的安全性。在现代密码学理论与实践中,哈希函数是一种重要的密码技术,用于消息认证和数据完整性验证。
2023-06-09 上传

void S1mmeSession::CtEncodeKqi(S1MMEKQI* kqi, S1APNode* p_node, uint8_t worker_id) { MsgCommonInfo& common = p_node->GetCommonInfo(); SPUserInfo& sp_user_info = p_node->GetUserInfo(); //获取 buf TlvEncoder* p_encoder_cur = g_p_encoder_[worker_id]; YdCDR_T* p_dst_data = (YdCDR_T*)malloc(sizeof(YdCDR_T)); if (p_dst_data == NULL) { return; } p_dst_data->not_associate = 0; if ((common.not_associate & 0x03) == 0x03) p_dst_data->not_associate = 1; p_encoder_cur->Set(p_dst_data->cdr_data,kMaxOneCdrBufLen); uint64_t imsi = sp_user_info->GetIMSI(); if(common.eci == 0) { common.eci = sp_user_info->GetEci(); } uint16_t tmp_enbid = common.tac;//>>8; //uint32_t tmp_enbid = (common.eci >> 8)&0xfffff; char xdrid_str[32]={0}; #ifdef OPEN_NEW_HUISU convert_xdrid_to_string(xdrid_str, kqi->xdrid, s_xdr_id_len); #else #ifdef OPENCTPR g4sigtran::pr::ProcBlock* p_blk = kqi->binary_block_in_xdr_.GetBlock(); p_blk->SerializeXid(xdrid_str, sizeof(xdrid_str)); #else uint64_t subcdrid = g_ct_xdr_id.GetXid(); //reverse subend; if(::is_open_reverse) { SetReverseSubend(p_node, subcdrid); } #ifdef ONE_THIRD_YUNNAN_MRO g_ct_xdr_id.Serialize((uint8_t*)xdrid_str, s_xdr_id_len, imsi); #else g_ct_xdr_id.Serialize((uint8_t*)xdrid_str, s_xdr_id_len); #endif #endif #endif struct timespec start_time = kqi->request_time_, end_time = kqi->response_time_; if (kqi->request_time_.tv_sec == 0) { if (!(kqi->response_time_.tv_sec == 0)) { start_time = kqi->response_time_; } else if (!(kqi->complete_time_.tv_sec == 0)) { start_time = kqi->complete_time_; } }要求:在S1mmeSession::CtEncodeKqi函数后面新加一个函数,来维护一组key、value的关系。 key为:imsi value为:imsi、imei、common.eci、common.tac、last_time 当imsi相同时,以最后一条记录的value内容为准进行保存;imsi不同时直接插入。请用C++实现该功能,需要用到哈希的知识点

2023-06-13 上传