标签 加密 下的文章

记录笔记是我们每个人必备的重要技能,它可以帮助我们把自己听到、读到、学到的内容长期地保留下来,也有很多的应用和工具都能让我们更好地记录笔记。下面我要介绍一个叫做 ProtectedText 的应用,这是一个可以将你的笔记在线上保存起来的免费的加密笔记。它是一个免费的 web 服务,在上面记录文本以后,它将会对文本进行加密,只需要一台支持连接到互联网并且拥有 web 浏览器的设备,就可以访问到记录的内容。

ProtectedText 不会向你询问任何个人信息,也不会保存任何密码,没有广告,没有 Cookies,更没有用户跟踪和注册流程。除了拥有密码能够解密文本的人,任何人都无法查看到笔记的内容。而且,使用前不需要在网站上注册账号,写完笔记之后,直接关闭浏览器,你的笔记也就保存好了。

在加密笔记本上记录笔记

访问 https://www.protectedtext.com/这个链接,就可以打开ProtectedText页面了(LCTT译注:如果访问不了,你知道的)。这个时候你将进入网站主页,接下来需要在页面上的输入框输入一个你想用的名称,或者在地址栏后面直接加上想用的名称。这个名称是一个自定义的名称(例如https://www.protectedtext.com/mysite),是你查看自己保存的笔记的专有入口。

如果你选用的名称还没有被占用,你就会看到下图中的提示信息。点击 “Create” 键就可以创建你的个人笔记页了。

至此你已经创建好了你自己的笔记页面,可以开始记录笔记了。目前每个笔记页的最大容量是每页 750000+ 个字符。

ProtectedText 使用 AES 算法对你的笔记内容进行加密和解密,而计算散列则使用了 SHA512 算法。

笔记记录完毕以后,点击顶部的 “Save” 键保存。

按下保存键之后,ProtectedText 会提示你输入密码以加密你的笔记内容。按照它的要求输入两次密码,然后点击 “Save” 键。

尽管 ProtectedText 对你使用的密码没有太多要求,但毕竟密码总是一寸长一寸强,所以还是最好使用长且复杂的密码(用到数字和特殊字符)以避免暴力破解。由于 ProtectedText 不会保存你的密码,一旦密码丢失,密码和笔记内容就都找不回来了。因此,请牢记你的密码,或者使用诸如 ButtercupKeeWeb 这样的密码管理器来存储你的密码。

在使用其它设备时,可以通过访问之前创建的 URL 就可以访问你的笔记了。届时会出现如下的提示信息,只需要输入正确的密码,就可以查看和编辑你的笔记。

一般情况下,只有知道密码的人才能正常访问笔记的内容。如果你希望将自己的笔记公开,只需要以 https://www.protectedtext.com/yourSite?yourPassword 的形式访问就可以了,ProtectedText 将会自动使用 yourPassword 字符串解密你的笔记。

ProtectedText 还有配套的 Android 应用 可以让你在移动设备上进行同步笔记、离线工作、备份笔记、锁定/解锁笔记等等操作。

优点

  • 简单、易用、快速、免费
  • ProtectedText.com 的客户端代码可以在这里免费获取,如果你想了解它的底层实现,可以自行学习它的源代码
  • 存储的内容没有到期时间,只要你愿意,笔记内容可以一直保存在服务器上
  • 可以让你的数据限制为私有或公开开放

缺点

  • 尽管客户端代码是公开的,但服务端代码并没有公开,因此你无法自行搭建一个类似的服务。如果你不信任这个网站,请不要使用。
  • 由于网站不存储你的任何个人信息,包括你的密码,因此如果你丢失了密码,数据将永远无法恢复。网站方还声称他们并不清楚谁拥有了哪些数据,所以一定要牢记密码。

如果你想通过一种简单的方式将笔记保存到线上,并且需要在不需要安装任何工具的情况下访问,那么 ProtectedText 会是一个好的选择。如果你还知道其它类似的应用程序,欢迎在评论区留言!


via: https://www.ostechnix.com/protectedtext-a-free-encrypted-notepad-to-save-your-notes-online/

作者:SK 选题:lujun9972 译者:HankChow 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Joplin 是一个自由开源的笔记和待办事项应用,可用于 Linux、Windows、macOS、Android 和 iOS。它的主要功能包括端到端加密,Markdown 支持以及通过 NextCloud、Dropbox、OneDrive 或 WebDAV 等第三方服务进行同步。

在 Joplin 中你可以用 Markdown 格式(支持数学符号和复选框)记笔记,桌面程序有 3 种视图:Markdown 代码、Markdown 预览或两者并排。你可以在笔记中添加附件(使用图像预览)或在外部 Markdown 编辑器中编辑它们并在每次保存文件时自动在 Joplin 中更新它们。

