Coursera_Stanford密码学公开课 Programming Assignment 3

本文介绍了使用SHA256算法对视频文件进行哈希计算的方法,包括三种不同的实现方案及其优缺点对比。讨论了如何有效地处理大文件以减少内存占用,并通过实际代码展示了不同场景下的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

</pre>题目:<span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">Suppose a web site hosts large video file </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-1-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-1" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:14px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-2" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mi" id="MathJax-Span-3" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">F<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; overflow:hidden; height:1px; width:2px"></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-1px; overflow:hidden; width:0px; height:14.6px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> that anyone can download. Browsers who download the file need to make sure the file is authentic before displaying the content to the user. One approach is to have the web site hash the contents of </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-2-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-4" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:14px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-5" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mi" id="MathJax-Span-6" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">F<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; overflow:hidden; height:1px; width:2px"></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-1px; overflow:hidden; width:0px; height:14.6px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> using a collision resistant hash and then distribute the resulting short hash value </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-3-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-7" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:79px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-8" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mi" id="MathJax-Span-9" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span class="mo" id="MathJax-Span-10" style="display:inline; position:static; border:0px; padding:0px 0px 0px 5.1px; margin:0px; vertical-align:0px; font-family:MathJax_Main">=</span><span class="mi" id="MathJax-Span-11" style="display:inline; position:static; border:0px; padding:0px 0px 0px 5.1px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">H<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; overflow:hidden; height:1px; width:1.1px"></span></span><span class="mo" id="MathJax-Span-12" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">(</span><span class="mi" id="MathJax-Span-13" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">F<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; overflow:hidden; height:1px; width:2px"></span></span><span class="mo" id="MathJax-Span-14" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">)</span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-5.6px; overflow:hidden; width:0px; height:20.5px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> to users via some authenticated channel (later on we will use digital signatures for this). Browsers would download the entire file </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-4-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-15" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:14px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-16" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mi" id="MathJax-Span-17" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">F<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; overflow:hidden; height:1px; width:2px"></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-1px; overflow:hidden; width:0px; height:14.6px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">, check that </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-5-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-18" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:45px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-19" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mi" id="MathJax-Span-20" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">H<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; overflow:hidden; height:1px; width:1.1px"></span></span><span class="mo" id="MathJax-Span-21" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">(</span><span class="mi" id="MathJax-Span-22" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">F<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; overflow:hidden; height:1px; width:2px"></span></span><span class="mo" id="MathJax-Span-23" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">)</span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-5.6px; overflow:hidden; width:0px; height:20.5px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> is equal to the authentic hash value </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-6-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-24" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:10px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-25" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mi" id="MathJax-Span-26" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-1.2px; overflow:hidden; width:0px; height:15px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> and if so, display the video to the user. </span><br style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)" /><br style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)" /><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">Unfortunately, this means that the video will only begin playing after the *entire* file </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-7-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-27" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:14px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-28" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mi" id="MathJax-Span-29" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">F<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; overflow:hidden; height:1px; width:2px"></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-1px; overflow:hidden; width:0px; height:14.6px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> has been downloaded. Our goal in this project is to build a file authentication system that lets browsers authenticate and play video chunks as they are downloaded without having to wait for the entire file. </span><br style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)" /><br style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)" /><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">Instead of computing a hash of the entire file, the web site breaks the file into 1KB blocks (1024 bytes). It computes the hash of the last block and appends the value to the second to last block. It then computes the hash of this augmented second to last block and appends the resulting hash to the third block from the end. This process continues from the last block to the first as in the following diagram:</span><img src="https://d396qusza40orc.cloudfront.net/crypto/images/pp3-fig.jpg" alt="hashing process" style="max-width:100%; height:auto; vertical-align:middle; border:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)" /><br style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)" /><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">The final hash value </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-8-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-30" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:19px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-31" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="msubsup" id="MathJax-Span-32" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-33" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:10px"><span class="mn" id="MathJax-Span-34" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">0</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-4.1px; overflow:hidden; width:0px; height:17.9px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> – a hash of the first block with its appended hash – is distributed to users via the authenticated channel as above. </span><br style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)" /><br style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)" /><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">Now, a browser downloads the file </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-9-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-35" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:14px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-36" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mi" id="MathJax-Span-37" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">F<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; overflow:hidden; height:1px; width:2px"></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-1px; overflow:hidden; width:0px; height:14.6px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> one block at a time, where each block includes the appended hash value from the diagram above. When the first block </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-10-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-38" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:74px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-55px; left:0px"><span class="mrow" id="MathJax-Span-39" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mo" id="MathJax-Span-40" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">(</span><span class="msubsup" id="MathJax-Span-41" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:22.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-42" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">B</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:14px"><span class="mn" id="MathJax-Span-43" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">0</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mtext" id="MathJax-Span-44" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main"> </span><span class="texatom" id="MathJax-Span-45" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mrow" id="MathJax-Span-46" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mo" id="MathJax-Span-47" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:15.7px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:9.2px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main; top:-60.1px; left:0px">∥<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:74px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main; top:-56.4px; left:0px"><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:74px"></span></span></span></span></span></span><span class="mtext" id="MathJax-Span-48" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main"> </span><span class="msubsup" id="MathJax-Span-49" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-50" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:10px"><span class="mn" id="MathJax-Span-51" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">1</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mo" id="MathJax-Span-52" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">)</span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:55px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-7.5px; overflow:hidden; width:0px; height:24.2px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">   is received the browser checks that </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-11-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-53" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:91px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-55px; left:0px"><span class="mrow" id="MathJax-Span-54" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mi" id="MathJax-Span-55" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">H<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; overflow:hidden; height:1px; width:1.1px"></span></span><span class="mo" id="MathJax-Span-56" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">(</span><span class="msubsup" id="MathJax-Span-57" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:22.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-58" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">B</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:14px"><span class="mn" id="MathJax-Span-59" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">0</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mtext" id="MathJax-Span-60" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main"> </span><span class="texatom" id="MathJax-Span-61" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mrow" id="MathJax-Span-62" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mo" id="MathJax-Span-63" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:15.7px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:9.2px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main; top:-60.1px; left:0px">∥<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:74px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main; top:-56.4px; left:0px"><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:74px"></span></span></span></span></span></span><span class="mtext" id="MathJax-Span-64" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main"> </span><span class="msubsup" id="MathJax-Span-65" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-66" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:10px"><span class="mn" id="MathJax-Span-67" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">1</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mo" id="MathJax-Span-68" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">)</span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:55px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-7.5px; overflow:hidden; width:0px; height:24.2px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> is equal to </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-12-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-69" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:19px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-70" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="msubsup" id="MathJax-Span-71" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-72" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:10px"><span class="mn" id="MathJax-Span-73" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">0</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-4.1px; overflow:hidden; width:0px; height:17.9px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> and if so it begins playing the first video block. When the second block </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-13-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-74" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:74px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-55px; left:0px"><span class="mrow" id="MathJax-Span-75" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mo" id="MathJax-Span-76" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">(</span><span class="msubsup" id="MathJax-Span-77" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:22.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-78" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">B</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:14px"><span class="mn" id="MathJax-Span-79" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">1</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mtext" id="MathJax-Span-80" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main"> </span><span class="texatom" id="MathJax-Span-81" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mrow" id="MathJax-Span-82" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mo" id="MathJax-Span-83" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:15.7px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:9.2px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main; top:-60.1px; left:0px">∥<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:74px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main; top:-56.4px; left:0px"><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:74px"></span></span></span></span></span></span><span class="mtext" id="MathJax-Span-84" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main"> </span><span class="msubsup" id="MathJax-Span-85" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-86" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:10px"><span class="mn" id="MathJax-Span-87" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">2</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mo" id="MathJax-Span-88" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">)</span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:55px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-7.5px; overflow:hidden; width:0px; height:24.2px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">   is received the browser checks that </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-14-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-89" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:90px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-90" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mi" id="MathJax-Span-91" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">H<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; overflow:hidden; height:1px; width:1.1px"></span></span><span class="mo" id="MathJax-Span-92" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">(</span><span class="msubsup" id="MathJax-Span-93" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:22.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-94" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">B</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:14px"><span class="mn" id="MathJax-Span-95" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">1</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mo" id="MathJax-Span-97" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">∥</span><span class="mtext" id="MathJax-Span-98" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main"> </span><span class="msubsup" id="MathJax-Span-99" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-100" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:10px"><span class="mn" id="MathJax-Span-101" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">2</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mo" id="MathJax-Span-102" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">)</span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-5.6px; overflow:hidden; width:0px; height:20.5px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> is equal to </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-15-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-103" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:19px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-104" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="msubsup" id="MathJax-Span-105" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-106" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:10px"><span class="mn" id="MathJax-Span-107" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">1</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-3.8px; overflow:hidden; width:0px; height:17.6px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> and if so it plays this second block. This process continues until the very last block. This way each block is authenticated and played as it is received and there is no need to wait until the entire file is downloaded. </span><br style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)" /><br style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)" /><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">It is not difficult to argue that if the hash function </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-16-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-108" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:17px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-109" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mi" id="MathJax-Span-110" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">H<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; overflow:hidden; height:1px; width:1.1px"></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-1px; overflow:hidden; width:0px; height:14.6px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> is collision resistant then an attacker cannot modify any of the video blocks without being detected by the browser. Indeed, since </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-17-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-111" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:133px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-55px; left:0px"><span class="mrow" id="MathJax-Span-112" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="msubsup" id="MathJax-Span-113" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-114" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:10px"><span class="mn" id="MathJax-Span-115" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">0</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mo" id="MathJax-Span-116" style="display:inline; position:static; border:0px; padding:0px 0px 0px 5.1px; margin:0px; vertical-align:0px; font-family:MathJax_Main">=</span><span class="mi" id="MathJax-Span-117" style="display:inline; position:static; border:0px; padding:0px 0px 0px 5.1px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">H<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; overflow:hidden; height:1px; width:1.1px"></span></span><span class="mo" id="MathJax-Span-118" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">(</span><span class="msubsup" id="MathJax-Span-119" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:22.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-120" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">B</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:14px"><span class="mn" id="MathJax-Span-121" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">0</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mtext" id="MathJax-Span-122" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main"> </span><span class="texatom" id="MathJax-Span-123" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mrow" id="MathJax-Span-124" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mo" id="MathJax-Span-125" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:15.7px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:9.2px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main; top:-60.1px; left:0px">∥<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:74px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main; top:-56.4px; left:0px"><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:74px"></span></span></span></span></span></span><span class="mtext" id="MathJax-Span-126" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main"> </span><span class="msubsup" id="MathJax-Span-127" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-128" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:10px"><span class="mn" id="MathJax-Span-129" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">1</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mo" id="MathJax-Span-130" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">)</span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:55px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-7.5px; overflow:hidden; width:0px; height:24.2px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> an attacker cannot find a pair </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-18-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-131" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:150px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-132" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mo" id="MathJax-Span-133" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">(</span><span class="msubsup" id="MathJax-Span-134" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:22.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-135" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">B</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-47.6px; left:14px"><span class="mo" id="MathJax-Span-136" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">′</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-35.4px; left:14px"><span class="mn" id="MathJax-Span-137" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">0</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mo" id="MathJax-Span-138" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">,</span><span class="msubsup" id="MathJax-Span-139" style="display:inline; position:static; border:0px; padding:0px 0px 0px 3.1px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-140" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-47.8px; left:10px"><span class="mo" id="MathJax-Span-141" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">′</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-35.4px; left:10px"><span class="mn" id="MathJax-Span-142" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">1</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mo" id="MathJax-Span-143" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">)</span><span class="mo" id="MathJax-Span-144" style="display:inline; position:static; border:0px; padding:0px 0px 0px 5.1px; margin:0px; vertical-align:0px; font-family:MathJax_Main">≠</span><span class="mo" id="MathJax-Span-145" style="display:inline; position:static; border:0px; padding:0px 0px 0px 5.1px; margin:0px; vertical-align:0px; font-family:MathJax_Main">(</span><span class="msubsup" id="MathJax-Span-146" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:22.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-147" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">B</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:14px"><span class="mn" id="MathJax-Span-148" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">0</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mo" id="MathJax-Span-149" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">,</span><span class="msubsup" id="MathJax-Span-150" style="display:inline; position:static; border:0px; padding:0px 0px 0px 3.1px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-151" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:10px"><span class="mn" id="MathJax-Span-152" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">1</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mo" id="MathJax-Span-153" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">)</span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-5.9px; overflow:hidden; width:0px; height:22px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">     such that </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-19-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-154" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:133px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-55px; left:0px"><span class="mrow" id="MathJax-Span-155" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="msubsup" id="MathJax-Span-156" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-157" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:10px"><span class="mn" id="MathJax-Span-158" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">0</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mo" id="MathJax-Span-159" style="display:inline; position:static; border:0px; padding:0px 0px 0px 5.1px; margin:0px; vertical-align:0px; font-family:MathJax_Main">=</span><span class="mi" id="MathJax-Span-160" style="display:inline; position:static; border:0px; padding:0px 0px 0px 5.1px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">H<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; overflow:hidden; height:1px; width:1.1px"></span></span><span class="mo" id="MathJax-Span-161" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">(</span><span class="msubsup" id="MathJax-Span-162" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:22.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-163" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">B</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:14px"><span class="mn" id="MathJax-Span-164" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">0</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mtext" id="MathJax-Span-165" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main"> </span><span class="texatom" id="MathJax-Span-166" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mrow" id="MathJax-Span-167" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mo" id="MathJax-Span-168" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:15.7px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:9.2px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main; top:-60.1px; left:0px">∥<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:74px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main; top:-56.4px; left:0px"><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:74px"></span></span></span></span></span></span><span class="mtext" id="MathJax-Span-169" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main"> </span><span class="msubsup" id="MathJax-Span-170" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-171" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:10px"><span class="mn" id="MathJax-Span-172" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">1</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span><span class="mo" id="MathJax-Span-173" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Main">)</span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:55px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-7.5px; overflow:hidden; width:0px; height:24.2px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> since this would break collision resistance of </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-20-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-174" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:17px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-175" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mi" id="MathJax-Span-176" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">H<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; overflow:hidden; height:1px; width:1.1px"></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-1px; overflow:hidden; width:0px; height:14.6px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">. Therefore after the first hash check the browser is convinced that both </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-21-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-177" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:23px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-178" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="msubsup" id="MathJax-Span-179" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:22.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-180" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">B</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:14px"><span class="mn" id="MathJax-Span-181" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">0</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-4.1px; overflow:hidden; width:0px; height:17.7px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> and </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-22-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-182" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:19px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-183" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="msubsup" id="MathJax-Span-184" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-185" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:10px"><span class="mn" id="MathJax-Span-186" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">1</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-3.8px; overflow:hidden; width:0px; height:17.6px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> are authentic. Exactly the same argument proves that after the second hash check the browser is convinced that both </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-23-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-187" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:23px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-188" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="msubsup" id="MathJax-Span-189" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:22.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-190" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">B</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:14px"><span class="mn" id="MathJax-Span-191" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">1</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-3.8px; overflow:hidden; width:0px; height:17.4px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> and </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-24-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-192" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:19px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-193" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="msubsup" id="MathJax-Span-194" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-195" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:10px"><span class="mn" id="MathJax-Span-196" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">2</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-3.8px; overflow:hidden; width:0px; height:17.6px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">are authentic, and so on for the remaining blocks. </span><br style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)" /><br style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)" /><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">In this project we will be using SHA256 as the hash function. For an implementation of SHA256 use an existing crypto library such as </span><a target=_blank target="_blank" href="https://www.dlitz.net/software/pycrypto/" style="color:rgb(3,103,176); text-decoration:none; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">PyCrypto</a><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">(Python), </span><a target=_blank target="_blank" href="http://www.cryptopp.com/" style="color:rgb(3,103,176); text-decoration:none; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">Crypto++</a><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> (C++), or any other. When appending the hash value to each block, please append it as binary data, that is, as 32 unencoded bytes (which is 256 bits). If the file size is not a multiple of 1KB then the very last block will be shorter than 1KB, but all other blocks will be exactly 1KB. </span><br style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)" /><br style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)" /><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">Your task is to write code to compute the hash </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-25-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-197" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:19px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-198" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="msubsup" id="MathJax-Span-199" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-200" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:10px"><span class="mn" id="MathJax-Span-201" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">0</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-4.1px; overflow:hidden; width:0px; height:17.9px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> of a given file </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-26-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-202" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:14px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-203" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mi" id="MathJax-Span-204" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">F<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; overflow:hidden; height:1px; width:2px"></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-1px; overflow:hidden; width:0px; height:14.6px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> and to verify blocks of </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-27-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-205" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:14px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-206" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="mi" id="MathJax-Span-207" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">F<span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; overflow:hidden; height:1px; width:2px"></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-1px; overflow:hidden; width:0px; height:14.6px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> as they are received by the client. In the box below please enter the (hex encoded) hash </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-28-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-208" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:19px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-209" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="msubsup" id="MathJax-Span-210" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-211" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:10px"><span class="mn" id="MathJax-Span-212" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">0</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-4.1px; overflow:hidden; width:0px; height:17.9px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> for </span><a target=_blank target="_blank" href="https://class.coursera.org/crypto-011/lecture/download.mp4?lecture_id=27" style="color:rgb(3,103,176); text-decoration:none; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">this video file</a><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">. </span><br style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)" /><br style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)" /><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">You can check your code by using it to hash a different file. In particular, the hex encoded </span><span class="MathJax_Preview" style="color:rgb(136,136,136); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"></span><span class="MathJax" id="MathJax-Element-29-Frame" style="display:inline; font-size:14px; word-wrap:normal; white-space:nowrap; float:none; direction:ltr; border:0px; padding:0px; margin:0px; color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; background-color:rgb(250,250,250)"><nobr style="border:0px; padding:0px; margin:0px; max-width:none; max-height:none; vertical-align:0px"><span class="math" id="MathJax-Span-213" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:19px; height:0px; font-size:18px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mrow" id="MathJax-Span-214" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span class="msubsup" id="MathJax-Span-215" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px"><span style="display:inline-block; position:relative; border:0px; padding:0px; margin:0px; vertical-align:0px; width:18.4px; height:0px"><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-40px; left:0px"><span class="mi" id="MathJax-Span-216" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-family:MathJax_Math; font-style:italic">h</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span><span style="position:absolute; border:0px; padding:0px; margin:0px; vertical-align:0px; top:-37.2px; left:10px"><span class="mn" id="MathJax-Span-217" style="display:inline; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; font-size:13px; font-family:MathJax_Main">0</span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span></span></span><span style="display:inline-block; position:static; border:0px; padding:0px; margin:0px; vertical-align:0px; width:0px; height:40px"></span></span></span><span style="display:inline-block; position:static; border-width:0px; border-left-style:solid; padding:0px; margin:0px; vertical-align:-4.1px; overflow:hidden; width:0px; height:17.9px"></span></span></nobr></span><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> for </span><a target=_blank target="_blank" href="https://class.coursera.org/crypto-011/lecture/download.mp4?lecture_id=28" style="color:rgb(3,103,176); text-decoration:none; font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)">this video file</a><span style="color:rgb(51,51,51); font-family:'Helvetica Neue',Helvetica,Arial,sans-serif; font-size:14px; line-height:28px; background-color:rgb(250,250,250)"> is:</span><p></p><pre style="padding:10px; font-family:Monaco,Menlo,Consolas,'Courier New',monospace; font-size:13px; color:rgb(51,51,51); margin-top:0px; margin-bottom:10.5px; margin-left:1cm; line-height:21px; word-break:break-all; word-wrap:break-word; white-space:pre-wrap; background-color:rgb(245,245,245)">03c08f4ee0b576fe319338139c045c89c3e8e9409633bea29442e21425006ea8

