Qypher为何安全。
致技术人员:我们将在设计原则的层面,说明Qypher以怎样的思路来保障安全。
首先——本页刻意不写的内容。
本页以"靠哪些性质与原则来保护"的方式说明Qypher的安全性。而像密钥长度、算法的确切组合、内部数据结构这类实现细节,则刻意不写:公开它们只会成为攻击者的线索,对理解安全性并无必要。Qypher的安全性并非靠隐藏设计来成立,而是由这里列出的性质本身支撑。
1. 无密码的设计
凭据是机器生成的令牌,而非人脑记忆的密码。重复使用、被猜中、记忆型密码被钓鱼等密码固有的风险,从根本上就不会发生。
2. 不存储原始凭据(仅单向哈希)
Qypher的数据库绝不以可还原的形式保存凭据。所保存的只是无法通过计算还原出原值的单向哈希(变换后的值)。因此,即便数据库万一外泄,也无法从中取出可直接使用的凭据。此外,姓名、住址等个人信息也全部加密存储,即便万一外泄,其内容也无法被直接读取。
3. 用密码学安全的随机数生成
凭据由密码学安全的伪随机数生成器(CSPRNG)产生,绝不依赖时间等可预测的输入,因此无法通过枚举或猜测来生成或复现。
4. 令牌采用经过认证的加密(可检测篡改)
二维码中的令牌除加密外,还做了完整性保护。被篡改或伪造的令牌会在验证阶段被可靠地拒绝。无法凭借部分信息拼出一个有效令牌。
5. 凭据作为"不可分割的整体"进行验证
将多个要素合为一个单元一起验证。只知道其中一部分无法通过认证,从而不给逐个攻击各要素留下余地。
6. 登录结果与"目的地"绑定验证(防截取与冒用)
登录结果里一并含有"发往哪个网站"的目的地信息,并被加封,使其事后无法被改写。接收方网站会先核验该封印是否为真,才予以接受。因此,攻击者无法在中途截取结果,拿到别的(假冒)网站去冒用。
7. 数据提供以用户同意为起点(用户掌握主动权)
默认情况下,每个网站只会收到最低限度的 Qypher ID 与年龄核验结果(是/否)。真实年龄与出生日期一律不发送,只告知用户是否满足该网站设定的年龄条件(之所以默认包含核验结果,是为了避免在需要年龄确认的场合,因拒绝发送而无法核验)。是否提供其他数据,只有在网站的请求与用户的许可同时具备时才会决定,用户未许可的数据绝不会被传出。各网站所请求的数据与条款会在登录时展示,用户可在确认内容后同意。
※ 不过,数据一旦提供,网站如何处理属于各网站自身的责任范围,Qypher 并不对此作出担保。
8. 即时失效(重新签发即作废此前的Qypher卡)
重新签发一张Qypher卡后,此前那张会在当下立即失效。一旦遗失,或感觉有任何异样,用户随时都能重新签发,使此前的凭据作废。即便万一发生泄露,暴露在风险下的时间窗也能被压到最短。
9. 服务器端会话 + 无操作超时
会话在服务器端验证,客户端不保存任何作为信任依据的秘密。一段时间无操作后会话自动失效。从设计上就不在客户端留下任何"被偷会出事"的东西。
10. 边界处的多层防御
API 由多层防护——自动化滥用检测、基于信誉的拦截、机器人过滤等(具体标准与阈值不予公开)。
11. 年龄判定由 Qypher 一方统一完成
Qypher 依据用户登记的出生日期判定年龄,但只把"用户是否满足该网站设定的年龄条件(是/否)"这一判定结果传给各网站,而非真实年龄。出生日期与真实年龄都只保留在 Qypher 内部,不会传给网站(若每次都直接发送真实年龄,可能因数值变化而被推测出生日期,因此只发送结果)。从而免去各网站自行收集、保管出生日期或年龄。
此外,各网站可按自身服务自行设定年龄阈值,并可选择对未达阈值的用户是"直接禁止使用(年龄限制)",还是"要求监护人确认"(未满13岁默认须监护人确认)。
※ 这是基于登记的出生日期所作的判定,并非依据官方证件的年龄审查。
12. 采用各国政府与金融机构也在用的加密方式
我们不用自研密码,而是采用各国政府机构与金融行业也在使用、全球公认成熟的加密方式。这些方法多年来持续受到世界各地专家的检验,可信度高。所有通信均由 TLS 保护。我们绝不让安全只依赖于"隐藏设计"。
简言之,这能抵御哪些情况。
- 即便数据库外泄:用于认证的凭据只以单向哈希形式保存,因而无法得到可直接使用的凭据。
- 即便Qypher卡被偷看或复制:只要重新签发,旧卡立即作废;伪造与篡改也会被经过认证的加密检测出来。
- 即便被引导到假冒网站:由于会验证认证结果的目的地,无法被截取转到攻击者的网站。
- 用户未许可的数据不会传出:网站收到的只是"网站的请求"与"用户的许可"相重叠的范围,未经许可的信息不会擅自流出。
我们为何不公开实现细节。因为那是"即便公开也只会便利攻击者"的信息。设计层面的安全性,由上面列出的性质来保障。若您发现了漏洞,恳请在其被用于攻击之前,先通过联系表单告知我们。
Qypher = QR + Key + Cipher
安全源于设计,而非保密。