20、现代密码学中的哈希函数及其应用

现代密码学中的哈希函数及其应用

1. 哈希函数的安全性概念

在实际应用中,无密钥的密码哈希函数在实际用途上具有抗碰撞性。尽管碰撞对必然存在,但由于它们未知且在计算上难以找到,所以基于抗碰撞哈希函数的方案的安全性证明仍然是有意义的。在正式证明依赖于抗碰撞性的结果时,通常会考虑带密钥的哈希函数,而在其他情况下,一般假设使用无密钥的哈希函数。

除了抗碰撞性,还有一些较弱的安全性概念:
- 第二原像抗性 :给定 (s) 和一个均匀的 (x),一个概率多项式时间(ppt)对手很难找到一个 (x’ \neq x),使得 (H_s(x’) = H_s(x))。
- 原像抗性 :给定 (s) 和 (y = H_s(x))(其中 (x) 是均匀的),一个 ppt 对手很难找到一个值 (x’)(无论是否等于 (x)),使得 (H_s(x’) = y)。

可以直观地看出,任何抗碰撞的哈希函数也具有第二原像抗性,而具有第二原像抗性的哈希函数也具有原像抗性。

2. Merkle–Damgård 变换

许多应用需要能够处理非常长甚至任意长度输入的“成熟”抗碰撞哈希函数。然而,构造只接受“短”输入的固定长度哈希函数(即压缩函数)要容易得多。Merkle–Damgård 变换可以将固定长度的哈希函数转换为处理任意长度输入的哈希函数。这种方法在实践中经常被使用,例如 MD5 和 SHA 哈希家族。

