Internet计算机使用更先进和安全的加密身份验证方法来替换用户名和密码。
为了理解身份和认证在互联网计算机中的意义,我们必须首先了解它们在当今网络中的使用方式。
登录网站时,用户名通常是电子邮件地址或一串字母和数字。它是您的唯一标识符,可以将服务器上的相关数据与您的身份联系起来。密码是一种身份验证手段。理论上,只有您知道密码,服务器将您的密码解释为它与您通信的证据。然而,事实是密码并不是一个好的远程身份验证机制。
当您在网站上输入密码时,您的计算机会将密码发送到服务器并与密码数据库进行检查。不幸的是,黑客可以访问这些密码数据库。在最坏的情况下,密码以明文形式存储在服务器上,这是非常不安全的。即使密码是加密的,破解密码也只是黑客是否愿意为了获得访问权而投入计算和金钱资源的问题。
互联网计算机是一个以网络速度运行的区块链计算网络,可以无限地增加其容量。它的设计是通过在多个数据中心之间**数据和计算来提供安全性,以防止单个计算供应商的恶意行为。需要注意的是,虽然**可以保护数据的完整性,但不能防止信息的泄露;在互联网计算机上使用密码仍然会受到与传统网络相同的安全问题的影响。因此,在因特网计算机上,我们用适当的加密认证代替密码。
我们在因特网计算机上用于认证的主要加密机制是数字签名方案。数字签名是一个相当标准的概念,发明于20世纪70年代末,自90年代中期以来得到了广泛的应用。
它通常由以下三种算法组成:
密钥生成:密钥生成可视为密码的选择。通常,密钥的生成将创建一对密钥:一个是必须像密码一样保密的私钥,另一个是从私钥派生的公钥。
签名:签名需要信息和私钥生成。当使用数字签名进行用户身份验证时,该算法在具有私钥的客户端上运行。
验证:算法接收信息、签名和公钥,验证签名是否与信息和公钥一致。这里的关键属性是,与检查密码不同,密码需要存储在服务器上。在这种情况下,签名验证只能根据***息进行,因为服务器存储了公钥列表,每个用户都有一个,公钥和签名不需要保密。
Internet计算机上的应用是基于容器之间通过传递信息进行通信的。更具体地说,交互模是基于请求的,类似于远程过程调用。当容器a调用容器B时,容器a指定目标容器、要调用的函数的名称以及函数的参数。当在容器B上计算指定的函数时,容器也知道该函数是由容器a调用的。当求值完成时,容器a将得到函数的返回值作为响应。当用户与容器交互时,同样的远程过程调用模也适用。当用户调用容器时,用户向目标容器发送请求。请求还指定了一个带有参数的函数,用户可以在响应中获得返回值。当请求更改时,容器还知道调用它的用户的身份。
注:在ICP平台上,容器是最基本的组件,可以理解为容器,类似于以太坊等区块链公链平台上的智能合约。这些容器可以**、分叉和自组织。
上图是用户发送请求的示意图。中间的浅灰色区域显示核心请求,包括目标容器ID、函数名、参数以及调用方的标识或主体。深灰色区域显示包含身份验证信息、签名和公钥的信封。如左图所示,调用者的主体是通过散列从公钥派生的。这项技术广泛应用于区块链领域,如比特币或以太坊地址。此外,图的右侧部分显示了数字签名方案中作为消息的请求内容如何通过签名绑定到公钥。当因特网计算机收到这样一个请求时,它不仅检查签名在指定的公钥下是否有效,而且还检查公钥和调用者之间的关系。
为了确保消息实际上是由消息中指定的调用者发送的,容器会忽略这些技术细节。如果检查了所有内容,则Internet计算机将评估容器上指定的函数,但如果其中一个检查失败,则丢弃请求。
下面是关于我们使用的身份格式的一些细节。我们从der格式的公钥开始,用sha-224散列得到一个28字节的字符串。我们将添加一个字节来区分身份主题和公钥,以及我们在Internet计算机的其他位置(如容器)使用的身份主题。这29个字节由用户**的内部二进制表示。在将主体转换为文本表示时,我们首先添加一个CRC-32错误检测码。然后,使用base32对生成的字符串进行编码,**在每组中创建5个字符的组,用破折号分隔。我们选择这种格式是为了支持简单的**和粘贴以及正确的错误检测,同时仍然允许ASCII符号中少于64个字符与DNS等互联网协议兼容。
到目前为止,我们看到的方案在结构上有点不灵活。它们将用户的身份主体与单个加密密钥绑定,但是这种限制使得用户很难与来自不同设备的容器进行交互,因为他们需要在这些设备之间共享相同的加密密钥,这既麻烦又不安全。相反,我们在不同的加密密钥之间使用授权。如上图所示,您可以看到从黄色键到橙色键的委托。此委托包括委托密钥,即橙色密钥;一些附加参数,如委托范围的到期或限制;以及代表团密钥的签名,即黄色密钥。
当使用橙色密钥对请求进行签名时,用户可以使用黄色密钥中的委托来使用黄色密钥中的标识。此外,授权的力量在于可组合性。例如,橙色密钥可以将授权扩展到紫色密钥。这种结构与PKI和X.509非常相似,但这不是巧合。我们从中学习并使用更轻量级的数据结构。
委托的一个具体应用与网络认证有关。网络认证是万维网联盟(W3C)的一项新标准,主要针对网络应用的双因素认证。该标准的动机是,如前所述,密码有严重的安全缺陷。当网络钓鱼邮件、恶意软件和黑客攻击发生时,它们往往成为网络犯罪分子的猎物。
双因素认证意味着除了密码,登录网络应用程序还需要一个额外的安全因素,通常是用户拥有的安全设备。实际上,它可能是一个安全的U密钥或一个嵌入用户终端设备并由生物识别技术激活的安全芯片,存储加密密钥。由于加密密钥从不离开安全芯片,即使用户的电脑或手机被恶意软件感染,它们仍然是安全的。
当网络认证作为网络应用中的第二个因素时,协议流程如下:当用户通过提供用户名和密码开始登录过程后,网络服务器将生成一个随机质询并发送给用户的浏览器。然后,浏览器将质询发送给安全设备,安全设备需要在签署质询之前与用户进行交互。然后,将签名的质询发送回服务器,服务器根据用户注册的公钥对质询上的签名进行验证。这确保了当您登录到网络应用程序时,除了密码之外,还需要一个安全设备。
网络认证是一种开放的标准,它采用数字签名进行认证,并得到了广泛的设备支持。然而,当我们将其应用于网络计算机时,我们必须克服一些障碍。在传统网络中,网络认证采用面向会话的客户机-服务器模。用户在登录到应用程序并在同一会话中发送后续信息时进行一次身份验证。相比之下,互联网计算机实现了一个模,每个请求都是单独验证的。特别地,由于浏览器和因特网计算机之间不存在有状态会话,因此不存在能够生成质询并由安全设备签名的服务器。然而,回顾过去,在典的网络身份验证过程中,安全设备需要为服务器发送的质询提供数字签名。
为了使用相同的协议来实现请求认证,我们需要使用请求本身作为质询,由安全设备签名,类似于我们的一般请求认证方案。我们必须克服的另一个问题是,网络身份验证要求用户与每个签名进行交互。在Internet计算机提供的典前端中,一个页面的加载可能对应于多个请求。因为我们不想让用户明确地确认每个请求,所以我们使用上面的委托机制。当使用网络身份验证与容器交互时,我们首先生成一个短期会话密钥。然后,通过网络认证对会话密钥进行授权,使得单个用户的交互可以触发多个对Internet计算机的请求。
虽然网络认证对于安全地存储加密密钥非常有帮助,但它不仅将这些密钥绑定到设备,还将它们绑定到特定的容器。原因在于浏览器的安全模,它严格区分了运行在同一个web浏览器中的不同应用程序可以根据其来源访问的状态。在互联网上,你可以认为一个来源大致相当于一个网站。在因特网计算机上,每个原点对应一个容器。这种严格的状态分离对于安全性是必不可少的,但是它也使得诸如密钥备份或支持从多个设备无缝访问同一容器之类的功能变得很麻烦,因为所有这些操作必须对每个容器分别执行。我们通过使用互联网身份服务来解决这个问题,即身份提供者,它类似于您在互联网上熟悉的。使用Google或Facebook登录。
当用户第一次加载特定容器的前端时,前端会出现一个按钮,供使用IC登录。当用户单击按钮时,浏览器将打开一个弹出窗口,显示Internet身份服务,这是一个允许用户管理密钥和身份的特定应用程序。然后用户可以决定是否允许容器前端使用用户标识。如果用户同意,浏览器将被重定向到容器的前端,并可以作为用户访问容器。此机制将再次触发会话密钥和委派机制。此时,容器的前端将生成一个会话密钥对,并将公钥传输给Internet认证。如果用户确认,Internet认证将生成授权并将其返回到信息库的前端。作为通过大技术提供商进行签名的另一个好处,身份提供商的完整身份验证过程发生在用户端,因此对用户私人行为的暴露要少得多,从而减少了身份跟踪(Internet identity services,FAQ)
在用户跟踪方面,互联网身份认证将为容器的每个前端提供不同的身份,这对安全和隐私非常有利。否则,Internet身份验证将允许每个前端在用户的单个主体下登录。如果用户与不相关的服务交互,例如留言板和购物网站,这些服务可以将用户在这些网站上的行为关联起来。更糟糕的是,留言板的前端可以恶意调用购物网站的容器,并以用户的名义下订单。因此,因特网身份服务为用户登录的每个前端生成不同的身份,并通过主机名来区分它。这样,用户在不同服务上的行为就不那么容易追踪了。尽管前端仍然可以使用用户的身份来调用Internet计算机上的任何容器,但始终只有与前端相关的身份才能执行调用。
文章链接:https://www.btchangqing.cn/264924.html
更新时间:2022年12月11日
本站大部分内容均收集于网络,若内容若侵犯到您的权益,请联系我们,我们将第一时间处理。