这个应用应该可以很好地处理大量笔记,它允许你将笔记组织到笔记本中、添加标签和搜索。你还可以按更新日期、创建日期或标题对笔记进行排序。每个笔记本可以包含笔记、待办事项或两者,你可以轻松添加其他笔记的链接(在桌面应用中右键单击笔记并选择 “Copy Markdown link”,然后在笔记中添加链接)。

Joplin 中的待办事项支持警报,但在 Ubuntu 18.04 上,此功能我无法使用。

其他 Joplin 功能包括:

  • Firefox 和 Chrome 中可选的 Web Clipper 扩展(在 Joplin 桌面应用中进入 “Tools > Web clipper options” 以启用剪切服务并找到 Chrome/Firefox 扩展程序的下载链接),它可以剪切简单或完整的页面、剪切选中的区域或者截图。
  • 可选命令行客户端。
  • 导入 Enex 文件(Evernote 导出格式)和 Markdown 文件。
  • 导出 JEX 文件(Joplin 导出格式)、PDF 和原始文件。
  • 离线优先,因此即使没有互联网连接,所有数据也始终可在设备上查看。
  • 地理位置支持。

Joplin 带有显示复选框和指向另一个笔记链接的隐藏侧边栏

虽然它没有提供与 Evernote 一样多的功能,但 Joplin 是一个强大的开源 Evernote 替代品。Joplin 包含所有基本功能,除了它是开源软件之外,它还包括加密支持,你还可以选择用于同步的服务。

该应用实际上被设计为 Evernote 替代品,因此它可以导入完整的 Evernote 笔记本、笔记、标签、附件和笔记元数据,如作者、创建和更新时间或地理位置。

Joplin 开发重点关注的另一个方面是避免与特定公司或服务挂钩。这就是为什么该应用提供多种同步方案,如 NextCloud、Dropbox、oneDrive 和 WebDav,同时也容易支持新的服务。如果你改变主意,也很容易从一种服务切换到另一种服务。

我注意到 Joplin 默认情况下不使用加密,你必须在设置中启用此功能。进入 “Tools> Encryption options” 并在这里启用 Joplin 端到端加密。

下载 Joplin

Joplin 适用于 Linux、Windows、macOS、Android 和 iOS。在 Linux 上,还有 AppImage 和 Aur 包。

要在 Linux 上运行 Joplin AppImage,请双击它并选择 “Make executable and run”(如果文件管理器支持这个)。如果不支持,你需要使用你的文件管理器使它可执行(应该类似这样:“右键单击>属性>权限>允许作为程序执行”,但这可能会因你使用的文件管理器而有所不同),或者从命令行:

chmod +x /path/to/Joplin-*-x86_64.AppImage

用你下载 Joplin 的路径替换 /path/to/。现在,你可以双击 Joplin Appimage 文件来启动它。

提示:如果你将 Joplin 集成到你的菜单中,而它的图标没有显示在你 dock 或应用切换器中,你可以打开 Joplin 的桌面文件(如果你使用 appimagekit 集成,它应该在 ~/.local/share/applications/appimagekit-joplin.desktop)并在文件末尾添加 StartupWMClass=Joplin 其他不变来修复。

Joplin 有一个命令行客户端,它可以使用 npm 安装(对于 Debian、Ubuntu 或 Linux Mint,请参阅如何安装和配置 Node.js 和 npm)。


via: https://www.linuxuprising.com/2018/08/joplin-encrypted-open-source-note.html

作者:Logix 选题:lujun9972 译者:geekpi 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

Linux 桌面版和服务器版具有卓越的安全性。然而这并不意味着你可以放松警惕。你应该一直认为你的数据总是很快就会被破坏。也就是说,你可能需要使用各种加密工具。比如 GnuPG,它可以让你加密和解密文件等更多功能。GnuPG 的一个问题是一些用户不想在命令行输入那么复杂的命令。如果是这样的话,你可以转向桌面文件管理器。许多 Linux 桌面版包含了简易的加密和解密文件的功能,如果这种功能没有内置,那么也是很容易添加的。

我将引导你完成从三个流行的 Linux 文件管理器中对文件进行加密和解密过程:

  • Nautilus (即 GNOME Files)
  • Dolphin
  • Thunar

安装 GnuPG

在我们讨论如何处理这个问题之前,我们必须确保你的系统包含了必要的基本组件 —— GnuPG。大多数发行版本都包含 GnuPG。 在某些偶然情况下,你使用的是没有自带 GnuPG 的发行版,以下是安装方法:

  • 基于 Ubuntu 的发行版: sudo apt install gnupg
  • 基于 Fedora 的发行版: sudo yum install gnupg
  • openSUSE: sudo zypper in gnupg
  • 基于 Arch 的发行版:sudo pacman -S gnupg

