0%

Cryptographic Library APIs

《“I’m pretty expert and I still screw it up”》

论文地址:“I’m pretty expert and I still screw it up”: Qualitative Insights into Experiences and Challenges of Designing and Implementing Cryptographic Library APIs (computer.org)

2025-S&P-CCFA

总结:对21位加密库开发者进行半结构化采访,获取关于加密库相关的设计经验。

一、研究背景与动机

加密库作为现代软件系统中基础且关键的安全组件,其设计和使用错误却频繁导致严重的安全问题。现有研究多集中在“开发者如何误用加密库”,而本研究首次聚焦“加密库API设计者是如何作出设计与实现决策的”。

二、研究目标与方法

核心研究问题(RQs):

  1. RQ1:加密库API的设计与实现决策是如何做出的? why & how
  2. RQ2:开发者在设计这些API过程中面临哪些挑战?
  3. RQ3:如何更好地支持API设计者提高安全性与可用性? 辅助作用

方法:

  • 进行了21位加密库开发者的半结构化深度访谈;
  • 采用主题分析(Thematic Analysis)进行编码与归类;
  • 受访者来自开源、商业、嵌入式、微型和研究类库的核心开发者或维护者。

相关工作:

  • API设计的原则和进程
  • 密码库的可用性
  • 密码误用的影响

选人相关:

  1. 怎么选人(大体背景)
  2. 面试程序
  3. 定性分析
  4. 道德与数据保护
  5. 限制(幸存者偏差)

三、核心发现

1. 设计动因与影响因素(RQ1)

  • API设计广泛受库的用途、标准、其他库、语言生态、遗留代码等因素影响;
  • 抽象层次选择在设计中极其关键:高抽象利于误用防止,低抽象利于灵活性;
  • 安全默认(safe defaults)广受推崇,但其设定常依赖设计者直觉;
  • 大部分库都在标准之上做了本地裁剪或补充设计,标准并非一锤定音;
  • 设计者高度依赖个人经验与社群反馈,缺乏系统的可用性参考依据。

2. 面临的挑战(RQ2)

  • 缺乏对“API可用性”的明确定义和评价工具
  • 文档维护成本高、质量不稳定
  • 用户反馈多但有效信号少,尤其在开源社区中面临用户威胁或无效建议;
  • 兼容性 vs 安全性冲突突出,很多功能因历史遗留难以彻底废弃;
  • 资源受限严重:许多开发者兼职、志愿、缺乏资金支持,难以进行系统可用性测试。

3. 设计三难困境:Usability vs Security vs Flexibility(RQ3)

  • 抽象程度的调整决定了API对不同用户的适配能力;
  • 误用防止设计往往需要牺牲灵活性;
  • 安全需求(如常数时间、形式化验证)可能会导致用户体验恶化
  • 开发者自测是主要的可用性评估方式,缺乏系统工具或方法支持。

四、研究贡献

  • 首次系统性地从API设计者视角出发,揭示加密库API背后的设计权衡;
  • 明确指出当前标准化流程中严重缺乏对API设计与可用性的考虑
  • 提出促进“人因密码学(Human-Centered Cryptography)”发展的建议:

建议:

  1. 将API设计指导纳入标准化流程
  2. 推动基于经验和实证的可用性研究
  3. 开发低成本的可用性评估工具,便于开发者在有限资源下测试API设计;
  4. 构建更系统化的误用场景分析与知识传播机制

五、研究局限与未来方向

  • 受访样本倾向于经验丰富、偏重可用性意识的开发者,样本选择存在偏倚
  • 为定性研究,不追求统计意义上的普适性,更重在提供深入洞察;
  • 未来需结合更大规模的量化分析工具实验验证来强化结论的推广性。

六、总结语

本研究打破了以往“以使用者为中心”的单一视角,从“设计者为中心”出发,系统揭示了当前加密库API在现实设计与实现过程中的真实挑战,尤其在人因工程、标准化指导缺位、经验主义过重等方面提供了深入反思和建设性建议。它为未来设计更安全、可用、可维护的加密库提供了实证基础与方向引导。


七、个人理解

这个研究首先不能用复现,也不能用于复制(R+R,not),本质上这个工作是一个人脉的体现(大胆)。从加密API误用检测领域去考虑,这个工作属于如何避免加密API误用,从设计加密库的方法去避免,也就是从源头减少误用。之前有工作1(CogniCrypt: Supporting developers in using cryptography ASE-2017-ccfa)提出CogniCrypt,一个集安全代码生成与静态分析于一体的 Eclipse 插件,实现开发人员在写代码的过程中避免误用;有工作2(From Struggle to Simplicity with a Usable and Secure API for Encryption in Java ESEM-2024-ccfb)提出了SafEncrypt框架,通过”安全默认配置+流式API引导”的设计范式,解决了传统加密接口的三大安全漏洞问题,有点类似本文的加密库设计来避免误用。

对于本文给出的结论,目前感觉并没有特别好的点(可能是我没发现),都算是一些老生常谈的问题,不过本文有条理有逻辑的梳理出来,对之后的相关工作肯定是有帮助的。