Timmoc 的技术小屋

Timmoc 的技术小屋

这里记录技术笔记与日常思考,欢迎常来逛逛 👋

【AI版本】什么是零知识证明?零知识证明真的传的神乎其神吗?

来点对比,没有对比没有伤害也~ 对了,上一篇文章我写的也是挺早的事情了。 零知识证明为何方神圣? 在当今数字化浪潮中,隐私保护成为了人们日益关注的焦点。而零知识证明(Zero-Knowledge Proof)技术,就像是一位神秘的卫士,悄然守护着我们的隐私安全。那么,究竟什么是零知识证明呢? 零知识证明是一种密码学工具,诞生于 20 世纪 80 年代初,由 Goldwasser、Micali 和 Rackoff 三位密码学家提出。它允许证明者向验证者证明某个陈述是真实的,而无需透露任何超出该陈述本身有效性的信息。这就好比,你想向朋友证明你拥有某个房间的钥匙,但又不想让朋友看到钥匙的样子,通过零知识证明,你可以在不展示钥匙的情况下,让朋友确信你拥有钥匙。 举个例子,假设阿里巴巴被强盗抓住,强盗索要开启山洞大门的咒语。阿里巴巴若直接说出咒语,虽能保命但咒语会泄露;若不说,强盗可能会杀了他。于是,阿里巴巴想出一个办法,让强盗离他 30 米远并用弓箭指着他,当强盗举起双手,他就念咒语开门;强盗放下双手,他就念咒语关门。强盗通过观察门的开合,相信了阿里巴巴知道咒语,而阿里巴巴始终未透露咒语的具体内容。这就是零知识证明的一个生动案例,它在不泄露关键信息的前提下,成功证明了某个事实的存在。 零知识证明的魔法是如何施展的? 零知识证明的 “魔法” 之所以能够施展,关键在于它独特的工作原理,这其中涉及到交互式与非交互式两种类型,同时承诺方案和挑战 - 响应协议也在其中起着关键作用。 先来说交互式零知识证明,它要求证明者和验证者之间进行多次互动。验证者像是一个严苛的考官,会不断抛出问题来挑战证明者,而证明者则要绞尽脑汁回应这些挑战,直至说服验证者为止 。就好比色盲游戏里,Alice 是色盲,Bob 不是。Bob 手上有两个大小、形状完全一致,但颜色分别为蓝色与红色的球。Alice 怀疑两个球颜色是否真不一样,Bob 需要证明这点。Bob 让 Alice 拿起球放背后随机交换位置,再问 Bob 球是否交换过,要是 Bob 能看清球颜色,每次都能答对。多轮测试下来,只要 Bob 持续答对,Alice 就会越发相信 Bob 所言属实。不过,这种交互式方法存在局限:每次验证流程冗长繁琐;证明方与验证方必须同时在场;而且它只能取信一个验证者,面对多个验证者,就得重复多次证明过程;并且只在某个特定时刻有效。 为攻克这些难题,非交互式零知识证明应运而生。这种方式下,证明者仅需在初次向验证者发送一个证明即可,后续验证者随时都能对该证明信息展开验证,而且仅需验证一次就能判断是否该相信证明者。例如数独游戏,Alice 要向 Bob 证明解开了数独难题,她将答案放入防篡改机器,机器遵循公开可验证协议,把数独每行、每列、每宫的卡片分别混淆装入袋子给 Bob。Bob 检查袋子里卡片,若都含 1 - 9 数字且无丢失重复,就能确认 Alice 解开难题,同时还没获取到任何关于数独解的实质信息。只是,这种证明方式往往需要更强算力来达成。 零知识证明还依靠承诺方案和挑战 - 响应协议运作。承诺方案允许证明者用加密手段隐藏信息,做出承诺后无法更改。就好像把秘密锁进一个高科技保险箱,外人看不到里面是什么,而且锁上后就定型了。而挑战 - 响应协议呢,是验证者提出挑战,证明者依照自身掌握的信息给出响应。这类似一场问答较量,验证者出招,证明者凭借真本事巧妙接招,以此证明自己确实手握关键 “情报” 。通过这一系列复杂又精妙的流程,零知识证明才能在不泄露隐私的同时,完成对事实的有力证明,施展它神奇的 “魔法”。 ...