无论你是刚刚安装了 GnuPG,还是默认安装的,你都必须创建一个 GPG 密钥才能使用。每个桌面版都使用不同的 GUI 工具完成这个工作(或者甚至根本没有包含一个完成这个任务的 GUI 工具),所以让我们从命令行中创建这个密钥。打开终端窗口并输入以下指令:

gpg --gen-key

然后,你将被要求回答以下问题。除非你有充分的理由,否则你可以接受默认值:

  • 你想要哪种密钥?
  • 你想要多长的密钥?
  • 密钥有效期?

一旦你回答了这些问题,输入 y 来表示答案是正确的。接下来你需要提供以下信息:

  • 真实姓名。
  • Email 地址。
  • 备注。

完成上述操作后,然后在提示的时候输入 O (即 ok)。然后,你将被要求为新密钥输入一个密码。一旦系统收集到了足够的熵(你需要在桌面上做一些工作才能做到这一点,LCTT 译注:比如随便敲击键盘),你的密钥就会被创建,然后你就可以开始工作了。

让我们看看如何从文件管理器中加密/解密文件:

Nautilus

让我们从默认的 GNOME 文件管理器开始,因为它是最简单的。Nautilus 不需要额外安装什么或额外的工作就可以从精心设计的界面内加密/解密文件。一旦你创建完 gpg 密钥后,就可以打开文件管理器,导航到包含要加密的文件的目录,右键单击要加密的文件,然后从菜单中选择 “Encrypt” (图1)。

 title=

图1:从 Nautilus 中加密文件。

你将被要求选择一个收件人(或者收件人列表 —— 图2)。注意:收件人将是那些你已经导入了公钥的用户。选择所需的密钥,然后从签名信息下拉列表中选择你的密钥(电子邮件地址)。

 title=

图2:选择收件人和签名者。

注意:你还可以选择仅使用密码来加密文件。如果文件将保留在你的本地机器上,这一点非常重要(稍后将详细介绍)。一旦你设置好加密后,单击 “OK” 并(在提示时)输入 gpg 密钥的密码。文件将被加密(现在文件名以 .gpg 结尾)并保存在工作目录中。现在你可以将加密后的文件发送给在加密过程中已选择的收件人。

比如说(有你的公钥的)某人已经给你发送了一个加密文件。保存该文件,打开文件管理器,导航到该文件所在的目录,右击这个加密文件,选择 “Open With Decrypt File”,给文件一个新名称(不带 .gpg 的扩展名),然后单击“Save”。当提示时,输入你的 gpg 密钥的密码,该文件就会被解密并准备使用。

Dolphin

在 KDE 前端,必须安装一个软件包才能使用 Dolphin 文件管理器进行加密/解密。 登录到你的 KDE 桌面,打开终端窗口,然后输入以下命令(我正在使用 Neon 进行演示。如果你的发行版不是基于 Ubuntu 的,则必须相应地更改命令):

sudo apt install kgpg

安装完毕后,注销并重新登录 KDE 桌面。 你可以打开 Dolphin 并右键单击要加密的文件。 由于这是你第一次使用 kgpg,因此你必须完成快速设置向导(不言自明)。当完成该向导后,你可以返回该文件,右键单击它(图3),然后选择 Encrypt File。

 title=

图3:在 Dolphin 中加密文件。

系统将提示你选择用于加密的密钥(图4)。 进行选择并单击 “OK”。 该文件将被加密,而且你已准备好将其发送给收件人。

注意:使用 KDE 的 Dolphin 文件管理器市,你无法仅使用密码加密。

 title=

图4:选择要加密的收件人。

如果你收到来自有你的公钥的用户的加密文件(或者你有一个自己加密的文件),请打开 Dolphin,导航到相关文件,双击该文件,为该文件指定一个新名称 ,键入加密密码并单击 “OK”。 你现在可以读取到新解密的文件。 如果你使用自己的密钥加密了该文件,则不会提示你键入密码(因为它已经被存储了)。

Thunar

Thunar 文件管理器有点棘手。 没有任何额外的软件包可供安装;相反,你需要为了加密创建新的自定义操作。完成此操作后,你将能够在文件管理器中执行此操作。

要创建自定义操作,请打开 Thunar 文件管理器,然后单击 “Edit > Configure Custom Actions”。 在所得到的窗口中,单击 “+” 按钮(图5)并为加密操作输入以下内容:

  • 名称:加密
  • 描述:文件加密
  • 命令:gnome-terminal -x gpg --encrypt --recipient %f

单击 “OK” 以保存此操作。

 title=

图5:在Thunar中创建自定义操作。

注意:如果 gnome-terminal 不是你的默认终端,请替换该命令以打开你的默认终端。

