提到的代码可以在我的 Github 中找到
在上一篇文章中,我做了 NodeJs 版本的种子短语生成器,在这里 - 我们将创建它的浏览器版本。
作为开发人员,我们经常面临挑战,要求我们超越基本的编程概念进行思考。今天,我想分享我构建安全种子短语生成器的经验 - 加密货币和区块链技术领域的重要工具。这个项目教会了我关于密码学、用户交互以及安全应用程序中随机性重要性的宝贵经验。
生成种子短语时,随机性的质量至关重要。很久以前,我使用了 JavaScript 的 Math.random(),但我很快意识到这对于加密目的来说不够安全。这是我降落的地方:
function generateCustomRandomBytes(byteLength, mouseMoves) { const customBytes = new Uint8Array(byteLength); window.crypto.getRandomValues(customBytes); const mouseHash = new Uint32Array(mouseMoves); for (let i = 0; i < byteLength; i++) { customBytes[i] ^= mouseHash[i % mouseHash.length] & 0xFF; } return customBytes; }
此函数将 window.crypto.getRandomValues() 中的加密安全随机值与用户通过鼠标移动生成的熵结合起来。 XOR 运算确保两个源都有助于最终的随机性。
我决定让用户参与随机性生成过程。通过跟踪鼠标移动,我们不仅增加了熵,还吸引了用户,使他们成为安全过程的积极参与者。
为了让用户了解情况并参与其中,我实现了一个进度条,它反映实际的鼠标移动而不仅仅是经过的时间:
function updateProgressBar() { const progress = Math.min((mouseMoves.length / 3) / requiredMoves * 100, 100); document.getElementById('progressBar').style.width = progress + '%'; if (progress >= 100 && collecting) { stopRandomCollection(); } else if (collecting) { requestAnimationFrame(updateProgressBar); } }
这种方法提供实时反馈,鼓励用户移动鼠标,直到收集到足够的熵。
一个重要的教训是保护敏感数据的重要性。最初,我将鼠标移动数据存储在一个全局变量中,该变量可能会被恶意脚本访问。我通过使用闭包解决了这个问题:
(function() { let mouseMoves = []; // ... other variables and functions ... function stopRandomCollection() { // ... other code ... generateSeedPhrase(mouseMoves); mouseMoves = []; // Clear sensitive data after use } // ... rest of the code ... })();
这种方法将敏感数据封装起来,并且无法在全局范围内访问。
使用助记词生成器最关键的方面之一是确保该过程完全离线且安全。以下是有关如何安全运行此代码的分步指南:
继续之前,请断开计算机与互联网的连接。这可确保在助记词生成过程中不会传输任何数据。
在浏览器中运行文件:
双击保存的 .html 文件以在默认 Web 浏览器中将其打开。种子短语生成器现在应该在您的计算机上本地运行。
生成您的种子短语:
按照屏幕上的说明生成助记词。
安全地存储您的种子短语:
生成后,将您的助记词写在纸上。切勿以数字方式存储它。
安全地录制助记词后,关闭浏览器并删除 .html 文件。
离线运行此代码至关重要,原因如下:
安全性:它可以防止您的助记词通过互联网进行任何潜在的传输。
隐私:它确保没有第三方脚本或跟踪器可以干扰该过程。
完整性:保证代码完全按照预期运行,无需任何外部修改。
请记住:您的助记词是您数字资产的关键。生成和存储它时始终优先考虑安全性。离线运行此生成器是保护您的资产的关键一步。
构建安全的种子短语生成器不仅仅是编写代码。它涉及了解加密原理、重视用户交互并始终优先考虑安全性。作为开发人员,此类项目促使我们批判性地思考我们编写的每一行代码及其潜在含义。
这是 Github 的链接 - 可以免费克隆
以上是构建您自己的安全种子短语生成器的详细内容。更多信息请关注PHP中文网其他相关文章!