摘要: 本应用说明定义了秘密和挑战生成以及安全性的要求,并讨论了可以帮助满足这些要求的SHA iButton令牌的一些功能。
有几个应用程序使用SHA我按钮 令牌,用于eCash,自动售货,票价收取和用户身份验证。它们需要使用秘密来识别真实的令牌,并确保数据和货币价值不被篡改。整个加密系统的安全性取决于其正确生成和保护其秘密和挑战的能力。本应用笔记描述了生成世界级密码秘密和挑战的方法。它还描述了可以在不受攻击的情况下保存这些值的设备,并描述了秘密在任何时候都不会离开受保护的硅环境并且永远不会受到妥协的方案。
使用SHA的安全系统(电子现金、自动售货、收费、用户认证)我按钮令牌需要使用秘密来识别真实的令牌,并确保数据和货币价值不被篡改。这些系统还需要频繁地为身份验证过程生成随机挑战。密码系统的安全性取决于所涉及的秘密和挑战的强度和安全性。
本应用说明定义了秘密和挑战生成以及安全性的要求,并讨论了SHA的一些特性我可以帮助满足这些要求的按钮令牌。
一个秘密是密码系统中有效参与者知道但其他人不知道的数值。对秘密价值的了解是认证和独创性的绝对证明。
一个MAC(消息验证码)是SHA哈希函数在某些输入数据保密时的结果。它被用作保护非机密信息不被篡改和验证信息来源的一种方法。在沙我在按钮和IC设备中,SHA功能的结果是一个20字节长的MAC (MAC有时被称为签名,尽管这可能是对术语的不准确使用)。
一个挑战是一个数值,通常是随机生成的,颁发给令牌,作为令牌证明其真实性的基础。通过使用秘密值对挑战执行加密操作并返回结果,令牌可以证明它知道秘密,因此它是可信的。使用随机值,以便每个身份验证都是唯一的,攻击者无法对系统使用重放方法。
熵是一种无序和随机性的度量。“随机”一词并不总是意味着真实的、不可知的、没有可知偏差的随机性。
SHA设备秘密是64位二进制数,它提供了18,450,000,000,000,000,000个可能的值。秘密的强度在于执行暴力攻击(一种尝试每个秘密直到一个成功的攻击)所需的时间。一个好的SHA秘密将利用整个可能的秘密领域,使暴力攻击尽可能困难和耗时。
糟糕的秘密是那些限制了可能的秘密值范围的秘密。一个大写ASCII字符串的秘密(例如:“RCIKLEHB”)将字段减少到只有208,800,000,000,因为字母表中的字母远远少于可以从8位字符中生成的二进制值。组成单词的秘密(例如:“MYSECRET”)进一步减少了字段,因为组成有效单词的字母组合远远少于随机选择的字母。最好的秘密是随机生成的二进制数。
当然,任何从公共信息(你的狗的名字,你的电话号码,等等)创建的秘密都被削弱了,因为可供选择的公共信息比特的数量有限。实际上,这样一个secret的范围等于从其中选择secret的项数乘以该数据可能的变体数——这根本不是一个非常大的字段。
关于随机数的质量以及如何生成随机数的争论可能是密码学中最激烈的争论之一。甚至连“随机性”的定义本身都是人们热烈讨论的话题。为了我们的目的,如果没有人能够预测到,在任何程度上大于字段的范围,我们将认为一个数字是加密随机的。换句话说,它不是序列中的下一个步骤,它不具有比另一个数字或数字范围更大的可能性,并且它没有任何类型的模式(至少没有任何可能的攻击者可以知道的模式)。
随机数具有重要的特性。在保密过程中,对我们至关重要的一个品质叫做分发。如果一个随机数在期望的域中成为任意数的几率相等,则该随机数具有良好的分布。换句话说,1到100(包括)之间的任何随机数与1、25、78、100或该范围内任何其他数字的概率完全相同。如果随机数生成器倾向于奇数、更大的数字或靠近范围中心的数字,那么它就不是一个统计上好的生成器。
伪随机数可以通过算法或数学方式生成。这些数字并不是真正随机的,但在观察者看来可能是随机的。事实上,这些数字具有一种模式,该模式将根据它可以从中提取的存储历史池的大小在某个时刻重复。伪随机数生成器通常具有出色的统计质量,但由于其输出可能是可预测的,因此不适合作为秘密来源。事实上,任何了解发电机的机制和任何一个输出的人都可以准确地计算出下一个输出,或者可以大大减少可能的下一个输出的范围。
DS1963S SHA我Button具有可以生成统计上合理的伪随机数的机制,并且具有非常大的数据池,可以从中绘制生成它们。该模式不会在生成的数十亿字节中重复——尽管它最终确实会重复。单独来看,它是制作秘密或挑战的薄弱数据来源。然而,当向该设备提供真正随机输入数据或熵时,它就成为一种优秀的随机秘密生成工具。
熵(真正的随机性)可以在很多地方找到。操作员按键的定时,网络数据包到达的定时,电力线频率与微控制器晶体时钟的同步,这些都可能是真正熵的来源。这些来源可能具有真正的随机成分,但通常也具有较差的统计质量。例如,人类击键的时间既包含可预测的组件(击键或多或少是有规律的,并且落在一个合理的时间范围内),也包含随机组件(每次击键的精确瞬间时间)。解决方案是收集真实世界的熵,并通过伪随机系统对其进行处理,然后生成具有良好统计质量的输出数据。实际上,伪随机系统的作用是将真实熵分布到整个场中。最终的结果是一个很好的加密随机数,可以用作秘密或挑战。
一旦秘密被生成,如果它被公开,它的值就会丢失。事实上,有人会说,如果这个秘密有可能被公开,它的价值就会消失。在任何密码系统中,保密都是最大的问题,也是最大的安全问题。
因为在秘密方面,人类总是薄弱环节,所以维护秘密安全性的最佳方法是在加密设备内部生成和维护秘密,使其永远不会被任何人知道或访问。SHA设备允许秘密完全在每个设备内部组装,并且超出任何人类或外部机器的视线。
SHA设备将秘密保存在特殊的存储单元中,这些存储单元不能被外界读取或查询。这些秘密可以用来执行SHA加密功能,但不能直接观察。由于SHA功能不能被逆转,因此密钥在设备内部始终是安全的。
终极秘密是没有人知道的。但是,如果没有人知道,这样的秘密怎么能用呢?秘密共享是一种真正的秘密实际上是几个部分秘密的组合的技术。只有将所有部分秘密按适当的顺序组合在一起,才能重新生成真正的秘密。部分秘密的持有者不知道真正的秘密,知道任何一个部分秘密都不会揭示真正的秘密。(想象一个有几个锁的保险库。所有的钥匙必须合在一起才能打开金库,而拿着任何一把钥匙,甚至除了一把钥匙以外的所有钥匙,对小偷来说都是没有用的。)
SHA设备为秘密共享提供了一种内部机制。每个SHA设备都能够从两个或多个部分秘密中构建一个新秘密。为此,它使用当前的秘密和从外部提供的新的部分秘密来计算MAC。然后MAC的一部分替换原来的秘密。这允许真正的秘密完全在每个设备内计算,一次一个部分的秘密,并且永远不会暴露给外部世界。真正的秘密永远不会暴露,也不能妥协。
当然,部分秘密仍然需要特殊处理,因为获得所有这些秘密仍然可以暴露真正的秘密,但是部分秘密可以分布在整个部署过程中,并且所有秘密被泄露的几率要低得多。
SHA设备通过一种称为挑战-响应的方法进行身份验证。这是一个简单的过程,令牌可以在不泄露秘密的情况下证明它知道秘密。为了使令牌证明其真实性,主机生成一个随机数(挑战)并将其发送给令牌。令牌使用秘密生成质询的MAC,并将MAC返回给主机。主机在内部执行相同的MAC(因为它也知道秘密),如果来自令牌的响应是匹配的,则该令牌已证明自己是真实的。只有知道密钥的令牌才能生成匹配的MAC。
挑战必须是随机的原因是为了使攻击者不可能知道下一个挑战值是哪个。这防止他能够使用通过窃听其他有效令牌对话获得的响应。
适用于生成秘密的规则同样适用于生成挑战。挑战必须是真正随机的(完全不可预测的),并且必须利用可能的挑战值的整个领域——统计和加密质量。
对于不知道函数输入的观察者来说,SHA函数的输出本质上是伪随机的。构建SHA函数输出的池相当大。这些特性使SHA设备成为优秀的伪随机数生成器。输入数据的微小变化会导致结果输出的巨大变化(称为扩散)。这使得这些设备成为真正熵的优秀后处理器,使随机数具有特殊的统计和加密质量。
下面是一个使用DS1963S SHA生成随机挑战的方案示例我自动售货应用程序中的按钮。当然,同样的技术也适用于秘密生成方案:
基于微控制器的自动售货机需要随机挑战来验证到达我按钮的令牌。微控制器有一个DS1963S我按钮板载作为SHA协处理器。微控制器正在处理的到来我按钮自动售货令牌,同时处理来自自动售货机的串行通信(轮询)电子设备。固件运行一个16位定时器在任何时候从最快的时钟可用。每当消息从串行自动售货机总线到达时,计时器的值被捕获并添加到内存中的16位位置。同样地,每当我按钮令牌到达时,时间值被捕获并添加到另一个16位位置。因为我按钮令牌对系统来说是异步的,就像自动售货机的串行通信一样,这些值包含了真实熵的成分。当需要随机挑战值时,系统将存储的16位计时器sum写入DS1963S协处理器,并执行“generate challenge -”命令。然后,微控制器从DS1963S读取生成的MAC,并使用其中的一部分作为随机质询值。它还将该结果的一些字节添加到两个存储位置,进一步将熵的影响(或扩散)扩展到未来的随机值。
DS1963S的generate challenge命令使用选定的密钥。这可能是系统工作秘密之一,也可能是配置设备时注入的随机值。每次使用“generate challenge -”命令时,DS1963S都会增加一个内部计数器,当使用该函数时,该计数器也是SHA机制输入的一部分。这意味着产生的MAC每次都会不同,并且会以伪随机的方式变化,即使设备的输入保持不变。
上面的示例显示了DS1963S SHA如何处理少量真实世界的熵我按钮创建具有强统计和密码质量的随机挑战值。
基于微控制器的系统需要寻找真正随机性的来源。重要的是,这些源是攻击者无法试图以任何方式控制或偏见的机制。一个人的到来我例如,按钮装置可以用电子开关来控制。虽然这仍然是一个可行的熵源,但它不应该是唯一的。
熵的来源(真正的随机性)可能包括以下内容:
异步外部事件(串行通信、电源线过零等)
人为激活的外部事件(击键、按按钮、令牌到达等)
外部设备的定时(从一个脉冲的宽度)iButton令牌,条形码目标的速度,字符写入后LCD显示发出READY状态的时间,机械开关或继电器触点的弹跳等)。
特殊随机值生成硬件(噪声源、交叉耦合振荡器等)
当一个关键的系统秘密被存储在令牌中,并将大量分发到不受信任的个人手中时,人们总是担心这个秘密会以某种方式公开,这在大型实现中将是灾难性的。尽管有最好的方法来保护秘密免受物理和电子攻击,但总是希望将受损令牌的潜在影响降到最低。这可以通过使每个令牌中的秘密唯一于该令牌来实现。当然,主机必须能够在给定令牌标识的情况下计算出这个唯一的秘密,否则它将无法对其进行身份验证。
实现唯一令牌秘密的一种方法是使用SHA函数生成令牌ID的MAC,或者使用系统主秘密生成其他令牌或所有者身份数据(如PIN或密码)。生成的MAC(或其中的一部分)用作该令牌的秘密。获得这个唯一令牌秘密的攻击者将不知道主秘密(因为SHA不能被逆转以显示其输入数据)。
在使用唯一令牌秘密的系统中,主机必须获得重新生成唯一令牌秘密所需的数据,然后才能使用该秘密对令牌进行身份验证。这将要求主机读取令牌标识(序列号)并从用户请求任何额外所需的信息(如PIN或密码)。然后使用该数据与协处理器中已知的主秘密一起,为令牌重新生成唯一的秘密。
DS1963S SHA我当在主机系统中用作协处理器时,按钮可以完全在设备内部执行此功能,从而永远不会将主密钥、唯一令牌密钥或MAC的结果暴露给外部世界。
很容易看出,整个密码系统的安全性取决于其正确生成和保护其秘密和挑战的能力。本应用说明描述了生成世界级加密秘密和挑战的方法,以及可以在安全的地方保存这些值的设备。事实上,我们已经描述了一些方案,其中的秘密在任何时候都不会离开受保护的硅环境,也不会受到损害。
当密码系统失败时,原因几乎总是由于实现失败而不是加密本身。密码生成能力差、随机数生成能力差、挑战能力弱、密码安全性不完善等都是其主要原因。注意秘密生成和安全的细节是一个健全的密码系统实现的关键。
社群二维码
关注“华强商城“微信公众号
Copyright 2010-2023 hqbuy.com,Inc.All right reserved. 服务热线:400-830-6691 粤ICP备05106676号 经营许可证:粤B2-20210308