你还可以创建仅使用密码(而非密钥)加密的操作。 为此,该操作的详细动作将会是以下内容:

  • 名称:加密密码
  • 说明:仅使用密码加密
  • 命令:gnome-terminal -x gpg -c %f

你不需要为解密过程创建一个自定义操作,因为 Thunar 已经知道如何处理一个加密文件。 要解密文件,只需(在 Thunar 中)右键单击它,选择 “Open With Decrypt File”,为解密文件命名,然后(在提示时)键入加密密码。 Viola,你的加密文件已被解密并可以使用。

一个警告

请注意:如果你使用自己的密钥加密自己的文件,则无需输入加密密码来解密它们(因为你的公钥已存储)。 但是,如果你收到(拥有你的公钥的)其他人的文件,则需要输入你的密码。 如果你想要存储自己的加密文件,而不是使用密钥来加密它们,请使用仅使用密码加密。 Nautilus 和Thunar(但不是 KDE)可以做到这一点。 通过选择密码加密(通过密钥加密),当你解密文件时,它将始终提示你输入密码。

其他文件管理器

还有很多其它的文件管理器,它们中的一些可以使用加密,有些则不能。 你很有可能正在使用这三种工具中的一种,因此不仅可以将加密 / 解密添加到上下文菜单,而且是非常容易。 尝试一下,看看它是否会使加密和解密的过程变得更容易。

从 Linux 基金会和 edX 免费提供的“Linux 介绍”课程了解更多关于 Linux 的信息。


via: https://www.linux.com/learn/intro-to-linux/2018/3/how-encrypt-files-within-file-manager

作者:JACK WALLEN 译者:Auk7f7 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

学习密码学背后的基本概念,主要是保密性、完整性和身份认证。

安全通信正快速成为当今互联网的规范。从 2018 年 7 月起,Google Chrome 将对全部使用 HTTP 传输(而不是 HTTPS 传输)的站点开始显示“不安全”警告。虽然密码学已经逐渐变广为人知,但其本身并没有变得更容易理解。Let's Encrypt 设计并实现了一套令人惊叹的解决方案,可以提供免费安全证书和周期性续签;但如果不了解底层概念和缺陷,你也不过是加入了类似“ 货物崇拜 cargo cult ”的技术崇拜的程序员大军。

安全通信的特性

密码学最直观明显的目标是 保密性 confidentiality 消息 message 传输过程中不会被窥探内容。为了保密性,我们对消息进行加密:对于给定消息,我们结合一个 密钥 key 生成一个无意义的乱码,只有通过相同的密钥逆转加密过程(即解密过程)才能将其转换为可读的消息。假设我们有两个朋友 Alice 和 Bob,以及他们的 八卦 nosy 邻居 Eve。Alice 加密类似 "Eve 很讨厌" 的消息,将其发送给 Bob,期间不用担心 Eve 会窥探到这条消息的内容。

对于真正的安全通信,保密性是不够的。假如 Eve 收集了足够多 Alice 和 Bob 之间的消息,发现单词 “Eve” 被加密为 "Xyzzy"。除此之外,Eve 还知道 Alice 和 Bob 正在准备一个派对,Alice 会将访客名单发送给 Bob。如果 Eve 拦截了消息并将 “Xyzzy” 加到访客列表的末尾,那么她已经成功的破坏了这个派对。因此,Alice 和 Bob 需要他们之间的通信可以提供 完整性 integrity :消息应该不会被篡改。

而且我们还有一个问题有待解决。假如 Eve 观察到 Bob 打开了标记为“来自 Alice”的信封,信封中包含一条来自 Alice 的消息“再买一加仑冰淇淋”。Eve 看到 Bob 外出,回家时带着冰淇淋,这样虽然 Eve 并不知道消息的完整内容,但她对消息有了大致的了解。Bob 将上述消息丢弃,但 Eve 找出了它并在下一周中的每一天都向 Bob 的邮箱中投递一封标记为“来自 Alice”的信封,内容拷贝自之前 Bob 丢弃的那封信。这样到了派对的时候,冰淇淋严重超量;派对当晚结束后,Bob 分发剩余的冰淇淋,Eve 带着免费的冰淇淋回到家。消息是加密的,完整性也没问题,但 Bob 被误导了,没有认出发信人的真实身份。 身份认证 Authentication 这个特性用于保证你正在通信的人的确是其声称的那样。

信息安全还有其它特性,但保密性、完整性和身份验证是你必须了解的三大特性。

加密和加密算法

