当前位置: 首页 > news >正文

法国工程师IMT联盟 密码学及其应用 2023年期末考试题

1 在 Unix 下的安全性 ('30 分钟)

1.1 问题 1

1.1.1 问题

        我们注意constaté到通过 SMTP 服务器发送“假”电子邮件(垃圾邮件)相对容易。越来越常见的做法是在 SMTP 连接之上部署déployer TLS 协议protocole(即 SMTPS)。这解决了垃圾邮件的问题吗?这提供了哪些保证?

1.1.2 SMTP

        SMTP(简单邮件传输协议,Simple Mail Transfer Protocol)是一种用于发送和传输电子邮件的互联网标准协议。它定义了邮件服务器如何接收、处理和转发电子邮件消息。SMTP 通常用于发送邮件,而在接收邮件时常用的是 POP3(邮局协议版本3)或 IMAP(互联网邮件访问协议)。SMTP 通过“存储和转发”方式将您的电子邮件从一个服务器传输到另一个服务器,最终将邮件投递到收件人的邮箱。SMTP 使用 TCP 端口25作为主要的通信端口,安全的SMTP(通过 SSL 或 TLS 加密)则可能使用465或587端口。

1.1.3 问题答案

        部署 TLS 协议(即 SMTPS)在 SMTP 连接上增加了加密,这意味着数据(包括电子邮件内容和发送者/接收者的信息)在传输过程中被加密从而提高了数据传输的安全性然而,虽然 TLS 可以提供传输层的安全保障,确保数据在传输过程中不易被截获或篡改,但它并不直接解决垃圾邮件的问题。

        垃圾邮件问题主要与电子邮件的内容和发送者的身份有关, TLS 更多地关注于数据传输的安全。换句话说,TLS 确保了电子邮件在发送和接收过程中的加密,但它不对电子邮件的发送方进行验证,也不分析电子邮件内容以判断其是否为垃圾邮件。因此,即使在 SMTPS 下,发送“假”电子邮件(垃圾邮件)仍然是可能的。

        解决垃圾邮件问题通常需要采用更多层面的措施,例如:

        发送方身份验证:通过如 SPF(Sender Policy Framework)、DKIM(DomainKeys Identified Mail)、DMARC(Domain-based Message Authentication, Reporting & Conformance)等技术,可以帮助验证发件人的身份,减少伪造身份的情况。

        内容过滤:使用垃圾邮件过滤器分析电子邮件的内容,包括主题、正文、附件等,以识别和隔离垃圾邮件。

        用户培训和意识提高:教育用户识别潜在的垃圾邮件和网络钓鱼攻击,减少垃圾邮件的成功率。

        总结来说,虽然 SMTPS 提供了传输层面的安全保障,但解决垃圾邮件问题需要综合多种技术和策略。SMTPS 是确保电子邮件安全传输的重要步骤,但防止垃圾邮件还需采取额外措施。

1.2 问题 2

1.2.1 问题

        在测试我的防火墙配置configuration时,我发现可以对我的 Web 服务器进行 ping 操作,但是不能执行effectuer HTTP 请求requête。这个问题最可能的原因是什么?

1.2.2 问题答案

        如果你能够对 Web 服务器执行 ping 操作(通常使用 ICMP 协议),但无法执行 HTTP 请求(通常通过 TCP 端口 80 或者对于 HTTPS 则是 443),最可能的原因是防火墙规则配置导致了 HTTP 请求被阻止。具体来说,可能的原因包括:

        防火墙规则设置不当:防火墙可能被配置为允许 ICMP 流量通过(这使得 ping 请求能够成功),但同时阻止了 TCP 端口 80 和 443 上的流量。这会导致无法通过浏览器或其他 HTTP 客户端工具访问 Web 服务器。

        端口未开放或错误配置:Web 服务器上 HTTP(80)或 HTTPS(443)端口可能没有在防火墙中开放,或者配置错误,导致请求无法到达服务器。

        服务未运行:虽然这与防火墙直接无关,但如果 Web 服务(如 Apache、Nginx 等)没有在服务器上运行,或者配置错误,也可能导致无法处理 HTTP 请求。不过,这种情况下通常不会影响 ICMP 请求的成功。

        解决这类问题通常需要检查并调整防火墙规则,确保 HTTP 和 HTTPS 的端口(80 和 443)被允许通过。此外,确认 Web 服务器服务正在运行并且正确监听了这些端口也是重要的步骤。在进行更改后,可以使用工具如  curl 或 telnet 尝试连接到 Web 服务器的 HTTP 端口,以验证配置是否正确。

1.3 问题 3

1.3.1 问题

        出于安全原因,我在 HTTPS 服务器上安装了我的 web 应用程序。但是出于成本考虑,我选择生成了一个自签名证书。
        这对用户有什么影响?从实践的角度和安全性的属性角度来看?

1.3.2 问题答案

        使用自签名证书在 HTTPS 服务器上安装 web 应用程序对用户以及从安全性的角度来看,有以下几个影响:

1.3.2.1 用户角度的影响

        浏览器警告:用户首次访问使用自签名证书的网站时,浏览器会显示安全警告,提示证书不受信任。这可能会让用户感到困惑或不安,尤其是对于不熟悉这类警告的用户。

        额外步骤:为了继续访问网站,用户可能需要手动添加一个例外或信任该证书,这增加了额外的步骤,并可能降低用户体验。

1.3.2.2 安全性属性的影响

        加密:从积极的一面来看,即使是自签名证书,也能为网站提供传输层加密(TLS),这意味着数据传输过程中的数据将被加密,提高了数据的机密性。

        认证:然而,自签名证书缺乏第三方权威机构(CA)的验证,这意味着虽然数据传输是加密的,但不能保证服务器的身份。这减少了身份验证的可信度,因为任何人都可以生成一个自签名证书并声称是目标服务器。

        中间人攻击(MITM)的风险:由于缺乏有效的第三方身份验证,用户很难区分一个合法服务器与一个伪装的服务器(可能由攻击者控制)。这使得用户更容易受到中间人攻击的风险。

        综上所述,虽然使用自签名证书可以为 web 应用程序提供加密,降低了数据被截获的风险,但它在身份验证方面提供的安全性较低。对于那些对安全性要求较高的应用程序,建议使用受信任的证书颁发机构(CA)签发的证书,以增强用户信任并减少潜在的安全风险。

1.4 问题 4

1.4.1 问题

        在我们的实践操作travaux pratiques中,我们使用 John the Ripper 工具展示了密码破解cassage技术。

        结果显示,密码  thelittleblackdog (17个字符)在十分钟内就被找到了,而密码 é!(2个字符)需要几百万年才能被破解(放心,我没有等到那时)。

        你认为为什么会这样?关于选择密码,你有什么建议préconisations吗?

1.4.2 问题答案

        John the Ripper 破解密码的速度差异主要由两个因素决定:密码的复杂度(包括长度、字符集的复杂性)和破解方法(如暴力破解、字典攻击等)。

        密码长度和复杂性:"thelittleblackdog" 虽然较长,但完全由小写字母组成,如果使用的破解方法针对常见单词或短语进行了优化(例如,通过字典攻击dictionary attack),则可能相对较快被破解。而 "é!" 只有两个字符,但包括了一个特殊字符和一个非标准拉丁字母,这使得它不太可能出现在预定义的字典中,且如果采用暴力破解法brute force solution,需要遍历的字符集(包括特殊字符和非英文字符)远大于只包含小写英文字母的情况。

        破解方法:John the Ripper 和其他密码破解工具通常结合使用多种破解技术,包括字典攻击、暴力破解和基于规则的攻击。对于简单和常见的密码(如只包含小写字母的长密码),字典攻击或基于规则的攻击可能非常有效。而对于非常短但包含复杂字符的密码,如果不在字典中,可能需要转而使用暴力破解,这在字符集大时尤其耗时。

        密码选择的建议:

        使用足够的长度:推荐至少使用 12 个字符的密码。

        混合字符类型:结合使用大写字母、小写字母、数字、特殊字符,增加密码的复杂性。

        避免使用常见单词和短语:即使是长密码,如果由常见单词或短语组成,也可能容易被字典攻击破解。

        考虑使用密码短语:由几个不相关的单词组成的短语,既容易记忆又难以被破解。

        定期更换密码:即使密码很复杂,定期更换也可以减少被破解的风险。

        使用密码管理器:密码管理器可以帮助生成和存储复杂的随机密码,从而不必担心记忆问题。

        通过遵循这些建议,可以大大提高密码的安全性,减少被破解的风险。

1.5 问题 5

1.5.1 问题

        在 ssh 中,哪种机制允许客户端确保不存在中间人攻击?

1.5.2 SSH是什么

        SSH(安全外壳协议,Secure Shell)是一个网络协议,用于安全地在不安全的网络上进行远程登录和其他网络服务。SSH提供了一个加密的会话,使得敏感信息,如登录凭据和命令,可以在客户端和服务器之间安全地传输,防止了中间人攻击和数据泄露。

        SSH最常见的用途包括远程控制服务器和安全地传输文件(通过SCP或SFTP)。SSH工作在应用层,并默认使用TCP端口22。SSH不仅加密连接中的数据,还提供了身份验证和数据完整性的保证。SSH支持多种身份验证方法,包括基于密码的身份验证和基于公钥的身份验证,其中后者提供了更高的安全性。

1.5.3 问题

        在 SSH (安全外壳协议) 中,防止中间人攻击(Man-in-the-Middle, MITM)主要依靠 主机密钥验证 机制。当 SSH 客户端第一次连接到 SSH 服务器时,服务器会将其公钥发送给客户端。

        客户端软件会检查这个公钥是否已经被存储在本地已知主机密钥列表中(通常是在 `.ssh/known_hosts` 文件中)。

        首次连接:如果是第一次连接(即该服务器的公钥还未被存储在客户端的 `known_hosts` 文件中),客户端会显示一个警告,询问用户是否信任服务器的公钥。如果用户接受,该公钥就会被存储在  known_hosts 文件中,用于后续的验证。

        后续连接:在以后的连接中,客户端会自动检查服务器提供的公钥是否与 `known_hosts` 文件中存储的公钥匹配。如果公钥匹配,连接就会继续,因为客户端认为它正在连接到同一个服务器。如果公钥不匹配,SSH 客户端会阻止连接并显示一个警告,因为这可能表明存在中间人攻击。

        这个过程确保了客户端在连接到 SSH 服务器时,可以验证服务器的身份,防止中间人伪装成目标服务器以截获或篡改数据。

        此外,SSH 协议还采用了端到端的加密和其它安全措施,如密钥交换算法,进一步保障数据传输的安全性,减少被中间人攻击的风险。

1.5.4 防止中间人攻击

        为了防止中间人攻击(Man-in-the-Middle, MITM),通常会采用以下一些策略和技术:

        1. 加密:使用强加密协议(如 HTTPS、SSH、TLS/SSL)对数据进行加密,确保数据传输的安全。

        2. 公钥基础设施(PKI):通过证书颁发机构(CA)颁发的数字证书来验证参与通信双方的身份。

        3. 双因素认证:除了密码之外,使用一个额外的认证步骤,如手机短信验证码、身份认证应用生成的一次性密码或生物特征认证。

        4. 端点验证:在客户端和服务器之间建立连接时,对端点进行严格的验证,确保正在连接的是正确的服务和设备。

        5. DNS安全:使用DNSSEC防止DNS劫持,这是一种通过篡改域名解析过程来进行的中间人攻击。

        6. VPN:在不安全的网络(如公共Wi-Fi)上使用虚拟私人网络(VPN)来加密所有流量。

        7. 网络安全工具:使用防火墙、入侵检测系统(IDS)和入侵防御系统(IPS)等工具来监控和防止未授权的数据拦截。

        8. 常规更新和补丁应用:保持所有系统和软件的最新状态,确保已应用最新的安全补丁来防范已知的漏洞。

        通过组合使用这些策略和工具,可以显著增强网络安全,减少中间人攻击的风险。

1.6 问题 6

1.6.1 问题

        我的公司提供基于 web 解决方案的服务。一家安全公司的商务人员向我推荐了一种“VPN屏蔽器”,因为他告诉我:“VPN IP地址只是可能给您的业务带来问题的IP地址的一小部分。我们的代理检测系统提供了一种简单的解决方案,用于检测包括代理、VPN和Tor连接在内的各种坏IP地址。”

        1. 您认为,这样一个VPN屏蔽器,从技术上来说,是如何有效工作的?

        2. 而且,在您看来,它的优点和缺点可能是什么?

1.6.2 问题

1.6.2.1 技术实现

        VPN屏蔽器通常利用多种技术手段来识别和阻止VPN、代理和Tor连接。这些方法可能包括:        

        IP地址检测:屏蔽器可能拥有一个数据库,其中包含已知的VPN和代理服务器的IP地址。这些数据可以通过第三方服务获取,或者由公司自己维护。当检测到流量来自这些已知的IP地址时,连接会被阻止。

        端口和协议分析:VPN通常会使用特定的端口和协议。检测系统可以分析网络流量以寻找这些特征。

        DNS检测:如果DNS请求显示出与用户IP地址不一致的地理位置信息,那么这可能是VPN或代理使用的迹象。

        行为分析:异常的浏览器或连接行为也可能表明使用了VPN或代理。例如,一个IP地址短时间内请求大量不同账户的登录可能是自动化脚本或VPN用户。

        动态分析:实时分析IP地址的行为模式,比如使用速度和流量模式,以识别非典型用途。

1.6.2.2 优点和缺点
1.6.2.2.1 优点
        提高安全性:阻止VPN和代理IP地址可以减少恶意用户的匿名性,从而降低网络攻击和欺诈的风险。

        内容地理限制:对于需要执行地理限制的服务,屏蔽VPN可以帮助执行这些限制。

        减少滥用:防止用户使用VPN绕过帐户限制、控制访问和执行一些形式的版权或访问控制。

1.6.2.2.2 缺点

        误拦截:屏蔽器可能会误将合法用户的VPN为恶意行为,尤其是那些出于隐私保护和安全性考虑使用VPN的用户。

        隐私问题:客户可能对于无法使用VPN保护自己的隐私而感到不满,这可能会影响用户体验并造成客户流失。

        持续维护:由于VPN服务商会不断变更和更新他们的IP地址,所以VPN屏蔽器需要不断更新其数据库才能保持有效。

        逃避技术:有些VPN服务提供“隐形”或“混淆”服务器,这些服务器能够逃避VPN检测,因此屏蔽器不可能完全有效。

        合法用途受限:在某些情况下,个人和公司可能需要使用VPN以安全地进行远程工作,VPN屏蔽可能不利于这些合法的商业活动。

        在实施VPN屏蔽器时,公司应当权衡这些优点和缺点,确保他们的安全措施不会对正常业务活动造成不利影响,同时要通知用户关于这种策略及其可能的影响。

2 安全 JAVA ('20 分钟)

        我们现在讨论的是有关 Java 安全性的课程以及相关的实验课。

2.1 问题 1

2.1.1 问题

        用一到两句话解释 Java 执行模型(Java 虚拟机)中引入的隔离执行机制(沙箱)的目标。

2.1.2 问题

        Java虚拟机(JVM)中引入的隔离执行机制,也称为沙箱(sandbox),主要目标是提供一个受限制的执行环境,其中代码可以在限定的资源和权限范围内运行,这样可以防止代码访问或更改系统的关键部分,确保了系统的安全性和数据的隔离。

2.2 问题 2

2.2.1 问题

        Java虚拟机的沙箱机制增强了哪些安全属性?

2.2.2 问题

        Java虚拟机的沙箱机制增强了以下几个安全属性:

        完整性:通过限制代码对系统资源的访问和修改,沙箱机制有助于保护系统和数据的完整性。

        机密性:确保敏感数据不被未经授权的代码访问,从而保护信息不被泄露。

        可用性:防止恶意代码消耗过多资源,如内存和CPU,确保系统资源的正常可用性。

        访问控制:通过实施细粒度的权限控制,沙箱机制有助于对执行环境中的代码进行严格的访问控制。

2.3 问题 3

2.2.1 问题

        用图表和相关说明描述在Java虚拟机的沙箱中执行一个Java应用程序的解决方案,以及在应用程序需要与远程服务器通信的情况下。指出可能使用的私钥/公钥。

2.2.2 问题

        客户端应用程序在沙箱中运行:Java 应用程序被加载到 Java 虚拟机(JVM)的沙箱环境中。这通常是通过设置安全管理器(Security Manager)和安全策略(Policy File)来实现的,确保应用程序只能在授予的权限范围内操作。

        设置安全策略:安全策略定义了应用程序可以执行的操作,例如访问网络、读写文件等。在我们的情况下,策略应允许应用程序与指定的远程服务器进行网络通信。

        使用密钥进行安全通信:如果应用程序需要安全地与服务器通信(例如通过 HTTPS 或使用加密的套接字),则可能需要使用公钥和私钥。这里有几个关键步骤:

        公钥基础设施:服务器会有一个与之关联的公钥证书,该证书由证书颁发机构(CA)签发,并包含了服务器的公钥。

        密钥交换:在建立连接时,客户端应用程序使用服务器的公钥来加密信息,确保只有拥有匹配私钥的服务器才能解密并读取这些信息。

        客户端认证(如果需要):如果服务器要求客户端认证,那么客户端也可能需要有自己的私钥/公钥对。客户端的公钥需通过证书形式提供给服务器验证。

        安全通信流程:客户端通过沙箱中的网络权限发起安全的网络连接(比如使用 SSL/TLS),在握手阶段交换密钥,然后在加密的通道中与服务器进行通信。

        验证和信任:客户端通常需要验证服务器的证书以确保其真实性。这通常涉及到检查证书是否由客户端信任的 CA 签发,以及证书中的公钥是否与服务器提供的公钥一致。

        在这个过程中,Java 应用程序运行在限制性的沙箱环境中,它只允许应用程序在定义好的安全策略下执行操作。所有的网络通信都是通过加密渠道进行的,确保数据传输的机密性和完整性,同时使用了公钥和私钥来确保通信双方的身份。

3 安全概览 ('30 分钟)

3.1 练习 1

        一个用户收到一封包含恶意内容的邮件。这封邮件包含一个URL地址,将用户重定向到一个假冒为他银行的恶意网站。

3.1.1 问题

        1. 用户正在遭受什么类型的攻击?

        2. 如果用户在没有意识到这是恶意链接的情况下点击了链接,攻击者能做什么?

        3. 他可以使用哪些安全措施来限制与这种类型的攻击相关的风险?

        4. 通过这个链接,用户下载了一个被篡改的程序。如果他安装了这样的程序,会有什么风险?他可以使用哪些安全最佳实践来预防这类风险?

3.1.2 问题解答

        1. 用户正在遭受的攻击类型是 网络钓鱼攻击(Phishing)。这种攻击通过伪装成可信实体(如银行)来诱骗用户提供敏感信息,如登录凭证、个人信息或财务信息。

        2. 如果用户点击了恶意链接,攻击者可以:

        窃取用户的个人和财务信息:通过伪装的登录页面收集用户输入的用户名和密码。

        安装恶意软件:诱使用户下载并安装包含恶意软件的程序,该软件可以用来进一步控制用户的设备或窃取信息。

        劫持会话:如果用户已登录到他们的真实银行账户,恶意网站可能试图劫持用户的会话来执行未经授权的交易。

        3. 用户可以采取以下安全措施来限制这类攻击的风险:

        谨慎对待邮件链接:不要点击未经验证的邮件中的链接。直接通过浏览器访问已知的、可信的网站,而不是通过邮件中的链接。

        使用双因素认证:即使攻击者获得了您的登录凭证,双因素认证也可以提供额外的安全层。

        安装安全软件Installation of security software:使用反病毒软件和防火墙,并保持它们的更新,以帮助检测和阻止恶意活动。

        教育和意识提升:了解网络钓鱼和其他网络安全威胁,提高对可疑邮件和链接的警觉性。

        4. 如果用户下载并安装了被篡改的程序,可能面临的风险包括:        

        恶意软件感染:如病毒virus、木马或勒索软件,可能损害系统、窃取敏感数据或锁定文件以索取赎金。

        系统漏洞:恶意程序可能会利用系统中的安全漏洞,以获得更高级别的访问权限或执行未经授权的操作。        

        隐私泄露:个人和财务信息可能被窃取并用于欺诈或身份盗用。

        为了预防这类风险,用户可以采取以下安全最佳实践:

        只从可信来源下载软件:避免从未经验证的网站下载软件,尽量使用官方网站或可信的应用商店。

        定期更新系统和软件:保持操作系统、浏览器和所有应用程序的最新状态,以修补已知的安全漏洞。

        使用反病毒软件:并定期扫描系统,以识别和清除恶意软件。

        限制程序权限:尽量不要以管理员权限运行未知的软件或应用程序。

3.2 练习 2

        一个用户在网站 www.mon-site-web.fr 上有一个账户,并通过输入地址:http://www.mon-site-web.fr 来连接到该网站。在这样的网站上,要求他进行认证,然后下载一个可执行程序。

        1. 连接到这样的网站真的安全吗?如果不安全,为什么?

        连接到使用 HTTP 协议的网站并不真正安全,因为 HTTP 不是加密的传输协议。这意味着在用户和网站服务器之间传输的所有数据(包括用户名和密码等敏感信息)都是以明文形式传输的,易于被中间人攻击者截取和查看。

        2. 可能有哪些网络安全风险?

        中间人攻击(MITM):攻击者可以拦截用户和网站之间的通信,窃取或篡改传输的数据。

        数据泄露:由于数据未加密,个人信息、登录凭据和其他敏感数据可能被泄露。

        身份盗窃:攻击者可以使用截获的凭据进行身份盗窃,从而进一步进行欺诈或非法访问用户的其他账户。

        恶意软件分发:如果网站被攻击者篡改,可能会向用户分发恶意软件,危及用户设备的安全。

        3. 我们希望使用基于信任第三方的 PKI 架构。

        (a) 回顾 PKI 架构的工作原理。

      公钥基础设施(PKI)是一种安全架构,旨在通过使用证书颁发机构(CA)和数字证书来提供安全的电子交易。PKI 使用一对公钥和私钥来实现数据的加密和数字签名。公钥是公开可用的,而私钥是保密的。当一个实体(如个人或组织)请求一个数字证书时,CA 会验证该实体的身份,并颁发一个包含该实体公钥的证书。这个证书可以用来验证持有者的身份,并确保交换的信息加密和完整。

        (b) 这样的架构能保证哪些网络安全属性?

        机密性:使用公钥加密数据,确保只有持有相应私钥的实体才能解密,保护数据不被未授权访问。

        完整性:通过数字签名确保数据在传输过程中未被篡改。

        认证:数字证书帮助确认一个实体的身份,确保通信双方是他们声称的那些人。

        不可否认性(或称为不可抵赖性):数字签名还提供了不可否认性,即数据的发送者不能否认他们发送的数据。

        采用基于 HTTPS(加上 SSL/TLS)的通信,可以利用 PKI 提供的这些安全属性,从而确保网站与用户之间的交易既安全又可靠。

4 密码学 ('30 分钟)

4.1 图的3-着色问题

4.1.1 3-着色问题

        给定一个有k个顶点的图G,图中有若干边,每条边连接图中的两个顶点。从一个顶点可以引出任意数量的边。

        如果可以为图G的每个顶点指派三种颜色之一(例如,黄色、红色和蓝色),使得G中没有任何一条边的两个端点着相同的颜色,则称图G是3-可着色的。

        3-着色问题是一个NP完全问题:如果G是一个任意的图,找到G的一个3-着色方案(如果它确实存在的话)是一个非常困难的问题。

4.1.2 零知识证明协议的三个原则

        我们提出使用这个问题来构建一个零知识证明协议。回顾一下零知识证明协议的三个原则:

        任何被授权的人总是能成功地认证自己,

        未被授权的人最终总会暴露自己,

        观察被授权的人进行认证的间谍不会学到任何能够用来认证自己的信息。

4.1.3 零知识证明协议在本问题的应用

        在这个练习中,我们将考虑四个人物:证明者(Prouveur),验证者(Vérifieur),欺骗者(Tricheur)和间谍(Espion)。

        证明者首先生成一个3-可着色的图:例如,他随机为k个顶点中的每一个分配一种颜色。然后,他随机生成顶点对(s1, s2),如果s1和s2没有被着上相同的颜色,则将s1和s2通过一条边连接。

        他继续这个过程,直到例如所有他最初生成的顶点至少与其他两个顶点连接,并且图是连通的(总是存在从任意两个顶点s1到s2的路径)。按照这种方法构造的图是3-可着色的,并且他知道一种着色方案。

        证明者公开他的图G,这样G就变成了公开信息,但他保留他的着色方案C作为秘密。

        一个顶点s的颜色记为C(s),C(s)只能取三种可能的值:黄色,红色或蓝色。

        此外,我们假设有一个众所周知的单向哈希函数h。

        证明者想要向验证者证明自己的身份。协议的一轮进行如下:

        1. 对于G中的每个顶点s,证明者随机抽取一个不同的随机数Rs(每轮和每个顶点的随机数都不同),并发送所有的哈希值h(s, C(s), Rs)给验证者。

        2. 验证者随机选取G中由一条边相连的两个顶点s1和s2。

        3. 证明者发送两个消息<s1, C(s1), Rs1>和<s2, C(s2), Rs2>给验证者。

        4. 验证者计算这两个消息的哈希值,并核实这些值是否与证明者在第一步中给出的值相匹配。如果还满足C(s1) ≠ C(s2),则这一轮顺利完成。

        使用这样的协议,显然证明者总是能成功地认证自己,因为他知道函数C。

4.2 问题14.1

4.2.1 问题

        随机数Rs的作用是什么?如果从协议中系统地去除这些随机数会发生什么?如果对所有的顶点s使用同一个随机数R会怎样?

4.2.2 问题解答

        随机数Rs的作用是确保每次证明过程中对于每个顶点发送的哈希值是独一无二的

        随机数Rs的作用是为了掩盖颜色C(s)。如果没有随机数Rs,那么冒名顶替者可以计算3个可能的哈希值h(s, C),其中C=红色、黄色或蓝色,并通过将这三个哈希值与证明者宣布的h(s, C(s))进行比较来找到C(s)的值。

        此外,如果对所有顶点s使用同一个随机数R,那么从证明者宣布了某个顶点s1的(s1, C(s1), R)起,冒名顶替者可以通过将h(s, C(s), R)与h(s, C, R)进行比较并测试C的3个可能值(红色、黄色、蓝色)来找出所有顶点的颜色。

4.2.3 问题的详细解答

        确保哈希值的唯一性:随机数R_s确保每次证明过程中,即使是相同的顶点和颜色组合,也会生成不同的哈希值。这样,每一轮的验证都是独一无二的,提高了协议的安全性。

        掩盖颜色信息:通过将颜色信息与随机数一起哈希,随机数R_s帮助隐藏真实的颜色值。如果没有随机数,攻击者或冒名顶替者可以通过计算和比较哈希值来揭露颜色信息。

        防止颜色信息泄露:如果对所有顶点使用相同的随机数R,那么一旦攻击者知道了一个顶点的颜色,就可以更容易地猜测或计算出其他顶点的颜色。这是因为相同的随机数R没有为每个顶点提供独立的 掩码 ,使得哈希值之间的比较可能揭示出颜色信息。

        具体来说,如果对所有顶点s使用相同的随机数R,冒名顶替者可以通过以下步骤来破解颜色:

        证明者公布了某个顶点s_1h(s_1, C(s_1), R)

        冒名顶替者对于每个其他顶点s,可以计算h(s, C, R)对于每种颜色C(红色、黄色、蓝色)的值。

        通过比较这些计算出的哈希值与证明者提供的哈希值,冒名顶替者可以推断出每个顶点的颜色。

        这样,使用相同的随机数R降低了协议的安全性,因为它使得攻击者通过比较和分析哈希值来推断颜色变得更加容易。因此,在设计零知识证明协议时,为每个顶点使用不同的随机数 R_s是非常重要的,以确保每次验证的独立性和增强整个协议的安全性。

4.3 问题14.2

4.3.1 问题

        我们现在来关注作弊者的情况。他不知道证明者的秘密(即G的3-着色方案),但仍然会尝试冒充证明者。因此,他获取了证明者的公开图G,并尝试按照3-着色规则对其进行着色。由于他不知道图是如何构造的,而且问题是NP完全的,他失败了。我们假设他能部分正确地对G进行着色。在他无法无冲突地着色的G的部分,作弊者犯了错误(即,边的两端颜色相同)。为了简化,我们认为他在着色时只犯了一个错误。他的着色因此是不完美的,在下文中我们记作C0。

        作弊者决定采取以下态度。他在协议的第一步向验证者发送他的着色C0的哈希值。如果验证者询问他正确着色的一条边(s1,s2),他发送消息<s1, C0(s1), Rs1>和<s2, C0(s2), Rs2>。

        如果验证者询问他未能正确着色的边,他会发送例如<s1, 黄色, Rs1>和<s2, 红色, Rs2>的消息,只要两种颜色不同即可。作弊者能以这种方式欺骗验证者吗?

4.3.2 问题解答

        作弊者不能以这种方式混淆验证者,因为在第一步中,他已经对<s1, C0(s1), Rs1>进行了"承诺",通过传输量h(s1, C(s1), Rs1)给验证者(对于顶点s2也是同样的情况)。这意味着如果验证者随机选取的边恰好是作弊者无法正确着色的边,作弊者在第三步中发送的颜色信息将与他最初"承诺"的信息不符,验证者通过哈希值就能发现作弊者的不一致性,从而揭露作弊者的欺诈行为。

4.4 问题14.3

4.4.1 问题

        如果哈希函数h构造不当,特别是容易发生碰撞,比如对于任意的顶点s和颜色c以及任何数r,都能相对容易地找到另一种颜色c0和一个随机数r0,使得h(s, c, r) = h(s, c0, r0)。在这种情况下,证明作弊者即使不知道图G的3-着色方案,也总能成功地认证自己。

4.4.2 问题解答

        如果哈希函数h容易发生碰撞,那么当作弊者在某个他未能正确着色的顶点s上受到质询时,他可以对随机数Rs进行 撒谎 。他可以修改随机数Rs1和Rs2的值以保持与第一步中宣布的值的一致性,同时宣称颜色C(s1) = C(s2)。

4.5 问题14.4

4.5.1 问题

        我们假设h是一个安全的哈希函数。设n是图G中边的数量。作弊者在一轮中成功认证的概率是多少?证明如果n很大,作弊者在n轮中成功认证的概率接近1/e。

4.5.2 问题解答

        我们假设在n条边中只有一条边着色错误。如果每一轮提出的问题彼此独立,那么在一轮中被抓到的概率是1/n,而在n轮中不被抓到的概率是:P = (1 - 1/n)^n

        如果n足够大,我们可以使用以下近似:

        log P = n log(1 - 1/n) \approx n × (-1/n)

         P \approx e^{-1}

        如果我们执行k轮协议,那么不被抓到的概率是(1 - 1/n)^k,当k趋向于无穷时,这个概率趋向于0。

4.5.3 数学公式

        首先,P = (1 - \frac{1}{n})^n是在一轮中没有被抓到的概率。为了估算这个表达式,我们取对数:

\log P = \log\left((1 - \frac{1}{n})^n\right)

        根据对数的幂规则,可以把指数拿出来:

\log P = n \log(1 - \frac{1}{n})

        当n很大时,\frac{1}{n}就很小,我们可以使用泰勒级数的第一项来近似\log(1 - \frac{1}{n}),即:

\log(1 - x) \approx -x \quad \text{for small} \ x

        因此,当x = \frac{1}{n}时:

        \log(1 - \frac{1}{n}) \approx -\frac{1}{n}

        所以,\log P可以写作:

        \log P \approx n \times \left(-\frac{1}{n}\right)

        \log P \approx -1

        那么P大约是:P \approx e^{-1}

        最后,e^{-1}是数学常数e(约等于 2.71828)的倒数,大约等于 0.367879441...,这意味着作弊者在一轮中成功认证自己的概率大约是36.79\%

        当n足够大时,通过重复这个过程n轮,我们可以得到作弊者在所有n轮中都成功认证自己的概率,使用同样的逼近方法,得到的结果接近于1/e。这种情况下,如果n轮都是独立的,作弊者在所有轮中都不被发现的概率随n增大而减少,最终趋向于\frac{1}{e}

4.6 问题14.5

4.6.1 问题

        因此,我们可以看到,通过增加轮数,作弊者最终总会暴露自己。现在,我们将关注间谍的情况:他观察了证明者的所有认证过程,希望从中获取足够的信息来冒充证明者。如果使用前述协议,展示间谍最终能完全发现证明者的着色方案。

4.6.2 问题解答

        在每一轮中,证明者会透露两个顶点的颜色。逐渐地,间谍学会了图的着色方案。

4.7 问题14.6

4.7.1 问题

        通过这种修改,证明者在每一轮的第一步开始前,随机改变其着色约定:他会随机交换初始着色方案中三种颜色的名称。在协议的第三步中,证明者才明确透露关于他着色方案的信息。有了这种修改,间谍能从消息中推断出什么信息?

4.7.2 问题解答

        随着证明者在每一轮中随机改变颜色名称的约定,间谍从任何特定轮次获取的信息将无法直接用于识别证明者的确切颜色方案。

        换句话说,即使间谍知道某两个顶点在特定轮次中不共享相同的颜色,由于颜色名称的随机置换,间谍无法确定这些颜色在证明者原始着色方案中的确切身份。因此,这种修改极大地减少了间谍能够从每轮交流中收集到的有效信息量,实际上使他无法从观察到的颜色分配中学到任何有关证明者原始着色方案的具体信息。

4.7.3 关于间谍的解释

        这段文字描述了一个零知识证明过程中对于防止作弊者和间谍获取有效信息的策略。在原始的协议中,通过多轮验证,作弊者尝试冒充合法证明者的行为最终会被揭露。对于间谍,他通过观察证明者的所有认证过程,希望能够获取足够的信息来模仿证明者。在没有修改前的协议下,间谍通过每一轮中证明者透露的两个顶点的颜色信息,逐步学习到整个图的着色方案。

        为了阻止间谍学习到有用的信息,协议被修改为在每一轮开始之前,证明者会随机改变颜色的标记(即颜色的命名或指派)。这意味着,即便间谍在某一轮中得知了两个顶点的颜色不同,由于颜色标记在每轮都会随机变化,间谍无法确定这些颜色在证明者的原始着色方案中对应哪些具体颜色。因此,这种协议的修改大大降低了间谍通过观察获取有用信息的能力,使其不能通过观察得到的颜色分配信息来准确了解证明者的原始着色方案。

        简而言之,这种协议的修改有效地保护了证明过程的安全性,防止了间谍和作弊者通过分析验证过程中的信息来破解或模仿合法证明者的身份。

4.8 问题14.7

4.8.1 问题

        与像Fiat-Shamir这样的协议相比,这个协议的主要缺点是什么?

4.8.2 问题解答

        密钥的大小。

        这个问题涉及到零知识证明协议的一个重要方面:效率和实用性。

        在零知识证明中,密钥的大小 通常指的是进行证明所需的数据量大小。一个零知识证明协议的效率,部分地由生成和验证证明所需的数据量来衡量。如果一个协议需要传输大量的数据才能完成身份验证,那么它可能在实际应用中效率低下,特别是在带宽有限或计算资源受限的环境下。

        Fiat-Shamir协议是一种非交互式零知识证明协议,通过将交互式的步骤转化为非交互式的,使用哈希函数来代替验证者的随机挑战。这种转换减少了通信的需求,使得证明过程更加高效,尤其是在需要远程验证的场景中。

        相比之下,上文讨论的协议,每一轮都需要证明者和验证者之间的交互,并且证明者需要为图的每个顶点生成和发送额外的信息(如随机数和颜色的哈希值)。如果图很大,或者为了达到高安全性需要执行许多轮,那么所需传输的数据量也相应增加。此外,证明者还需要在每轮开始前随机改变颜色约定,这增加了协议的复杂性。

        因此,与Fiat-Shamir协议相比,这个协议的主要缺点是可能需要更大的密钥(或证明数据)大小,从而影响了它的通信效率和实用性。

相关文章:

法国工程师IMT联盟 密码学及其应用 2023年期末考试题

1 在 Unix 下的安全性 (30 分钟) 1.1 问题 1 1.1.1 问题 我们注意constat到通过 SMTP 服务器发送“假”电子邮件&#xff08;垃圾邮件&#xff09;相对容易。越来越常见的做法是在 SMTP 连接之上部署dployer TLS 协议protocole&#xff08;即 SMTPS&#xff09;。这解决了垃圾…...

魔行观察-AI数据分析-蜜雪冰城

摘要 本报告旨在评估蜜雪冰城品牌作为投资对象的潜力和价值&#xff0c;基于其经营模式、门店分布、人均消费、覆盖省份等关键指标进行分析。 数据数据源&#xff1a;魔行观察&#xff1a;http://www.wmomo.com/#/brand/brandDetails?code10013603 品牌概览 蜜雪冰城是中国…...

如何在CSS中设置px值

在CSS中设置px&#xff08;像素&#xff09;值非常简单。px是CSS中最常用的长度单位之一&#xff0c;用于指定元素的大小、位置、间距等。 以下是一些示例&#xff0c;展示如何在CSS中使用px值&#xff1a; 设置元素宽度和高度 css复制代码 .box { width: 200px; /* 设置元素…...

【linux】find命令详解

Linux中的find命令用于在文件系统中搜索符合条件的文件或目录。 一.基本语法 find [path] [expression] #path:搜索的起始目录&#xff0c;如果不指定&#xff0c;默认为当前目录 #expression&#xff1a;定义搜索条件的表达式 命令选项 -name 按文件名搜索 -size …...

Android音频管理器探索与应用

在Android应用开发中&#xff0c;音频管理器是一个至关重要的组件&#xff0c;它负责处理设备的音频功能&#xff0c;包括音量控制、音频路由、音效处理以及与其他应用的音频交互。本文将深入探讨Android音频管理器的功能和应用&#xff0c;帮助开发者更好地理解和利用这一关键…...

qt QTreeWidget文件管理器拖入应用,从应用拖入文件管理器拷贝

我用QT实现了一个文件管理的软件&#xff0c;能够实现从桌面或其他路径拖拽文件到软件&#xff0c;软件获取拖拽文件的路径。但是当我想实现反向操作时遇到了问题。在网上搜索和阅读文档一天多都未能解决该问题。 下面给出我的实现&#xff1a; Qt开发中经常会用QTreeWidget去…...

Qt中使用MySQL数据库详解,好用的模块类封装

本文将详细介绍如何在Qt应用程序中集成MySQL数据库&#xff0c;并封装实现好用的mysql数据库操作类。包括环境准备、连接数据库、执行查询及异常处理等关键步骤&#xff0c;同时包含mysql驱动的编译。分享给有需要的小伙伴&#xff0c;喜欢的可以点击收藏。 目录 环境准备 项…...

C语言实现 人生重生模拟器游戏

目录 实现一个简化版的人生重开模拟器 1.菜单函数 2.game函数 3.幼年时期&#xff08;even函数&#xff09; 4.壮年时期&#xff08;Juvenile函数&#xff09; 课余时间实现的小游戏 实现一个简化版的人生重开模拟器 1.菜单函数 void menu() {printf("---------------…...

C语言两个较大数字相加

C语言两个较大数字相加 思路分析 由于C语言中的基本数据类型&#xff08;如int、long等&#xff09;有固定的大小&#xff0c;无法直接处理非常大的数字&#xff08;如数百位的数字&#xff09;。因此&#xff0c;我们需要采用字符串或数组来表示大数字&#xff0c;并逐位进行…...

大数据面试题之Flume

目录 介绍下Flume Flume架构 Flume有哪些Source 说下Flume事务机制 介绍下Flume采集数据的原理&#xff1f;底层实现&#xff1f; Flume如何保证数据的可靠性 Flume传输数据时如何保证数据一致性&#xff08;可靠性&#xff09; Flume拦截器 如何监控消费型Flu…...

js文件的执行和变量初始化缓存

js文件和变量初始化 全局变量举例js文件加载 全局变量举例 import * as turf from "turf/turf"; import earcut from "earcut"; import * as THREE from "three"; import { TextGeometry } from "three/addons/geometries/TextGeometry.js…...

无法定位程序输入点Z9 qt assertPKcS0i于动态链接库F:\code\projects\06_algorithm\main.exe

解决方法&#xff1a; 这个报错&#xff0c;是因为程序在运行时没要找到所需的dll库&#xff0c;如果把这个程序方法中对应库的目录下执行&#xff0c;则可正常执行。即使将图中mingw_64\bin 环境变量上移到msvc2022_64\bin 之前也不可以。 最终的解决方法是在makefile中设置环…...

GoLand 2024 for Mac GO语言集成开发工具环境

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件&#xff08;适合自己的M芯片版或Intel芯片版&#xff09;&#xff0c;将其从左侧拖入右侧文件夹中&#xff0c;等待安装完毕2、应用程序显示软件图标&#xff0c;表示安装成功3、打开访达&#xff0c;点击【文…...

Protocol Buffer 基础(c++)

本教程提供了使用协议缓冲区的基本介绍。通过逐步创建一个简单的示例应用程序&#xff0c;介绍以下内容&#xff1a; 1.在.proto文件中定义消息格式。 2.使用 protocol buffer 编译器。 3.使用c protocol buffer API来写入和读取消息。 一、问题描述 将要使用的示例是…...

上位机网络通讯

目录 一 设计原型 二 后台源码 一 设计原型 二 后台源码 using System; using System.Net.Sockets; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace 上位机网络通讯 {public partial class Form1 : Form{public Form1(){Initializ…...

转让5000万无区域能源公司要求和流程

国家局的公司&#xff0c;也就是无地域无区域性的公司名称。这样的公司是还可以继续注册的&#xff0c;但是想要拥有国家局无区域的名称就不是那么容易的了。总局的企业要求高&#xff0c;也是实力的体现。对字号有保护。所以有很多人都对无地域的名称一直情有独钟。现有一家名…...

WordPress Quiz Maker插件 SQL注入漏洞复现(CVE-2024-6028)

0x01 产品简介 WordPress Quiz Maker插件是一款功能强大的测验生成工具,旨在帮助用户轻松、快速地构建复杂的测验和考试。插件支持多种问题类型,包括单选框(MCQ)、复选框(MCQ)、下拉列表(MCQ)、文本、短文本、数字、日期等。还支持横幅(HTML)显示信息性消息、填空题…...

Swift中的二分查找:全面指南

Swift中的二分查找&#xff1a;全面指南 简介 二分查找是计算机科学中的经典算法&#xff0c;被广泛用于在已排序的数组中高效地搜索目标值。与线性查找逐个检查每个元素不同&#xff0c;二分查找不断将搜索区间减半&#xff0c;因此在处理大数据集时要快得多。 在这篇博客中…...

BUG TypeError: GPT2Model.forward() got an unexpected keyword argument ‘past’

TypeError: GPT2Model.forward() got an unexpected keyword argument past’ 环境 transformers 4.38.1详情 这是由于新版的transformers 对GPT2Model.forward() 参数进行了改变导致的错误。具体是past名称改为了 past_key_values 。 解决方法 找到错误语…...

解析Kotlin中的Lambda【笔记摘要】

先看实例&#xff1a; fun b(param: Int): String {return param.toString() }fun a(funParam: (Int) -> String): String {return funParam(1) }a(::b) val d ::b1.双冒号 ::method 到底是什么&#xff1f;答&#xff1a;一个指向和该函数具有相同功能的对象的引用 因为…...

rust单元测试顺序执行

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 存在的问题 有时候&#xff0c;不同单元测试之间可能会竞争相同的资源&#xff0c;比如读写相同的文件。在这种情况下&#xff0c;如果…...

力扣-744. 寻找比目标字母大的最小字母

文章目录 力扣题目代码工程 力扣题目 给你一个字符数组 letters&#xff0c;该数组按非递减顺序排序&#xff0c;以及一个字符 target。letters 里至少有两个不同的字符。 返回 letters 中大于 target 的最小的字符。如果不存在这样的字符&#xff0c;则返回 letters 的第一个…...

一篇文章搞懂弹性云服务器和轻量云服务器的区别

前言 在众多的云服务器类型中&#xff0c;弹性云服务器和轻量云服务器因其各自的特点和优势&#xff0c;受到了广大用户的青睐。那么&#xff0c;这两者之间到底有哪些区别呢&#xff1f;本文将为您详细解析。 弹性云服务器&#xff1a;灵活多变的计算资源池 弹性云服务器&…...

横穿自动驾驶

如果有一条线&#xff0c;可以穿起来所有自动驾驶的核心模块&#xff0c;那么我感觉它就是最优化&#xff0c;选择优化变量、构造优化问题、求解优化问题&#xff0c;这几个步骤贯穿了自动驾驶的始终。 先从我的自身接触顺序写起。最开始做个一点深度学习&#xff0c;那还是20…...

为什么网上商店需要翻译成其他语言

网上商店不仅仅是一个可以买到商品的网站。它是一个完整的电子商务平台&#xff0c;为来自世界各地的用户提供购买所需物品的机会。但是&#xff0c;为了让这些用户舒适地使用网站&#xff0c;需要高质量的翻译和本地化。 本地化是指产品或服务适应特定文化或市场的过程。它包…...

【高考志愿】交通运输工程

目录 一、专业概述 二、课程设置 三、就业前景 四、报考注意 五、未来发展 六、交通运输工程专业排名 高考志愿选择交通运输工程专业&#xff0c;无疑是一个既具远见又富有挑战性的决定。这个专业以其综合性强、实用性高的特点&#xff0c;吸引了大批有志于投身交通事业的…...

【深度学习】【Lora训练3】StabelDiffusion,Lora训练过程,秋叶包,Linux,SDXL Lora训练

为了便于使用&#xff0c;构建一个docker镜像来使用秋叶包。2024年6月26日。 docker run -it --gpus all -v /ssd/xiedong:/datax --net host kevinchina/deeplearning:pytorch2.3.0-cuda12.1-cudnn8-devel-xformers bashgit clone --recurse-submodules https://github.com/A…...

ubuntu系统下如何安装python

在Ubuntu系统下安装Python&#xff0c;有多种方法可供选择。以下是两种常见的方法&#xff1a; 一、使用apt包管理器安装 安装步骤如下&#xff1a; 首先更新软件包列表 sudo apt update安装Python 3&#xff1a; 输入以下命令以安装Python 3&#xff08;Ubuntu的默认Pyth…...

邦芒攻略:职场中学会这五种管好情绪的方法

​​我们在公司里面在跟同事的一些往来&#xff0c;或者说是工作的一些合作当中。相信很多人都会有与周围的一些人发生过一些各种的争执&#xff0c;或者说是一些分歧。当然作为每一个职场的人来说&#xff0c;每天都是工作很累的&#xff0c;也是都很辛苦的&#xff0c;所以说…...

Linux各种命令——tac命令,more 命令, less命令,head命令,tail命令,file 命令, stat 命令

注意&#xff1a;tac命令是倒置输出文件内容 #### tac - **作用&#xff1a;倒叙访问文件内容** - 格式&#xff1a;tac 参数 文件名 - **例如&#xff1a;** **tac /etc/passwd** #### more 命令 - 作用&#xff1a;翻页查看文件内容&#xff0c;适合内容较多的文件查看…...

【Rust入门教程】hello world程序

文章目录 前言Hello World程序运行总结 前言 对于学习任何一种新的编程语言&#xff0c;我们都会从编写一个简单的Hello World程序开始。这是一个传统&#xff0c;也是一个开始。在这篇文章中&#xff0c;我们将一起学习如何在Rust中编写你的第一个程序&#xff1a;Hello Worl…...

激活函数、向前传播、损失函数、梯度下降

激活函数 作用&#xff1a;主要引入了非线性。从而能解决很复杂的非线性关系。能更好地处理现实世界的数据和任务。 向前传播 向前传播描述了&#xff0c;神经网络中&#xff0c;输入层到输出层的信号传播和处理过程。输入层将特征数据输入&#xff0c;加权求和&#xff0c;…...

three.js - MeshStandardMaterial(标准网格材质)- 金属贴图、粗糙贴图

金属贴图、粗糙贴图 金属贴图&#xff1a;metalnessMap 和 粗糙贴图&#xff1a;roughnessMap&#xff0c;是用于模拟物体表面属性的两种重要贴图技术&#xff0c;这两种贴图&#xff0c;通常与基于物理的渲染&#xff08;PBR&#xff09;材质&#xff08;如&#xff1a;MeshSt…...

算法-位图与底层运算逻辑

文章目录 1. 位图的理论基础2. 完整版位图实现3. 底层的运算逻辑-位运算 1. 位图的理论基础 首先我们要理解什么是位图, 位图的一些作用是什么 位图法就是bitmap的缩写。所谓bitmap&#xff0c;就是用每一位来存放某种状态&#xff0c;适用于大规模数据&#xff0c;但数据状态又…...

黑马点评-Redis的缓存击穿,缓存雪崩,缓存穿透,互斥锁,逻辑过期

文章目录 1.缓存穿透2.缓存雪崩3.缓存击穿3.1 互斥锁3.2 基于逻辑过期 1.缓存穿透 解决办法 写入NULL值到Redis缓存&#xff0c;以后就会命中Redis的控制缓存而不会出现请求直接打到数据库的问题&#xff01; 代码 2.缓存雪崩 这个概念很好理解&#xff0c;雪崩就是无数的…...

8624 多项式系数累加和

这个问题可以通过使用数学的导数规则来解决。对于一个多项式&#xff0c;它的导数可以通过将每一项的系数乘以它的指数&#xff0c;然后降低该项的指数来得到。这个过程可以重复M次来得到多项式的M阶导数。然后&#xff0c;我们可以简单地将所有项的系数相加来得到结果。 以下…...

使用 C# 和 OpenXML 读取大型 Excel 文件

介绍 高效读取大型 Excel 文件可能具有挑战性&#xff0c;尤其是在处理需要高性能和可扩展性的应用程序时。Microsoft 的 OpenXML SDK 提供了一套强大的工具来处理 Office 文档&#xff08;包括 Excel 文件&#xff09;&#xff0c;而无需在服务器上安装 Excel。本文将指导您使…...

【基于R语言群体遗传学】-5-扩展到两个以上等位基因及多基因位点

我们现在继续对于群体遗传学进行统计建模&#xff0c;书接上回&#xff0c;我们讨论了孤雌生殖的物种违反哈代温伯格遗传比例的例子&#xff0c;那我们现在来看多于两个等位基因的情况的计算。 如果没有看过之前文章的同学&#xff0c;可以先去看一下之前的文章&#xff1a; …...

重采样(上采样或下采样)是什么?

重采样&#xff08;Resampling&#xff09;是在数据处理中常用的一种技术&#xff0c;主要用于处理数据集中的不平衡问题。具体来说&#xff0c;重采样可以分为上采样&#xff08;Oversampling&#xff09;和下采样&#xff08;Undersampling&#xff09;&#xff0c;它们分别是…...

AI与Python共舞:如何利用深度学习优化推荐系统?(2)

推荐系统的前世今生 推荐系统的历史可以追溯到20世纪90年代&#xff0c;从最初的基于内容过滤和协同过滤&#xff0c;到现在融合了机器学习甚至是深度学习的混合型推荐&#xff0c;其目标始终如一&#xff1a;更精准、更个性化地为用户推荐内容。随着Python的普及&#xff0c;…...

ChatGPT:Java中的对象引用实现方式

ChatGPT&#xff1a;Java中的对象引用实现方式 如果使用句柄的话&#xff0c;那么 Java 堆中将会划分出一块内存来作为句柄池&#xff0c;reference 中存储的就是对象的句柄地址&#xff0c;而句柄中包含了对象实例数据与对象类型数据各自的具体地址信息。 你提到的句柄机制是…...

云渗透实战手册:云API攻防之云服务端点侦查

在云计算环境中的渗透&#xff0c;与传统渗透相比&#xff0c;新增加了许多新的攻击面&#xff0c;同时也因为云计算的特点我们需要转变渗透的思维&#xff0c;用云计算的方式去思考云渗透。 基础知识 在云渗透开始之前&#xff0c;我们需要首先阐述标题中提到的云服务端点概…...

PHP 爬虫之使用 Curl库抓取淘宝商品列表数据网页的方法

使用 PHP 的 cURL 库来抓取淘宝商品列表数据网页需要谨慎&#xff0c;因为淘宝等电商平台通常会有反爬虫机制&#xff0c;以防止数据被滥用。然而&#xff0c;如果你只是出于学习目的&#xff0c;并且了解并遵守了淘宝的robots.txt文件和相关的使用条款&#xff0c;你可以尝试使…...

Python基础小知识问答系列-可迭代型变量赋值

1. 问题&#xff1a; 怎样简洁的把列表中的元素赋值给单个变量&#xff1f; 当需要列表中指定几个值时&#xff0c;剩余的变量都收集在一起&#xff0c;该怎么进行变量赋值&#xff1f; 当只需要列表中指定某几个值&#xff0c;其他值都忽略时&#xff0c;该怎么…...

主流 Canvas 库对比:Fabric.js、Konva.js 和 Pixi.js

在前端开发中&#xff0c;HTML5 Canvas 是一个强大的工具&#xff0c;可以用来创建图形、动画和各种视觉效果。为了简化和增强 Canvas 的使用&#xff0c;社区中出现了许多库。本文将对比三种主流的 Canvas 库&#xff1a;Fabric.js、Konva.js 和 Pixi.js&#xff0c;分析它们的…...

backbone是什么?

在深度学习中&#xff0c;特别是计算机视觉领域&#xff0c;"backbone"&#xff08;骨干网络&#xff09;是指用于提取特征的基础网络。它通常是卷积神经网络&#xff08;CNN&#xff09;&#xff0c;其任务是从输入图像中提取高层次特征&#xff0c;这些特征然后被用…...

四十篇:内存巨擘对决:Redis与Memcached的深度剖析与多维对比

内存巨擘对决&#xff1a;Redis与Memcached的深度剖析与多维对比 1. 引言 在现代的系统架构中&#xff0c;内存数据库已经成为了信息处理的核心技术之一。这类数据库系统的高效性主要来源于其对数据的即时访问能力&#xff0c;这是因为数据直接存储在RAM中&#xff0c;而非传统…...

HTML5的多线程技术:Web Worker API

Web Workers API 是HTML5的一项技术&#xff0c;它允许在浏览器后台独立于主线程运行脚本&#xff0c;即允许进行多线程处理。这对于执行密集型计算任务特别有用&#xff0c;因为它可以防止这些任务阻塞用户界面&#xff0c;从而保持网页的响应性和交互性。Web Workers在自己的…...

Java | Leetcode Java题解之第206题反转链表

题目&#xff1a; 题解&#xff1a; class Solution {public ListNode reverseList(ListNode head) {if (head null || head.next null) {return head;}ListNode newHead reverseList(head.next);head.next.next head;head.next null;return newHead;} }...

660错题

不能局部求导,局部洛必达...

jmeter-beanshell学习1-vars使用获取变量和设置变量

最近又开始了用jmeter做自动化&#xff0c;不管怎么实现&#xff0c;都逃离不了用beanshell&#xff0c;最后把所有校验都放在了beanshell判断&#xff0c;效果还不错。 首先jmeter有很多beanshell相关的元件&#xff0c;取样器、前置处理器、后置处理器、断言&#xff0c;暂时…...

c++【入门】加乘算式

限制 时间限制 : 1 秒 内存限制 : 128 MB 题目 我们现在要做一个非常简单的题目&#xff0c;实现一个完整的程序。当它运行起来后&#xff0c;我们希望通过键盘输入三个整数&#xff0c;我们先把它们称为 a 、 b 和 c 。然后把他们的代入 (a b) * c 作为结果给存到sum&…...

养老院生活管理系统

摘要 随着全球范围内人口老龄化趋势的日益加剧&#xff0c;养老院作为老年人生活的重要场所&#xff0c;其生活管理问题也显得愈发突出和重要。为了满足养老院在日常生活管理、老人健康监护、服务人员管理等多方面的需求&#xff0c;提高管理效率和服务质量。决定设计并实现了…...

Android - 模拟器

Android SDK 包括一个在您的计算机上运行的虚拟移动设备模拟器。 该模拟器可让您在不使用物理设备的情况下对 Android 应用程序进行原型设计、开发和测试。 在本章中&#xff0c;我们将探索真实安卓设备中存在的模拟器中的不同功能。 创建 AVD 如果您想模拟真实设备&#xff0c…...

ASP.NET Core 6.0 使用 Action过滤器

Action过滤器 在ASP.NET Core中&#xff0c;Action过滤器用于在执行Action方法之前或之后执行逻辑。你可以创建自定义的Action过滤器来实现这一点。 继承 ActionFilterAttribute 类&#xff1a; [TypeFilter(typeof(CustomAllActionResultFilterAttribute))]public IActionRe…...

Pycharm一些问题解决办法

研究生期间遇到关于Pycharm一些问题报错以及解决办法的汇总 ModuleNotFoundError: No module named sklearn’ 安装机器学习库&#xff0c;需要注意报错的sklearn是scikit-learn缩写。 pip install scikit-learnPyCharm 导包提示 unresolved reference 描述&#xff1a;模块…...

爬虫案例-亚马逊反爬分析-验证码突破(x-amz-captcha)

总体概览&#xff1a;核心主要是需要突破该网站的验证码&#xff0c;成功后会返回我们需要的参数后再去请求一个中间页&#xff08;类似在后台注册一个session&#xff09;&#xff0c;最后需要注意一下 IP 是不能随意切换的 主要难点&#xff1a; 1、梳理整体反爬流程 2、验证…...

数据结构 | 详解二叉树——堆与堆排序

&#x1f95d;堆 堆总是一棵完全二叉树。 大堆&#xff1a;父节点总是大于子节点。 小堆&#xff1a;父节点总是小于子节点。 注意&#xff1a;1.同一个节点下的两个子节点并无要求先后顺序。 2.堆可以是无序的。 &#x1f349;堆的实现 &#x1f334;深度剖析 1.父节点和子…...

【开源三方库】Aki:一行代码极简体验JSC++跨语言交互

一、简介 OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;的前端开发语言是ArkTS&#xff0c;在TypeScript&#xff08;简称TS&#xff09;生态基础上做了进一步扩展&#xff0c;继承了TS的所有特性&#xff0c;是JavaScript&#xff08;简称JS&#xf…...

搜维尔科技:Movella Xsens用于动画,CG,短视频制作案例

用户名称 广州百漫文化传播有限公司 应用场景 基于Xsens MVN Link 动作捕捉系统的动画制作、CG制作、短视频制作、快速动画MAYA插件、影视动漫实时合成预渲染。 现场照片 《西行纪》内容简介&#xff1a;在远古神明的年代&#xff0c;世间存在着天众、龙众、阿修罗等八部众…...

SpringBoot特性

文章目录 SpringBoot1 概述2 核心特性 SpringBoot 1 概述 SpringBoot是一个Java软件开发框架&#xff08;脚手架&#xff09;&#xff1b;设计目的&#xff1a;简化项目的初始搭建以及开发过程&#xff0c;该框架机制使开发人员不再需要大量的手动依赖管理。 2 核心特性 起步…...

JAVA系列:NIO

NIO学习 一、前言 先来看一下NIO的工作流程图&#xff1a; NIO三大核心组件&#xff0c;channel&#xff08;通道&#xff09;、Buffer&#xff08;缓冲区&#xff09;、selector&#xff08;选择器&#xff09;。NIO利用的是多路复用模型&#xff0c;一个线程处理多个IO的读…...