Python代码:

import sys  
import os  
from Crypto.Hash import SHA256  
BLOCK_SIZE=1024
def hash_1(path_file_name):  
    f=open(path_file_name,'rb')  
    r_file=f.read()  
    block_quantity=len(r_file)/BLOCK_SIZE  
    h = SHA256.new()  
    h.update(r_file[block_quantity*BLOCK_SIZE:])  
    hash_result=''  
    for idx in range(block_quantity-1,-1,-1):  
        hash_result=r_file[idx*BLOCK_SIZE:(idx+1)*BLOCK_SIZE]  
        hash_result+=h.digest()  
        h = SHA256.new()  
        h.update(hash_result)  
    return h.hexdigest()  
  
def hash_2(path_file_name):  
    f=open(path_file_name,'rb')  
    file_dic={}  
    block_number=0  
    for idx in range(0,os.path.getsize(path_file_name),BLOCK_SIZE):  
        f.seek(idx)  
        file_dic[block_number]=f.read(BLOCK_SIZE)  
        block_number+=1  
    block_number-=1  
    f.close()  
    h=SHA256.new(file_dic[block_number])  
    hash_result=''  
    for idx in range(block_number-1,-1,-1):     
        hash_result=file_dic[idx]  
        hash_result+=h.digest()  
        h=SHA256.new(hash_result)  
    return h.hexdigest()  
  