加密都包含哪些部分呢?首先,需要一条消息,我们称之为 明文 plaintext 。接着,需要对明文做一些格式上的初始化,以便用于后续的加密过程(例如,假如我们使用 分组加密算法 block cipher ,需要在明文尾部填充使其达到特定长度)。下一步,需要一个保密的比特序列,我们称之为 密钥 key 。然后,基于私钥,使用一种加密算法将明文转换为 密文 ciphertext 。密文看上去像是随机噪声,只有通过相同的加密算法和相同的密钥(在后面提到的非对称加密算法情况下,是另一个数学上相关的密钥)才能恢复为明文。

(LCTT 译注:cipher 一般被翻译为密码,但其具体表达的意思是加密算法,这里采用加密算法的翻译)

加密算法使用密钥加密明文。考虑到希望能够解密密文,我们用到的加密算法也必须是 可逆的 reversible 。作为简单示例,我们可以使用 XOR。该算子可逆,而且逆算子就是本身(P ^ K = C; C ^ K = P),故可同时用于加密和解密。该算子的平凡应用可以是 一次性密码本 one-time pad ,不过一般而言并不可行。但可以将 XOR 与一个基于单个密钥生成 任意随机数据流 arbitrary stream of random data 的函数结合起来。现代加密算法 AES 和 Chacha20 就是这么设计的。

我们把加密和解密使用同一个密钥的加密算法称为 对称加密算法 symmetric cipher 。对称加密算法分为 流加密算法 stream ciphers 和分组加密算法两类。流加密算法依次对明文中的每个比特或字节进行加密。例如,我们上面提到的 XOR 加密算法就是一个流加密算法。流加密算法适用于明文长度未知的情形,例如数据从管道或 socket 传入。RC4 是最为人知的流加密算法,但在多种不同的攻击面前比较脆弱,以至于最新版本 (1.3)的 TLS (“HTTPS” 中的 “S”)已经不再支持该加密算法。Efforts 正着手创建新的加密算法,候选算法 ChaCha20 已经被 TLS 支持。

分组加密算法对固定长度的分组,使用固定长度的密钥加密。在分组加密算法领域,排行第一的是 先进加密标准 Advanced Encryption Standard (AES),使用的分组长度为 128 比特。分组包含的数据并不多,因而分组加密算法包含一个工作模式,用于描述如何对任意长度的明文执行分组加密。最简单的工作模式是 电子密码本 Electronic Code Book (ECB),将明文按分组大小划分成多个分组(在必要情况下,填充最后一个分组),使用密钥独立的加密各个分组。

这里我们留意到一个问题:如果相同的分组在明文中出现多次(例如互联网流量中的 GET / HTTP/1.1 词组),由于我们使用相同的密钥加密分组,我们会得到相同的加密结果。我们的安全通信中会出现一种 模式规律 pattern ,容易受到攻击。

因此还有很多高级的工作模式,例如 密码分组链接 Cipher Block Chaining (CBC),其中每个分组的明文在加密前会与前一个分组的密文进行 XOR 操作,而第一个分组的明文与一个随机数构成的初始化向量进行 XOR 操作。还有其它一些工作模式,在安全性和执行速度方面各有优缺点。甚至还有 Counter (CTR) 这种工作模式,可以将分组加密算法转换为流加密算法。

除了对称加密算法,还有 非对称加密算法 asymmetric ciphers ,也被称为 公钥密码学 public-key cryptography 。这类加密算法使用两个密钥:一个 公钥 public key ,一个 私钥 private key 。公钥和私钥在数学上有一定关联,但可以区分二者。经过公钥加密的密文只能通过私钥解密,经过私钥加密的密文可以通过公钥解密。公钥可以大范围分发出去,但私钥必须对外不可见。如果你希望和一个给定的人通信,你可以使用对方的公钥加密消息,这样只有他们的私钥可以解密出消息。在非对称加密算法领域,目前 RSA) 最具有影响力。

非对称加密算法最主要的缺陷是,它们是 计算密集型 computationally expensive 的。那么使用对称加密算法可以让身份验证更快吗?如果你只与一个人共享密钥,答案是肯定的。但这种方式很快就会失效。假如一群人希望使用对称加密算法进行两两通信,如果对每对成员通信都采用单独的密钥,一个 20 人的群体将有 190 对成员通信,即每个成员要维护 19 个密钥并确认其安全性。如果使用非对称加密算法,每个成员仅需确保自己的私钥安全并维护一个公钥列表即可。

非对称加密算法也有加密数据长度限制。类似于分组加密算法,你需要将长消息进行划分。但实际应用中,非对称加密算法通常用于建立 机密 confidential 已认证 authenticated 通道 channel ,利用该通道交换对称加密算法的共享密钥。考虑到速度优势,对称加密算法用于后续的通信。TLS 就是严格按照这种方式运行的。

基础