December 26, 2024 · 1 min

【材料】SetThreadContextCall!

这是一篇古老的文章,在线下完成了展示,并无意向重写到博客园。 github项目 SetThreadContextCall https://github.com/12UE/SetThreadContextCall 241 - 注入shellcode方式 253 - shellcode 626 - 主代码 - 679 - 参数传递。 154 - 单例构造 - 方法静态。 template<typename … Args>:可变参数模板的解释和使用_Major的博客-CSDN博客 C++ 模板、多参讲解 520 - 参数讲解 C++ 简单的析构函数讲解 - 智能指针

December 26, 2024 · 1 min

Windows 权限获取攻略:你的Windows,安全吗?

本篇讲的是全流程获取windows的所有权限 并且可获取其中的全部隐私信息 以提醒各位注意自己的电脑数据安全 0.思路与步骤 建立任意shell交互(最难) 得到低权限用户 得到高权限用户(非管理员模式) 高权限用户绕过UAC 得到高权限用户的高权限(管理员模式) 得到SYSTEM权限(最简单) 得到目标用户的数据 全程均需要处理杀软,杀软的不稳定性过高不在本次讨论范围内。 1.建立任意shell交互 有两种方案:从网络中攻入、从物理上攻入 1.1.本地手段(电脑不在手上时) 这里演示从物理上攻入的方案 UAC已自动绕过,UAC不能防止来自物理上直接的输入。 UAC绕过方案可搜索Bypass UAC:绕过UAC提权-CSDN博客 本次演示将会直接获取高权限用户,因此跳过了低权限用户的可选步骤。 有时候对低权限用户的隔离不充分,使其能够接触、修改到高权限用户的部分文件(点名steam)会造成严重后果,此处不展开 1.1.1.得到SYSTEM权限 采用经典的辅助功能替换成cmd直接获得system权限。 ...

December 26, 2024 · 2 min

再战博客园美化(三)——Vue和Element UI

新的技术终究是新的技术,不适合初学者直接使用 既然一口气吃不成胖子,那不如从Vue和Element UI这两个大名鼎鼎的库开始。 其实也是因为我发现我原本套用的模板自带了这两个库的使用。 我得说我这path是越来越臃肿了 这是gpt的输出,gpt更胜一筹(好吧赛道都不一样,vue和elementui这么早的) 一番操作过后,它现在变成了这样! 欧耶! 还有待改善,不过已经有模有样了。

December 26, 2024 · 1 min

再战博客园美化(四)

书接上回 上回提到,博客园的美化实现了vue,并且实现了黑暗模式,现在已经进入到自己美化的地步了。 虽然感觉和安全之路越来越远,不过也是一种体验。 目前的问题 现在这个边角有点生硬,不够淡雅。 应该是gpt帮我生成的边角,我试试他原有的样子如何。 误会了,它原本的边角就是这么锐利的,看来我得自己调试了。 或者。。。换个思路 不调试了。直接把图片加上去试试? 感谢:www.liveout.cn 感谢:https://recyvan.github.io/ 再次感谢@www.liveout.cn ,还是复制好用啊 在div里面写::before和::after(目前未使用),比直接替换body的样式表更加好用。 这里gpt都没给出这么好的方案,感谢。 替换一下就是这样的。 有提示?逝逝。 变成了这样。 《可安全地替换》这就是ide说的,我不知道是不是因为我不符合规范,不过我用vue修改一个已有的网页本身已经不符合vue的调度规范了。 总之,我不予评价。 还是换回来吧。 然后也不能一直用别人的图吧,换个自己的图上去。 完成!