假设压缩函数 ((Gen, h)) 接受长度为 (n + n’\geq 2n) 的输入,并生成长度为 (n) 的输出。通过以下步骤构造哈希函数 ((Gen, H

相关推荐

密码学基础

一、密码学的基本概念 密码学是一门古老又现代的学科,古代密码学是以神秘性和艺术性的字谜呈现,而现代密码学,作为数学、计算机、电子、通信、网络的一门交叉学科,广泛应用于军事、商业和现代社会人们生产生活的方方面面。随着密码学的不断发展,已经成为构建安全信息系统的核心。 二、密码学发展历史 1.古典密码学阶段 典型范例是凯撒密码,凯撒密码采用位移加密手段,通过位移对字符进行加密,规则很简单,破解也非常简单,此阶段的密码只依赖于算法。 凯撒密码位移加密规则对照(部分) 20世纪2

PICACHU+++的博客 8575

1、现代密码学中的哈希函数:原理、应用与挑战

本文全面探讨了现代密码学中哈希函数的原理、应用与挑战。从密码学的演变谈起,重点分析了哈希函数的基本特性及其在数据完整性、密码存储、数字签名和区块链等领域的广泛应用。同时,深入解析了随机预言机方法及其在理论与实践中的局限性,讨论了哈希函数的构造方式以及面临的各种安全挑战。此外,还总结了哈希函数的实际应用流程,并展望了其未来发展趋势,旨在为密码学研究和实际应用提供参考。

c6d7e8f9g的博客 154

24、现代密码学中的哈希函数与对称密钥原语实践

本博客深入探讨了现代密码学中的哈希函数与对称密钥原语,重点分析了哈希函数在承诺方案、消息认证码(MAC)和Merkle树中的应用及其安全性。同时,介绍了流密码的基本构造,包括Trivium、RC4和ChaCha20等主流算法,并讨论了线性反馈移位寄存器(LFSR)的工作原理与安全性改进。博客还涵盖哈希函数的组合安全性、Merkle-Damgård变换的安全隐患以及相关练习的解答思路,旨在为读者提供对密码学基础原语的全面理解与实践指导。

cuda7parallel的博客 84

20、哈希函数及其应用解读

本文深入解读了哈希函数的安全性概念及其在现代密码学中的核心应用。首先介绍了抗碰撞性、第二原像抗性和原像抗性等关键安全属性,并分析了它们之间的层次关系。随后详细阐述了Merkle-Damgård变换如何将固定长度压缩函数扩展为支持任意输入的哈希函数,及其安全性证明。文章进一步探讨了基于哈希函数的消息认证机制,包括Hash-and-MAC和HMAC的构造原理与安全性差异,并通过mermaid流程图直观展示其结构。此外,还系统分析了哈希函数面临的暴力攻击、碰撞攻击和长度扩展攻击等威胁,提出了相应的防范策略。最后结

mango的博客 73

74、密码学中的密钥派生与哈希函数构造

本文深入探讨了密码学中的密钥派生与哈希函数构造,重点分析了PBKDF2的工作原理及其局限性,介绍了更安全的替代方案如scrypt和Argon2。同时回顾了哈希函数的发展历程,包括MD4、MD5、HMAC等,并探讨了如何构建接近随机预言机的哈希函数。文章还介绍了不可区分性和通用计算提取器(UCEs)等理论框架,以及它们在提升哈希函数安全性中的作用,最后给出了密钥派生和哈希函数构造的实际应用建议及未来发展趋势。

c6d7e8f9g的博客 187

7、对称密码学基础与哈希函数应用

本文深入探讨了对称密码学基础与哈希函数在现代信息安全中的核心作用,涵盖密码学提供的机密性、完整性、认证、不可否认性和可问责性等安全服务。详细介绍了无密钥原语中的随机数生成器与哈希函数,重点分析了SHA-256和SHA-3(Keccak)的结构与应用,并阐述了Merkle树和Merkle Patricia树在区块链中的高效数据验证机制。同时,文章还讨论了分布式哈希表的工作原理,以及哈希函数在比特币PoW机制和以太坊地址生成中的实际应用。最后,从安全性角度评估了主流哈希函数,并提出了对称加密中密钥管理、算法选择

7up55的博客 44

密码学在区块链中的应用 【八】

密码学在区块链中的应用 【8】 区块链相关密码学 数据的组织方式,区块链的块链结构。通过块的哈希链接起来的链。 世界状态:使用 merkle 哈希树组织,便于快速检索和网络传输。如账户树,交易树,账单树等。hash 函数保证数据完整性。sha256/RIPEMD160 布隆过滤器:轻客户端快速索引交易。 椭圆曲线签名算法。签名认证,确认信息发送方的身份,确认区块链上信息的来源。 访问控制与隐私保护:可以确定谁在什么条件下可做什么事,保证区块链上加密的数据只被授权用户看到。如属性加密 秘钥交换协议:

smilejiasmile的博客 1526

应用密码学与现代密码学原理及实战解析

密码学(Cryptography)源自希腊语“kryptos”(隐藏)和“graphein”(书写),意为“秘密书写的技术”。其核心目标是通过对信息进行编码,使得只有授权接收者能够解读其内容。密码学的历史可追溯至古埃及象形文字和古罗马的凯撒密码,随着计算机和互联网的发展,现代密码学逐渐演变为一门融合数学、计算机科学与工程学的交叉学科。现代密码学不仅限于信息加密,还涵盖了数据完整性验证、身份认证和不可否认性等安全目标。使用 HMAC 而非简单哈希进行认证;每次请求包含时间戳和随机数;

weixin_31961675的博客 665

现代密码学教程谷利泽课后答案解析与应用

零知识证明(Zero-Knowledge Proof,ZKP)是一种密码学技术,允许一方(证明者)向另一方(验证者)证明某个断言是正确的,而无需提供任何有关该断言的信息。这种证明方法的核心在于,它不仅能够证实信息的真实性,同时还确保了证明过程中的隐私性。更进一步,零知识证明保证了即使验证者具有无限的计算能力,也无法从证明过程中获得任何有用的信息。基本原理零知识证明建立在这样的基础上:在不暴露任何私有信息的前提下,证明者能够使验证者信服某个命题是真的。

weixin_35835030的博客 930

别再死磕U-Net了!用PyTorch手把手教你搭建ResUnet,搞定医学图像分割(附完整代码)

本文详细介绍了如何利用PyTorch搭建ResUnet模型,通过引入残差连接解决医学图像分割中的梯度消失、特征退化和细节丢失问题。与传统U-Net相比,ResUnet在Dice系数和收敛速度上均有显著提升,特别适合处理脑部MRI等复杂医学图像。文章还提供了完整的代码实现和关键训练技巧,帮助开发者快速掌握这一先进技术。

weixin_42552637的博客 327

Jetson Orin NX上PyTorch环境搭建与性能优化指南

本文详细指导如何在Jetson Orin NX上搭建高效的PyTorch开发环境。内容涵盖CUDA与cuDNN的“隐藏”配置、Miniconda虚拟环境管理、PyTorch for Jetson的正确安装与验证,并提供了电源模式设置、TensorRT加速、混合精度等关键性能优化实战技巧,帮助开发者充分释放边缘AI设备的算力。

weixin_29090089的博客 337

系统动力学仿真软件Vensim下载

Vensim是由美国Ventana Systems, Inc.所开发,是采用图示化编程的方式构建系统动力学模型,上手简单。Vensim有很多系列产品,其中Vensim PLE (Personal Learning Edition)是面向个人学习者的,完全免费,可直接官网下载,截止于2022/04/10,最新的Vensim PLE版本是9.2.3。

PMIIᶜᶜ的博客 1万+

Python+Appium实现泛微OA自动打卡:5分钟搭建移动端自动化脚本

移动端自动化测试是软件测试与办公自动化领域的重要技术方向,其核心原理是通过程序模拟用户对手机应用界面的操作,实现重复性任务的自动执行。Appium作为主流的开源移动端自动化框架,基于WebDriver协议,支持跨平台且无需修改被测应用,为自动化脚本开发提供了标准化接口。在工程实践中,结合Python简洁的语法和丰富的生态,可以快速构建稳定可靠的自动化解决方案。这一技术组合的价值在于能够高效处理“重复性、低价值、高频率”的日常操作,例如考勤打卡、数据填报等办公场景,显著提升工作效率。本文以泛微OA Emobi

weixin_28836875的博客 389

上、下拉电阻(定义、强弱上拉、常见作用、吸电流、拉电流、灌电流)

1.上、下拉电阻定义 上拉电阻是把一个信号通过一个电阻接到电源(Vcc),下拉电阻是一个信号通过一个电阻接到地(GND)。 2.强上拉、弱上拉 强上拉、弱上拉的强弱只是上拉电阻的阻值不同,没有什么严格区分。例如:50Ω上拉,一般成为强上拉;100kΩ上拉则称为弱上拉。下拉也是一样的。强拉电阻的极端就是0Ω电阻,即将信号线直接与电源或低相连接。 3.上、下拉电阻的作用 因为上下拉电阻的作用概念很宽泛,不用领域的使用方法也不同,常见使用方法整理如下: ...

小浪宝宝的博客 3万+

使用LSTM(长短期记忆)模型处理文本数据的典型流程

对于序列到序列的任务(如机器翻译),可以使用LSTM的隐状态来生成目标序列。这些向量捕获了词之间的语义关系,每个词都被表示为一个高维空间中的点,语义上相似的词在向量空间中彼此靠近。这通常是通过创建一个词汇表(vocabulary)来实现的,词汇表中的每个词都会被分配一个唯一的数字ID。:由于LSTM等循环神经网络(RNN)需要固定长度的输入,所以需要将不同长度的句子填充到相同的长度。由于计算机不能直接理解连续的文本,第一步是将文本分割成独立的词或标记(token)。:将词嵌入作为输入传递给LSTM模型。

YHKKun的博客 2499

Type-C转DP1.4转C双向互传转接线方案

Type-C转DP双向互转方案的核心在于利用Type-C接口中的Alt Mode(交替模式)功能。通过利用Type-C接口的Alt Mode功能,该方案实现了Type-C接口与DP接口之间的双向互传,极大地丰富了用户的视觉体验。在选择Type-C转DP双向互转方案时,用户需要关注兼容性、性能需求、线缆长度和品牌等因素,以确保获得最佳的传输质量和使用体验。因此,Type-C转DP双向互转方案应运而生,旨在实现Type-C接口与DP接口之间的无缝连接,满足用户对高效能和高清晰度视频传输的需求。

m0_70875024的博客 4974

手把手教你用Kali Linux搭建vulntarget-a靶场环境(附详细配置步骤)

本文详细介绍了如何在Kali Linux环境下搭建vulntarget漏洞靶场,包括环境规划、虚拟化平台配置、靶机系统部署及安全工具链配置等关键步骤。通过实战演练,帮助网络安全从业者和初学者掌握专业级漏洞实验平台的搭建与管理技巧,提升安全测试能力。

weixin_29279101的博客 107

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms&rdquo; book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: 38、雷达场景中的平台对象详解
下一篇: 38、网络安全解决方案与技术全解析
cuda7parallel
博客等级 码龄1天 0粉丝 1273原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值