安全通信的核心在于随机数。随机数用于生成密钥并为 确定性过程 deterministic processes 提供不可预测性。如果我们使用的密钥是可预测的,那我们从一开始就可能受到攻击。计算机被设计成按固定规则操作,因此生成随机数是比较困难的。计算机可以收集鼠标移动或 键盘计时 keyboard timings 这类随机数据。但收集随机性(也叫 信息熵 entropy )需要花费不少时间,而且涉及额外处理以确保 均匀分布 uniform distribution 。甚至可以使用专用硬件,例如 熔岩灯 lava lamps 等。一般而言,一旦有了一个真正的随机数值,我们可以将其用作 种子 seed ,使用 密码安全的伪随机数生成器 cryptographically secure pseudorandom number generator 生成随机数。使用相同的种子,同一个随机数生成器生成的随机数序列保持不变,但重要的是随机数序列是无规律的。在 Linux 内核中,/dev/random 和 /dev/urandom 工作方式如下:从多个来源收集信息熵,进行 无偏处理 remove biases ,生成种子,然后生成随机数,该随机数可用于 RSA 密钥生成等。

其它密码学组件

我们已经实现了保密性,但还没有考虑完整性和身份验证。对于后两者,我们需要使用一些额外的技术。

首先是 密码散列函数 crytographic hash function ,该函数接受任意长度的输入并给出固定长度的输出(一般称为 摘要 digest )。如果我们找到两条消息,其摘要相同,我们称之为 碰撞 collision ,对应的散列函数就不适合用于密码学。这里需要强调一下“找到”:考虑到消息的条数是无限的而摘要的长度是固定的,那么总是会存在碰撞;但如果无需海量的计算资源,我们总是能找到发生碰撞的消息对,那就令人比较担心了。更严重的情况是,对于每一个给定的消息,都能找到与之碰撞的另一条消息。

另外,哈希函数必须是 单向的 one-way :给定一个摘要,反向计算对应的消息在计算上不可行。相应的,这类条件被称为 碰撞阻力 collision resistance 第二原象抗性 second preimage resistance 原象抗性 preimage resistance 。如果满足这些条件,摘要可以用作消息的指纹。理论上不存在具有相同指纹的两个人,而且你无法使用指纹反向找到其对应的人。

如果我们同时发送消息及其摘要,接收者可以使用相同的哈希函数独立计算摘要。如果两个摘要相同,可以认为消息没有被篡改。考虑到 SHA-1 已经变得有些过时,目前最流行的密码散列函数是 SHA-256

散列函数看起来不错,但如果有人可以同时篡改消息及其摘要,那么消息发送仍然是不安全的。我们需要将哈希与加密算法结合起来。在对称加密算法领域,我们有 消息认证码 message authentication codes (MAC)技术。MAC 有多种形式,但 哈希消息认证码 hash message authentication codes (HMAC) 这类是基于哈希的。HMAC 使用哈希函数 H 处理密钥 K、消息 M,公式为 H(K + H(K + M)),其中 + 代表 连接 concatenation 。公式的独特之处并不在本文讨论范围内,大致来说与保护 HMAC 自身的完整性有关。发送加密消息的同时也发送 MAC。Eve 可以任意篡改消息,但一旦 Bob 独立计算 MAC 并与接收到的 MAC 做比较,就会发现消息已经被篡改。

在非对称加密算法领域,我们有 数字签名 digital signatures 技术。如果使用 RSA,使用公钥加密的内容只能通过私钥解密,反过来也是如此;这种机制可用于创建一种签名。如果只有我持有私钥并用其加密文档,那么只有我的公钥可以用于解密,那么大家潜在的承认文档是我写的:这是一种身份验证。事实上,我们无需加密整个文档。如果生成文档的摘要,只要对这个指纹加密即可。对摘要签名比对整个文档签名要快得多,而且可以解决非对称加密存在的消息长度限制问题。接收者解密出摘要信息,独立计算消息的摘要并进行比对,可以确保消息的完整性。对于不同的非对称加密算法,数字签名的方法也各不相同;但核心都是使用公钥来检验已有签名。

汇总

现在,我们已经有了全部的主体组件,可以用其实现一个我们期待的、具有全部三个特性的 体系 system 。Alice 选取一个保密的对称加密密钥并使用 Bob 的公钥进行加密。接着,她对得到的密文进行哈希并使用其私钥对摘要进行签名。Bob 接收到密文和签名,一方面独立计算密文的摘要,另一方面使用 Alice 的公钥解密签名中的摘要;如果两个摘要相同,他可以确信对称加密密钥没有被篡改且通过了身份验证。Bob 使用私钥解密密文得到对称加密密钥,接着使用该密钥及 HMAC 与 Alice 进行保密通信,这样每一条消息的完整性都得到保障。但该体系没有办法抵御消息重放攻击(我们在 Eve 造成的冰淇淋灾难中见过这种攻击)。要解决重放攻击,我们需要使用某种类型的“ 握手 handshake ”建立随机、短期的 会话标识符 session identifier