December 26, 2024 · 1 min

植物大战僵尸阳光调整教程

这是一篇AI文章,其中代码是我两年前所写,但博文本人懒得写了 一、引言 《植物大战僵尸》作为一款风靡全球的经典塔防游戏,以其丰富的玩法和策略性深受广大玩家喜爱。在游戏中,阳光作为关键资源,用于购买各种植物来抵御僵尸的进攻,其重要性不言而喻。然而,获取阳光的过程有时会受到僵尸的干扰,导致资源紧张,影响游戏体验。因此,不少玩家对如何修改阳光值产生了兴趣,今天我们就来探讨一下使用 Python 实现植物大战僵尸阳光修改的方法。需要注意的是,修改游戏数据仅用于学习交流目的,请勿在未经授权的情况下用于商业或其他不正当用途,同时也要遵守游戏的使用条款和相关法律法规。 二、准备工作 在开始修改之前,我们需要准备好相应的工具和环境: Python:这是我们实现修改功能的主要编程语言。如果你还没有安装 Python,请前往 Python 官方网站( https://www.python.org/downloads/ )下载并安装适合你操作系统的版本,建议选择较新的稳定版本,如 Python 3.8 及以上。 win32gui、win32process、win32api、ctypes 库:这些库可以帮助我们与 Windows 系统进行交互,实现对游戏进程内存的读取和写入操作,从而达到修改阳光值的目的。它们通常包含在pywin32扩展库中。如果你的 Python 环境中尚未安装pywin32,可以通过以下命令使用pip进行安装: ...

December 26, 2024 · 2 min

零知识证明:什么是零知识证明?零知识证明真的传的神乎其神吗?

零知识证明的探索学习之路 我真服了,看到网上的零知识证明,感觉真累,什么都能往零知识里面塞。 1. 零秘密型 这种零知识证明是这样的: 受信者需要证明21^3 == 9261 证明者已知21、3、9261 但是证明者懒得算,算起来太耗费时间,这时的零知识证明的用处是: 我确确实实按照乘法规则计算了一遍这个过程,你不用算了,信我的就行了 2.一秘密型 受信者需要证明自己拥有字符串“hello”经过sha256后得到结果“2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824” 证明者已知sha256、“2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824” 3.二秘密型 这里没有受信者和证明者,只有两个互相不信任的人。 A和B想比较自己的存款谁比较多,这里A的秘密是自己的存款,A不知道的是B的存款,A想要知道的是自己的存款是否大于对方。 那个盒子的事情,我们都知道了。 公私钥型 挑战、应答机制,不是,你拿着公钥去确认对方手上是否拿着私钥,然后把这种东西称为零知识证明的一种? ...

December 26, 2024 · 1 min

python tqdm 进度条尝试

起因 那今天来整个进度条。 好的本篇随笔到此结束 不是这也太水了吧,试着按到上篇博客里面? 只需要修改worker的代码就好了。 不是不是,等等,我说停停。 合着这个进度条是每次打印了一个长到我看不到的回车完成的效果? 不不,并非如此,只是它不适应多进程,在读取不到自己打印出来的东西的时候就没办法运作了。 取舍 点击查看代码 for p in tqdm(threads): p.join() 最后的解决方法非常简单,不使用密码数量作为颗粒度,而是使用开启的进程作为颗粒度即可。 就是如此。

December 25, 2024 · 1 min

再战博客园美化

看一张难蹦的图片 卡片势在必行! 以上几个有什么区别? 卡片!! 不想搬离博客园怎么办 博客园的访问速度比上述两个网站快多了,而且不用担心服务器问题等等 但是自定义怎么弄? js! 差不多类似这样,暴力遍历。 然后我一开始用的是ts,就出现了那个名场面 实在难蹦。 我搜了一下,没看到别人遇到过这种问题,非常怀疑是我装完ide没有重启的后果。 管他呢,那我转战js,js古老一点教程也多一点,也好。 怎么可能?我的js是在最后加载的,怎么会为null? 对了,插一句 网站直接用ctrl+s就保存下来了,对于分析而言完全足够 httrack_x64-noinst-3.49.2 嗯,我还下载了这个网站克隆工具,不过发现这个太深了,我只是想分析一下样式,不需要这么深的复制。 ...

December 25, 2024 · 1 min

博客园美化 纯代码部分

顺便公开一下代码 还能再水一篇 首先是几个一万年下载失败的东西,我替你们下载好了,可以直接引用我发布在博客园的文件,毕竟人人为我,我为人人嘛。 https://files.cnblogs.com/files/blogs/809481/jquery.cookie.js?t=1735051954&download=true https://files.cnblogs.com/files/blogs/809481/vue.js?t=1735051820&download=true https://files.cnblogs.com/files/blogs/809481/eui.css?t=1735051643&download=true <script> let avatar = "https://images.cnblogs.com/cnblogs_com/gshang/1609278/o_210910153736IMG_20210909_232803.jpg", homepage = $('#profile_block a').eq(0).attr('href'), name = $('#profile_block a').eq(0).text(), desc = $('#blogTitle h2').html(), join = $('#profile_block a').eq(1).attr('title'), age = $('#profile_block a').eq(1).text(), fans_link = $('#profile_block a').eq(2).attr('href'), fans = $('#profile_block a').eq(2).text(), follow_link = $('#profile_block a').eq(3).attr('href'), follow = $('#profile_block a').eq(3).text(), post = $('#stats_post_count').text().replace(/[^0-9]/ig, ""), article = $('#stats_article_count').text().replace(/[^0-9]/ig, ""), comment = $('#stats-comment_count').text().replace(/[^0-9]/ig, ""), view_text = $('#stats-total-view-count span').text(), view_num = $('#stats-total-view-count span').attr('title').replace(/[^0-9]/ig, "") let profile =` <div id="my-profile"> <div id="top-info"> <div id="user-avatar"> <div class="avater-border"></div> <a href="${homepage}" class="my-logo-container"><img src="${avatar}" class="my-logo" /></a> </div> <div class="my-name-container"> <div> <span class="my-name"><a href="${homepage}">${name}</a></span> <span id="age" title="join">${age}</span> </div> <div class="my-desc">${desc}</div> </div> </div> <div class="my-detaial"> <ul> <li id="follow"><a href="${follow_link}" title=" follow">${follow}</a></li> <li id="fans"><a href="${fans_link}" title=" fans">${fans}</a></li> <li id="more"> <div class="my-stats"> <div class="btn-more"></div> <ul class="dropwon-content"> <li id="post" title="随笔: ${post}"> ${post}</li> <li id="article" title="文章: ${article}"> ${article}</li> <li id="comment" title="评论: ${comment}"> ${comment}</li> <li id="view" title="阅读: ${view_num}"> ${view_text}</li> </ul> </div> </li> </ul> </div> <div id="follow-btn"></div> </div> `; $('#blog-news').append(profile); $('#follow-btn').append($('#p_b_follow')); if ($("#topics").length > 0) { // setZan(); $('#digg_tips').bind("DOMNodeInserted", function() { //console.log($('#digg_tips').text()) if ($('#digg_tips').text() == "支持成功" || $('#digg_tips').text() == "取消支持成功") { ele.$message({ showClose: true, message: $('#digg_tips').text(), duration: 1000, type: "success", }); } if ($('#digg_tips').text() == "您已支持过" || $('#digg_tips').text() == "不能推荐自己的内容") { ele.$message({ showClose: true, message: $('#digg_tips').text(), duration: 1000, type: "warning", }); } }) } window.onload =function() { setTimeout(function(){ $('.math,.MathJax,.footnote-ref,.mrow,math').attr('translate','no'); },"10000"); } </script> 侧边公告 ...

December 25, 2024 · 62 min