def get_file_block(path_file_name):  
    f=open(path_file_name,'rb')  
    for idx in reversed(range(0,os.path.getsize(path_file_name),BLOCK_SIZE)):  
        f.seek(idx)  
        yield f.read(BLOCK_SIZE)  
    f.close()  

def hash_3(path_file_name):  
    hash_result=''  
    for block in get_file_block(path_file_name):      
        h=SHA256.new(block)  
        h.update(hash_result)  
        hash_result=h.digest()  
    return h.hexdigest()  
  
print hash_1('6 - 2 - Generic birthday attack (16 min).mp4')  
print hash_1('6 - 1 - Introduction (11 min).mp4')  
print hash_2('6 - 2 - Generic birthday attack (16 min).mp4')
print hash_2('6 - 1 - Introduction (11 min).mp4')  
print hash_3('6 - 2 - Generic birthday attack (16 min).mp4')  
print hash_3('6 - 1 - Introduction (11 min).mp4')  


思路:一共有三种函数,基本思路都一样,就如题目中所说从最后一块文件开始算hash值,然后加到上一块文件上,依次迭代计算hash值。因为read()函数和digest()函数返回的都是以字节为单位存储的字符,所以前两种函数直接用‘+’操作来连接block和hash值。最后一种函数利用hash对象中的update()方法来连接block和hash值。因为update()方法不是用新参数替换旧参数,而是将新参数放在旧参数之后合并,由于题目中要求32byte的hash值加在上一块文件(新参数)之后,所以每次都需要重新建立新的hash对象。

第一个函数hash_1直接读取整个文件,然后操作,第二个函数hash_2分段读取文件,每次读取的结果存在一个字典中。当视频文件比较大时,一次读取整个文件会占用很大内存,存储在字典同样占用大量内存。所以第三个函数hash_3调用了generator:get_file_block,get_file_block每次返回一个1KB大小的block供hash_3操作,需要占用的存储空间不随着整体文件大小的增加而增加。get_file_block中用到了yield,关于yield的介绍可参考:

http://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值