密码学的世界博大精深,我希望这篇文章能让你对密码学的核心目标及其组件有一个大致的了解。这些概念为你打下坚实的基础,让你可以继续深入学习。

感谢 Hubert Kario、Florian Weimer 和 Mike Bursell 在本文写作过程中提供的帮助。


via: https://opensource.com/article/18/5/cryptography-pki

作者:Alex Wood 选题:lujun9972 译者:pinewall 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

使用 urandom

使用 urandom!使用 urandom!使用 urandom

使用 urandom!使用 urandom!使用 urandom

但对于密码学密钥呢?

仍然使用 urandom

为什么不是 SecureRandom、OpenSSL、havaged 或者 c 语言实现呢?

这些是用户空间的 CSPRNG(伪随机数生成器)。你应该用内核的 CSPRNG,因为:

  • 内核可以访问原始设备熵。
  • 它可以确保不在应用程序之间共享相同的状态。
  • 一个好的内核 CSPRNG,像 FreeBSD 中的,也可以保证它播种之前不给你随机数据。

研究过去十年中的随机失败案例,你会看到一连串的用户空间的随机失败案例。Debian 的 OpenSSH 崩溃?用户空间随机!安卓的比特币钱包重复 ECDSA 随机 k 值?用户空间随机!可预测洗牌的赌博网站?用户空间随机!

用户空间的生成器几乎总是依赖于内核的生成器。即使它们不这样做,整个系统的安全性也会确保如此。但用户空间的 CSPRNG 不会增加防御深度;相反,它会产生两个单点故障。

手册页不是说使用 /dev/random 嘛?

这个稍后详述,保留你的意见。你应该忽略掉手册页。不要使用 /dev/random/dev/random/dev/urandom 之间的区别是 Unix 设计缺陷。手册页不想承认这一点,因此它产生了一个并不存在的安全顾虑。把 random(4) 中的密码学上的建议当作传说,继续你的生活吧。

但是如果我需要的是真随机值,而非伪随机值呢?

urandom 和 /dev/random 提供的是同一类型的随机。与流行的观念相反,/dev/random 不提供“真正的随机”。从密码学上来说,你通常不需要“真正的随机”。

urandom 和 /dev/random 都基于一个简单的想法。它们的设计与流密码的设计密切相关:一个小秘密被延伸到不可预测值的不确定流中。 这里的秘密是“熵”,而流是“输出”。

只在 Linux 上 /dev/random 和 urandom 仍然有意义上的不同。Linux 内核的 CSPRNG 定期进行密钥更新(通过收集更多的熵)。但是 /dev/random 也试图跟踪内核池中剩余的熵,并且如果它没有足够的剩余熵时,偶尔也会罢工。这种设计和我所说的一样蠢;这与基于“密钥流”中剩下多少“密钥”的 AES-CTR 设计类似。

如果你使用 /dev/random 而非 urandom,那么当 Linux 对自己的 RNG(随机数生成器)如何工作感到困惑时,你的程序将不可预测地(或者如果你是攻击者,非常可预测地)挂起。使用 /dev/random 会使你的程序不太稳定,但这不会让你在密码学上更安全。

这是个缺陷,对吗?

不是,但存在一个你可能想要了解的 Linux 内核 bug,即使这并不能改变你应该使用哪一个 RNG。

在 Linux 上,如果你的软件在引导时立即运行,或者这个操作系统你刚刚安装好,那么你的代码可能会与 RNG 发生竞争。这很糟糕,因为如果你赢了竞争,那么你可能会在一段时间内从 urandom 获得可预测的输出。这是 Linux 中的一个 bug,如果你正在为 Linux 嵌入式设备构建平台级代码,那你需要了解它。

在 Linux 上,这确实是 urandom(而不是 /dev/random)的问题。这也是 Linux 内核中的错误。 但它也容易在用户空间中修复:在引导时,明确地为 urandom 提供种子。长期以来,大多数 Linux 发行版都是这么做的。但不要切换到不同的 CSPRNG。

在其它操作系统上呢?

FreeBSD 和 OS X 消除了 urandom 和 /dev/random 之间的区别;这两个设备的行为是相同的。不幸的是,手册页在解释为什么这样做上干的很糟糕,并延续了 Linux 上 urandom 可怕的神话。

无论你使用 /dev/random 还是 urandom,FreeBSD 的内核加密 RNG 都不会停摆。 除非它没有被提供种子,在这种情况下,这两者都会停摆。与 Linux 不同,这种行为是有道理的。Linux 应该采用它。但是,如果你是一名应用程序开发人员,这对你几乎没有什么影响:Linux、FreeBSD、iOS,无论什么:使用 urandom 吧。

