Designing Encryption Algorithms for Real People

B. Schneier
{"title":"Designing Encryption Algorithms for Real People","authors":"B. Schneier","doi":"10.1109/NSPW.1994.656244","DOIUrl":null,"url":null,"abstract":"There is a wide disparity between cryptographic algorithms as specified by researchers and cryptographic algorithms as implemented in software applications. Programmers are prone to implement poor key management, make mistakes coding the algorithm, and use the algorithm in ways and for periods of time not originally intended. I propose design heuristics for designing algorithms in the “hostile” implementation environment of real-world software development.\nIn the real world, it is easy to choose a secure encryption algorithm. There are several, all designed by respected cryptographers, all described in the open literature, and all implemented in public-domain software. It is much harder to implement the algorithm properly in a software application.\nAs a result, implementations of the algorithm are often far less secure in practice than its creators envisioned them. While it is not strictly the job of an algorithm designer to concern himself with implementation details, it is important to realize how algorithms are used in the real world. Armed with this knowledge, a cryptographer can make his algorithms resilient to the kinds of abuses that they will most likely face in the hands of naive programmers.\nThis paper concerns itself with software implementations of cryptographic algorithms. Traditionally strong encryption was almost exclusively found in special-purpose and embedded hardware. Since these hardware devices were self-contained, it was easier to design them securely and force secure implementations. Today, the increased demand for cheap encryption combined with the increased power of personal computers has made software encryption more ubiquitous. Mistakes are far more common in software cryptographic systems, because programmers have far more control over the details of a software system.\n They have more opportunities to make mistakes in programming, implement bad key management processes, ignore memory management issues, and cut corners to improve performance.","PeriodicalId":265057,"journal":{"name":"Proceedings New Security Paradigms Workshop","volume":"84 1","pages":"0"},"PeriodicalIF":0.0000,"publicationDate":"1994-08-03","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":"6","resultStr":null,"platform":"Semanticscholar","paperid":null,"PeriodicalName":"Proceedings New Security Paradigms Workshop","FirstCategoryId":"1085","ListUrlMain":"https://doi.org/10.1109/NSPW.1994.656244","RegionNum":0,"RegionCategory":null,"ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":null,"EPubDate":"","PubModel":"","JCR":"","JCRName":"","Score":null,"Total":0}
引用次数: 6

Abstract

There is a wide disparity between cryptographic algorithms as specified by researchers and cryptographic algorithms as implemented in software applications. Programmers are prone to implement poor key management, make mistakes coding the algorithm, and use the algorithm in ways and for periods of time not originally intended. I propose design heuristics for designing algorithms in the “hostile” implementation environment of real-world software development. In the real world, it is easy to choose a secure encryption algorithm. There are several, all designed by respected cryptographers, all described in the open literature, and all implemented in public-domain software. It is much harder to implement the algorithm properly in a software application. As a result, implementations of the algorithm are often far less secure in practice than its creators envisioned them. While it is not strictly the job of an algorithm designer to concern himself with implementation details, it is important to realize how algorithms are used in the real world. Armed with this knowledge, a cryptographer can make his algorithms resilient to the kinds of abuses that they will most likely face in the hands of naive programmers. This paper concerns itself with software implementations of cryptographic algorithms. Traditionally strong encryption was almost exclusively found in special-purpose and embedded hardware. Since these hardware devices were self-contained, it was easier to design them securely and force secure implementations. Today, the increased demand for cheap encryption combined with the increased power of personal computers has made software encryption more ubiquitous. Mistakes are far more common in software cryptographic systems, because programmers have far more control over the details of a software system. They have more opportunities to make mistakes in programming, implement bad key management processes, ignore memory management issues, and cut corners to improve performance.
为真人设计加密算法
研究人员给出的加密算法与软件应用中实现的加密算法之间存在很大的差距。程序员很容易实现糟糕的密钥管理,在算法编码中犯错误,并以非最初预期的方式和时间使用算法。我提出了在现实世界软件开发的“敌对”实现环境中设计算法的设计启发式。在现实世界中,选择安全的加密算法是很容易的。有几个,都是由受人尊敬的密码学家设计的,都在开放文献中描述,都在公共领域的软件中实现。在软件应用程序中正确实现该算法要困难得多。因此,该算法的实现在实践中往往远不如其创建者所设想的那样安全。虽然严格意义上讲,关注实现细节并不是算法设计者的工作,但了解算法在现实世界中的使用方式是很重要的。有了这些知识,密码学家可以使他的算法能够抵御各种滥用,而这些滥用很可能会在天真的程序员手中遇到。本文关注的是加密算法的软件实现。传统上,强加密几乎只存在于特殊用途和嵌入式硬件中。由于这些硬件设备是自包含的,因此更容易安全地设计它们并强制执行安全实现。如今,对廉价加密的需求不断增加,加上个人电脑功能的增强,使得软件加密变得更加普遍。错误在软件加密系统中更常见,因为程序员对软件系统的细节有更多的控制。他们有更多的机会在编程中犯错误、实现糟糕的密钥管理进程、忽略内存管理问题以及为了提高性能而偷工减料。
本文章由计算机程序翻译,如有差异,请以英文原文为准。
求助全文
约1分钟内获得全文 求助全文
来源期刊
自引率
0.00%
发文量
0
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
确定
请完成安全验证×
copy
已复制链接
快去分享给好友吧!
我知道了
右上角分享
点击右上角分享
0
联系我们:info@booksci.cn Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。 Copyright © 2023 布克学术 All rights reserved.
京ICP备2023020795号-1
ghs 京公网安备 11010802042870号
Book学术文献互助
Book学术文献互助群
群 号:604180095
Book学术官方微信
小红书