让我们从一些基本定义开始:
代码通过将数据翻译成另一种语言(通常是私有语言)来保护数据。翻译成西班牙语的英语是编码的,但它不是很安全,因为很多人都懂西班牙语。
Cipher通过使用密钥对数据进行加扰来保护数据。Julius Caesar 首先记录的字母替换密码就是一个例子。现代技术涉及使用素数对二进制数据进行数学处理。最好的技术使用非对称密钥;用于加密数据的密钥无法解密,需要不同的密钥。这允许公开密钥并且是 SSL 浏览器通信的基础。
加密通过编码和/或加密数据来保护数据。
所有这些术语通常可以互换使用,但它们是不同的,而且这些差异有时很重要。您要做的是通过密码保护数据。
如果数据是“清晰的”,那么如果它被截获,它就会丢失。如果它被加密,那么数据和密钥都需要被截获。如果它被加密和编码,那么需要截取数据、密钥和代码。
您的数据在哪里易受攻击?
- 任何数据最容易受到攻击的地方是当它明确属于某人的个人财产、存储设备(USB、CD、一张纸)或在他们的头脑中时,因为该人很容易受到诱导或胁迫。这是 Wikileaks 的基础——信任信息的人被诱使背叛了这种信任——我把这个道德问题留给你个人的良心。
- 当它在客户端和服务器之间传输时,反之亦然。除了具有国家安全重要性的数据外,SSL 加密方法应该是足够的。
- 当它在程序的内存中时。程序的源代码是存储密钥的最佳位置,但是,它们本身需要使用您在每次程序运行时输入的密码(最好)加密存储,该密码是在您编译和发布时输入的,或者是嵌入到您的代码中(最差)。除非您有充分的理由,否则一把钥匙就足够了;不是每个用户一个。您还应该对内存中的数据进行加密,除非您确实需要它,并且您应该立即使用任何内存中的明文数据结构,并在完成后立即销毁它们。密钥必须存储在某个地方,否则数据将无法恢复。但是考虑一下,谁可以访问源代码(包括备份和替代版本)以及如何检查后门或木马?
- 当它在程序的机器和数据存储之间传输时。如果您只在程序和数据存储之间发送加密数据并且不将密钥存储在数据存储中,这应该没问题。
- 当它存储在数据存储中时。同上。
不要忽视物理安全,窃取数据的最简单方法通常是走到服务器并复制硬盘驱动器。许多公司(以及令人遗憾的国防/安全部队)花费数百万用于在线数据安全,然后将他们的数据放在一个没有锁的房间里。他们还有一个 10 岁的孩子可以绕过的访问协议。
您现在拥有了可爱的加密数据——您将如何阻止您的程序将其以明文形式提供给任何需要它的人?
这给我们带来了识别、验证和授权。更多定义:
识别一个人声称他们是某某。这通常由用户名在计算机程序中处理。在物理安全应用程序中,它是由一个人展示自己并说“我是某某”;这可以通过口头声明或出示护照等身份证件明确表示,也可以通过您认识的警卫默示承认您。
验证这是一个人是他们所说的人的证明。在计算机中,这是密码的作用;更准确地说,这证明他们知道他们所说的那个人的密码,这是整个事情中的大问题。在物理安全方面,它是通过将可信文件(如护照)中记录的物理指标(外观、身高等)与声明进行比较;您需要制定协议以确保您可以信任该文档。顺便说一句,这是面部识别技术在识别坏人时出现问题的主要原因——它使用验证技术来尝试识别某人。“这家伙看起来像坏家伙 #1”;你猜怎么着?70亿人口中的很多人也是如此。
授权一旦一个人被识别和验证,他们就会被授权做某些事情并去某些地方。为此,他们可能会获得临时身份证明文件;想想访客 ID 徽章或 cookie。根据他们去哪里,他们可能需要重新识别和重新验证自己;想想银行的网站;您识别并验证自己以查看您的银行帐户,然后再次进行转账或付款。
总的来说,这是任何计算机安全系统中最薄弱的部分。我要窃取你的数据很难,我要窃取你的身份并将数据提供给我要容易得多。
在你的情况下,这可能不是你关心的问题,只要你做了正常的事情,允许用户以正常的商业方式设置、更改和检索他们的密码,你可能已经做了所有你能做的。
请记住,数据安全性是一方面的安全性与另一方面的信任和可用性之间的权衡。把事情弄得太难(比如低价值数据的高复杂性密码),你会危及整个系统(因为人就是人,他们会把它们写下来)。
就像计算机中的一切一样——用户是个问题!
你为什么要保护这些数据,你愿意为此付出什么?
这是一个经典的风险管理问题。实际上,您需要考虑丢失此数据的不利后果、在您当前的保护措施下发生这种情况的风险以及降低额外保护措施所花费的风险是否值得。
丢失数据可能意味着以下任何或全部:
- 公之于众
- 如果落入错误的人之手
- 被恶意或意外破坏。(备份,人们!)
- 让它改变。如果您知道它已更改,则等于丢失它;如果你不这样做,这可能会更糟,因为你可能会根据虚假数据采取行动。
这种思维导致国防和政府中的数据分为绝密、机密、受限和非受限(澳大利亚分类)。人的因素在这里再次介入;由于官僚主义的性质,没有动机对文件进行低分类和大量抑制;所以文件经常被过度分类。这意味着,由于许多具有受限分类的文档需要分发给没有适当许可的人,只是为了使该死的东西工作,这就是发生的事情。
您也可以将其视为层次结构;我个人的想法是:
- 无论你在想什么级别,保卫领域妥协都会对我的国家/公司/家庭的战略生存产生严重的不利影响。
- 生死妥协会使某人的生命或健康处于危险之中。
- 财务妥协将使某人的钱/汽车/船/航天飞机被盗。
- 商业妥协将导致未来财务收益的损失。
- 羞辱性妥协会造成尴尬。当然,如果你是一名政治家,这可能是第一名。
- 个人这些是您宁愿不发布但不会特别惊天动地的细节。我会把我的个人病史放在这里,但是,违反隐私法的影响可能会将其推向羞辱(如果人们发现)或财务(如果你被起诉或起诉)。
- 私人这不是别人的事,但如果他们发现了,实际上并不会伤害你。
- 公开将其打印在纸上,以供任何人关心。
无论级别如何,您都不希望任何此类数据丢失或更改,但如果是,您需要知道这已经发生。对于纳粹来说,破解他们的 Enigma 密码是很糟糕的。不知道它已经发生是灾难性的。
在下面的评论中,我被要求描述最佳实践。如果不知道数据的风险(以及组织的风险承受能力),这是不可能的。在数据安全上花费过多与花费过少一样糟糕。