太长了,懒得看

直接使用 urandom 吧。

结语

ruby-trunk Feature #9569

现在,在尝试检测 /dev/urandom 之前,SecureRandom.random\_bytes 会尝试检测要使用的 OpenSSL。 我认为这应该反过来。在这两种情况下,你只需要将随机字节进行解压,所以 SecureRandom 可以跳过中间人(和第二个故障点),如果可用的话可以直接与 /dev/urandom 进行交互。

总结:

/dev/urandom 不适合用来直接生成会话密钥和频繁生成其他应用程序级随机数据。

GNU/Linux 上的 random(4) 手册所述......

感谢 Matthew Green、 Nate Lawson、 Sean Devlin、 Coda Hale 和 Alex Balducci 阅读了本文草稿。公正警告:Matthew 只是大多同意我的观点。


via: https://sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers/

作者:Thomas & Erin Ptacek 译者:kimii 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

EncryptPad 是一个自由开源软件,它通过简单方便的图形界面和命令行接口来查看和修改加密的文本,它使用 OpenPGP RFC 4880 文件格式。通过 EncryptPad,你可以很容易的加密或者解密文件。你能够像保存密码、信用卡信息等私人信息,并使用密码或者密钥文件来访问。

特性

  • 支持 windows、Linux 和 Max OS。
  • 可定制的密码生成器,可生成健壮的密码。
  • 随机的密钥文件和密码生成器。
  • 支持 GPG 和 EPD 文件格式。
  • 能够通过 CURL 自动从远程远程仓库下载密钥。
  • 密钥文件的路径能够存储在加密的文件中。如果这样做的话,你不需要每次打开文件都指定密钥文件。
  • 提供只读模式来防止文件被修改。
  • 可加密二进制文件,例如图片、视频、归档等。

在这份教程中,我们将学习如何在 Ubuntu 16.04 中安装和使用 EncryptPad。

环境要求

  • 在系统上安装了 Ubuntu 16.04 桌面版本。
  • 在系统上有 sudo 的权限的普通用户。

安装 EncryptPad

在默认情况下,EncryPad 在 Ubuntu 16.04 的默认仓库是不存在的。你需要安装一个额外的仓库。你能够通过下面的命令来添加它 :

sudo apt-add-repository ppa:nilaimogard/webupd8

下一步,用下面的命令来更新仓库:

sudo apt-get update -y

最后一步,通过下面命令安装 EncryptPad:

sudo apt-get install encryptpad encryptcli -y

当 EncryptPad 安装完成后,你可以在 Ubuntu 的 Dash 上找到它。

使用 EncryptPad 生成密钥和密码

现在,在 Ubunntu Dash 上输入 encryptpad,你能够在你的屏幕上看到下面的图片 :

Ubuntu DeskTop

下一步,点击 EncryptPad 的图标。你能够看到 EncryptPad 的界面,它是一个简单的文本编辑器,带有顶部菜单栏。

EncryptPad screen

首先,你需要生成一个密钥文件和密码用于加密/解密任务。点击顶部菜单栏中的 “Encryption->Generate Key”,你会看见下面的界面:

Generate key

选择文件保存的路径,点击 “OK” 按钮,你将看到下面的界面:

select path

输入密钥文件的密码,点击 “OK” 按钮 ,你将看到下面的界面:

last step

点击 “yes” 按钮来完成该过程。

加密和解密文件

现在,密钥文件和密码都已经生成了。可以执行加密和解密操作了。在这个文件编辑器中打开一个文件文件,点击 “encryption” 图标 ,你会看见下面的界面:

Encry operation

提供需要加密的文件和指定输出的文件,提供密码和前面产生的密钥文件。点击 “Start” 按钮来开始加密的进程。当文件被成功的加密,会出现下面的界面:

Success Encrypt

文件已经被该密码和密钥文件加密了。

如果你想解密被加密后的文件,打开 EncryptPad ,点击 “File Encryption” ,选择 “Decryption” 操作,提供加密文件的位置和你要保存输出的解密文件的位置,然后提供密钥文件地址,点击 “Start” 按钮,它将要求你输入密码,输入你先前加密使用的密码,点击 “OK” 按钮开始解密过程。当该过程成功完成,你会看到 “File has been decrypted successfully” 的消息 。

decrypt []

注意:

如果你遗忘了你的密码或者丢失了密钥文件,就没有其他的方法可以打开你的加密信息了。对于 EncrypePad 所支持的格式是没有后门的。


via: https://www.howtoforge.com/tutorial/how-to-install-and-use-encryptpad-on-ubuntu-1604/

作者:Hitesh Jethva 译者:singledo 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出