标签 加密 下的文章

如今,大多数人都认为文件加密是必要的,甚至在 Linux 系统上也是如此。 如果你和我一样, 最初被 Ubuntu 所吸引是因为 Linux 系统强化的安全性,恐怕我有个坏消息要告诉你:Linux 已经成为它自身“成功”的受害者。 近年来,用户数量的大幅度增加导致了这类系统的攻击和盗窃活动呈指数级增长。

曾经有一个非常简单的解决方案来在像 Ubuntu 这样的 Linux 系统上加密文件:它叫做 Truecrypt。 直到 2015 年,它提供了不同程度的军事级别的加密,并且在大多数 Linux 系统中运行良好。不幸的是, 它已经停止开发了, 因此变得相当不安全。

替代品

幸运的是,除了 Truecrypt,还有一些选择。 Truecrypt 的直接继承者是 Veracrypt ,它由一群开发者从 Truecrypt 获取源代码并保持更新的。

该项目已经发展成为令人印象深刻的独立系统,但现在渐已老迈。旧系统,尤其是那些处理安全问题的系统,只能更新多次而才不会引入漏洞。

出于这个原因,在其他许多方面,应该寻找一个更外围一些的加密软件。我选择的是 Tomb。

为什么是 Tomb

在某些方面,Tomb 与其他加密软件非常相似。它将加密文件存储在专用的“Tomb 文件夹”中,可以让你快速查看您已加密的文件。

它还使用与 Veracrypt 类似的 AES-256 加密标准。这个标准适用于 NSA 、微软和 Apple,并被认为是最安全的加密算法之一。如果你不熟悉加密技术,则应该阅读一点技术背景知识,但如果你只想快速、安全地加密,请不要担心, Tomb 将不负所望。

Tomb 也有一些很大的不同之处。首先,它是专门为 GNU/Linux 系统开发的,可以解决一些更广泛的加密软件的兼容性问题。

第二,尽管 Tomb 是开源的,但它使用的是静态链接库,以至于其源代码难以审计。 这意味着一些操作系统发行版开发者并不认为它是自由的,但是当涉及到安全软件时,这实际上是一件好事:这意味着与完全“自由”软件相比, Tomb 被黑客攻击的可能性更小。

最后,它有几个先进的功能,如 隐写术 steganography ,这使你可以将你的关键文件隐藏在其他文件中。 尽管 Tomb 主要是一个命令行工具,它也带有 GUI 界面—— gtomb,它允许初学者用图形化的方式使用它。

这是推销么? 好吧,在我告诉你如何使用 Tomb 之前,值得注意的是,没有一个加密软件能提供完全的保护。 Tomb 不会让你的计算机隐藏于你 ISP,也不会保护存储在云中的文件。如果你想对云存储进行完全加密,您需要使用 Tor 浏览器和零日志 VPN 登录到你喜欢的存储服务中。 这里有很多选项,但是 Trust Zone 是一个很好的浏览器,而 Tinc 是一个很好的 VPN 工具。

说了这么多,如果你正在寻找 Ubuntu 16.04 上的快速、简单、安全的加密,Tomb 无疑是一条可行的路。让我们开始吧。

在 Ubuntu 16.04 上安装 Tomb

因为 Tomb 是专门为 Linux 设计的, 所以安装非常简单。

几年前,SparkyLinux (它本身就是一个非常好的 Debian 衍生产品)的开发者们将 “Tomb” 添加到他们的官方存储库中。 你可以通过在 Ubuntu 系统上添加这些存储库来安装它。

要做到这一点, 打开一个终端并添加一个存储库文件:

sudo vi /etc/apt/sources.list.d/sparky-repo.list

然后在文件中添加以下行:

deb https://sparkylinux.org/repo stable main
deb-src https://sparkylinux.org/repo stable main
deb https://sparkylinux.org/repo testing main
deb-src https://sparkylinux.org/repo testing main

保存并关闭该文件。

你现在需要安装 Sparky 公钥,使用下列步骤:

sudo apt-get install sparky-keyring

或者:

wget -O - https://sparkylinux.org/repo/sparkylinux.gpg.key | sudo apt-key add -

然后你需要使用标准的命令来更新你的存储库:

sudo apt-get update

然后简单地使用 apt 安装 Tomb:

sudo apt-get install tomb

如果你想要带有 GUI 的 Tomb,安装同样简单。只需使用 apt 来安装 gtomb:

sudo apt-get install gtomb

就是这样,你现在应该安装好了一个可以工作的 Tomb。 让我们看看如何使用它。

使用 Tomb

通过命令行使用 Tomb

Tomb 主要是一个命令行工具,所以我将首先介绍这个用法。 如果你不喜欢使用终端,你可以跳过这节并查看下一部分。

实际上,不用说了。 如果你以前从来没有使用过命令行,那么 Tomb 是一个很好的开始,因为它使用简单的命令,只要你小心,那么你很少有机会把事情搞砸。

Tomb 实际上使用了一组以墓地为主题的非常有趣的命令集。 每个加密文件夹都被称为“tomb”(墓碑) ,而且(我很快就会讲到) ,它们可以使用类似的哥特式命令。

首先,让我们创造(挖)一个新的 tomb。你可以指定你的新 tomb 的名称和大小,所以让我们使用 “Tomb1”这个名称并指定大小为 100 MB。

你需要 root 权限,所以打开终端并键入(或复制) :

sudo tomb dig -s 100 Tomb1.tomb

你应该会得到类似这样的输出:

tomb . Commanded to dig tomb Tomb1.tomb
tomb (*) Creating a new tomb in Tomb1.tomb
tomb . Generating Tomb1.tomb of 100MiB
100 blocks (100Mb) written.
100+0 records in
100+0 records out
-rw------- 1 Tomb1 Tomb1 100M Jul 4 18:53 Tomb1.tomb
tomb (*) Done digging  Tomb1
tomb . Your tomb is not yet ready, you need to forge a key and lock it:
tomb . tomb forge Tomb1.tomb.key
tomb . tomb lock Tomb1.tomb -k Tomb1.tomb.key

正如输出的帮助说明,你现在需要创建(打造)一个密钥文件来锁定你的 tomb:

sudo tomb forge Tomb1.tomb.key

如果在此时出现提及“活动交换分区”的错误,则需要停用所有活动交换分区:

sudo swapoff -a

然后再运行上面的 keyfile 命令。

生成密钥文件可能需要几分钟时间,这具体取决于系统的速度。然而,在完成后系统会要求你输入新密码以确保密钥的安全:

输入两次,然后你的新密钥文件就会被制作出来。

你现在需要用你的新密钥来锁定你的 tomb。你可以这样做:

sudo tomb lock Tomb1.tomb -k Tomb1.tomb.key

你将被要求输入你的密码。 这样做, 你应该会得到如下的输出:

tomb . Commanded to lock tomb Tomb1.tomb

[sudo] Enter password for user Tomb1 to gain superuser privileges

tomb . Checking if the tomb is empty (we never step on somebody else's bones).
tomb . Fine, this tomb seems empty.
tomb . Key is valid.
tomb . Locking using cipher: aes-xts-plain64:sha256
tomb . A password is required to use key Tomb1.tomb.key
tomb . Password OK.
tomb (*) Locking Tomb1.tomb with Tomb1.tomb.key
tomb . Formatting Luks mapped device.
tomb . Formatting your Tomb with Ext3/Ext4 filesystem.
tomb . Done locking Tomb1 using Luks dm-crypt aes-xts-plain64:sha256
tomb (*) Your tomb is ready in Tomb1.tomb and secured with key Tomb1.tomb.key

现在一切都安排好了,你可以开始使用你的新 tomb 了。

这里有一个注意事项:因为我只是在告诉你该怎么做,所以我把我的密钥文件和 tomb 存放在同一个目录中(在这里是 $HOME)。 你不应该这样做——把你的密钥存放在别的地方,最好是在除了你之外没有人能找到的地方。

然而,你需要记住你把它放在哪里,因为你需要用它来打开你的 tomb。 要做到这一点, 请输入:

sudo tomb open Tomb1.tomb -k path/to/your/Tomb1.tomb.key

输入你的密码,然后你就可以进去了。 tomb 会输出一些类似以下的内容:

tomb (*) Success unlocking tomb Tomb1
tomb . Checking filesystem via /dev/loop0
fsck from util-linux 2.27.1
Tomb1: clean, 11/25168 files, 8831/100352 blocks
tomb (*) Success opening Tomb1.tomb on /media/Tomb1

然后你应该看到你的新 tomb 挂载在了 finder 窗口。

你现在可以从 tomb 中保存和打开文件,但是请注意,你需要 root权限才能这样做。

在你使用完之后需要用以下方法卸载你的 tomb:

sudo tomb close

或者,如果你想强制关闭所有的打开的 tomb, 你可以使用:

sudo tomb slam all

使用带 GUI 的 Tomb

如果你不喜欢使用命令行,或者只是想要一个图形界面,你可以使用 gtomb。与许多图形用户界面包装器不同, gtomb 使用起来很容易。

让我们来看看如何使用 gtomb 建立一个新的 tomb。 首先,从菜单中启动 gtomb。 它可能会是这 样的:

所有的事情都是一目了然的,但为了完整起见,我将详细介绍如何建立你的第一个 tomb。

首先,点击第一个选项“dig”。 点击确定,然后选择一个位置。

接下来,输入你的 tomb 的大小:

你现在有了一个新的 tomb,但是你需要在使用它之前做一把钥匙。 要做到这一点, 请在主菜单中 单击“forge”:

Tomb 会要求你输入两次密码,那就这样做。

然后通过点击来使用密钥锁定你的 tomb,你已经猜到了,“lock”。 要打开它, 请单击“open”并再次输入您的密码。

从上面的截图中你可以看到,使用 gtomb 是非常容易的,你不应该遇到任何问题。 大多数常见的任务都可以通过点击来完成,对于任何更复杂的事情,你可以使用命令行。

最后的想法

就是这样!你现在应该准备好你的第一个 tomb 了,并存储任何你想在 tomb 中保密和安全的信息,这些信息会更加安全。

你可以同时使用多个 tomb,并将它们中的文件绑定到你的 $HOME 目录,这样你的程序就不会感到困惑。

我希望这本指南能帮助你开始。 就像使用一个标准的文件夹一样使用你的 Tomb,但是对于更复杂的命令,你总是可以查看 Tomb 官方指南


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

作者: Dan Fries 选题: lujun9972 译者: Auk7F7 校对: wxy

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

目标:使用 GPG 加密文件

发行版:适用于任何发行版

要求:安装了 GPG 的 Linux 或者拥有 root 权限来安装它。

难度:简单

约定:

  • # - 需要使用 root 权限来执行指定命令,可以直接使用 root 用户来执行,也可以使用 sudo 命令
  • $ - 可以使用普通用户来执行指定命令

介绍

加密非常重要。它对于保护敏感信息来说是必不可少的。你的私人文件应该要被加密,而 GPG 提供了很好的解决方案。

安装 GPG

GPG 的使用非常广泛。你在几乎每个发行版的仓库中都能找到它。如果你还没有安装它,那现在就来安装一下吧。

Debian/Ubuntu

$ sudo apt install gnupg

Fedora

# dnf install gnupg2

Arch

# pacman -S gnupg

Gentoo

# emerge --ask app-crypt/gnupg

创建密钥

你需要一个密钥对来加解密文件。如果你为 SSH 已经生成过了密钥对,那么你可以直接使用它。如果没有,GPG 包含工具来生成密钥对。

$ gpg --full-generate-key

GPG 有一个命令行程序可以帮你一步一步的生成密钥。它还有一个简单得多的工具,但是这个工具不能让你设置密钥类型,密钥的长度以及过期时间,因此不推荐使用这个工具。

GPG 首先会询问你密钥的类型。没什么特别的话选择默认值就好。

下一步需要设置密钥长度。4096 是一个不错的选择。

之后,可以设置过期的日期。 如果希望密钥永不过期则设置为 0

然后,输入你的名称。

最后,输入电子邮件地址。

如果你需要的话,还能添加一个注释。

所有这些都完成后,GPG 会让你校验一下这些信息。

GPG 还会问你是否需要为密钥设置密码。这一步是可选的, 但是会增加保护的程度。若需要设置密码,则 GPG 会收集你的操作信息来增加密钥的健壮性。 所有这些都完成后, GPG 会显示密钥相关的信息。

加密的基本方法

现在你拥有了自己的密钥,加密文件非常简单。 使用下面的命令在 /tmp 目录中创建一个空白文本文件。

$ touch /tmp/test.txt

然后用 GPG 来加密它。这里 -e 标志告诉 GPG 你想要加密文件, -r 标志指定接收者。

$ gpg -e -r "Your Name" /tmp/test.txt

GPG 需要知道这个文件的接收者和发送者。由于这个文件给是你的,因此无需指定发送者,而接收者就是你自己。

解密的基本方法

你收到加密文件后,就需要对它进行解密。 你无需指定解密用的密钥。 这个信息被编码在文件中。 GPG 会尝试用其中的密钥进行解密。

$ gpg -d /tmp/test.txt.gpg

发送文件

假设你需要发送文件给别人。你需要有接收者的公钥。 具体怎么获得密钥由你自己决定。 你可以让他们直接把公钥发送给你, 也可以通过密钥服务器来获取。

收到对方公钥后,导入公钥到 GPG 中。

$ gpg --import yourfriends.key

这些公钥与你自己创建的密钥一样,自带了名称和电子邮件地址的信息。 记住,为了让别人能解密你的文件,别人也需要你的公钥。 因此导出公钥并将之发送出去。

gpg --export -a "Your Name" > your.key

现在可以开始加密要发送的文件了。它跟之前的步骤差不多, 只是需要指定你自己为发送人。

$ gpg -e -u "Your Name" -r "Their Name" /tmp/test.txt

结语

就这样了。GPG 还有一些高级选项, 不过你在 99% 的时间内都不会用到这些高级选项。 GPG 就是这么易于使用。你也可以使用创建的密钥对来发送和接受加密邮件,其步骤跟上面演示的差不多, 不过大多数的电子邮件客户端在拥有密钥的情况下会自动帮你做这个动作。


via: https://linuxconfig.org/how-to-encrypt-and-decrypt-individual-files-with-gpg

作者:Nick Congleton 译者:lujun9972 校对:wxy

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

关于应用密码学最令人扼腕也最引人入胜的一件事就是我们在现实中实际使用的密码学是多么的少。这并不是指密码学在业界没有被广泛的应用————事实上它的应用很广泛。我想指出的是,迄今为止密码学研究人员开发了如此多实用的技术,但工业界平常使用的却少之又少。实际上,除了少数个别情况,我们现今使用的绝大部分密码学技术是在 21 世纪初 (注1) 就已经存在的技术。

大多数人并不在意这点,但作为一个工作在研究与应用交汇领域的密码学家,这让我感到不开心。我不能完全解决这个问题,我做的,就是谈论一部分这些新的技术。在这个夏天里,这就是我想要做的:谈论。具体来说,在接下来的几个星期里,我将会写一系列讲述这些没有被看到广泛使用的前沿密码学技术的文章。

今天我要从一个非常简单的问题开始:在公钥加密之外还有什么(可用的加密技术)?具体地说,我将讨论几个过去 20 年里开发出的技术,它们可以让我们走出传统的公钥加密的概念的局限。

这是一篇专业的技术文章,但是不会有太困难的数学内容。对于涉及方案的实际定义,我会提供一些原论文的链接,以及一些背景知识的参考资料。在这里,我们的关注点是解释这些方案在做什么————以及它们在现实中可以怎样被应用。

基于身份的加密

在 20 世纪 80 年代中期,一位名叫 阿迪·萨莫尔 Adi Shamir 的密码学家提出了一个 全新的想法 。这个想法,简单来说,就是摒弃公钥

为了理解 萨莫尔 的想法从何而来,我们最好先了解一些关于公钥加密的东西。在公钥加密的发明之前,所有的加密技术都牵涉到密钥。处理这样的密钥是相当累赘的工作。在你可以安全地通信之前,你需要和你的伙伴交换密钥。这一过程非常的困难,而且当通信规模增大时不能很好地运作。

公钥加密(由 Diffie-Hellman 和萨莫尔的 RSA) 密码系统发展而来的)通过极大地简化密钥分配的过程给密码学带来了革命性的改变。比起分享密钥,用户现在只要将他们的公共密钥发送给其他使用者。有了公钥,公钥的接收者可以加密给你的信息(或者验证你的数字签名),但是又不能用该公钥来进行解密(或者产生数字签名)。这一部分要通过你自己保存的私有密钥来完成。

尽管公钥的使用改进了密码学应用的许多方面,它也带来了一系列新的挑战。从实践中的情况来看,拥有公钥往往只是成功的一半————人们通常还需要安全地分发这些公钥。

举一个例子,想象一下我想要给你发送一封 PGP 加密的电子邮件。在我可以这么做之前,我需要获得一份你的公钥的拷贝。我要怎么获得呢?显然我们可以亲自会面,然后当面交换这个密钥————但(由于面基的麻烦)没有人会愿意这样做。通过电子的方式获得你的公钥会更理想。在现实中,这意味着要么(1)我们必须通过电子邮件交换公钥, 要么(2)我必须通过某个第三方基础设施,比如一个 网站 或者 密钥服务器 ,来获得你的密钥。现在我们面临这样的问题:如果电子邮件或密钥服务器是不值得信赖的(或者简单的来说允许任何人以 你的名义 上传密钥 ),我就可能会意外下载到恶意用户的密钥。当我给“你”发送一条消息的时候,也许我实际上正在将消息加密发送给 Mallory.

Mallory

解决这个问题——关于交换公钥和验证它们的来源的问题——激励了大量的实践密码工程,包括整个 web PKI (网络公钥基础设施)。在大部分情况下,这些系统非常奏效。但是萨莫尔并不满意。如果,他这样问道,我们能做得更好吗?更具体地说,他这样思考:我们是否可以用一些更好的技术去替换那些麻烦的公钥?

萨莫尔的想法非常令人激动。他提出的是一个新的公钥加密形式,在这个方案中用户的“公钥”可以就是他们的身份。这个身份可以是一个名字(比如 “Matt Green”)或者某些诸如电子邮箱地址这样更准确的信息。事实上,“身份”是什么并不重要。重要的是这个公钥可以是一个任意的字符串————而不是一大串诸如“ 7cN5K4pspQy3ExZV43F6pQ6nEKiQVg6sBkYPg1FG56Not ”这样无意义的字符组合。

当然,使用任意字符串作为公钥会造成一个严重的问题。有意义的身份听起来很棒————但我们无法拥有它们。如果我的公钥是 “Matt Green” ,我要怎么得到的对应的私钥?如果能获得那个私钥,又有谁来阻止其他的某些 Matt Green 获得同样的私钥,进而读取我的消息。进而考虑一下这个,谁来阻止任意的某个不是名为 Matt Green 的人来获得它。啊,我们现在陷入了 Zooko 三难困境

萨莫尔的想法因此要求稍微更多一点的手段。相比期望身份可以全世界范围使用,他提出了一个名为“ 密钥生成机构 key generation authority ”的特殊服务器,负责产生私钥。在设立初期,这个机构会产生一个 最高公共密钥 master public key (MPK),这个公钥将会向全世界公布。如果你想要加密一条消息给“Matt Green”(或者验证我的签名),你可以用我的身份和我们达成一致使用的权威机构的唯一 MPK 来加密。要解密这则消息(或者制作签名),我需要访问同一个密钥机构,然后请求一份我的密钥的拷贝。密钥机构将会基于一个秘密保存的 最高私有密钥 master secret key (MSK)来计算我的密钥。

加上上述所有的算法和参与者,整个系统看起来是这样的:

一个 基于身份加密 Identity-Based Encryption (IBE)系统的概览。 密钥生成机构 Key Generation Authority 的 Setup 算法产生最高公共密钥(MPK)和最高私有密钥(MSK)。该机构可以使用 Extract 算法来根据指定的 ID 生成对应的私钥。加密器(左)仅使用身份和 MPK 来加密。消息的接受者请求对应她身份的私钥,然后用这个私钥解密。(图标由 Eugen Belyakoff 制作)

这个设计有一些重要的优点————并且胜过少数明显的缺点。在好的方面,它完全摆脱了任何和你发送消息的对象进行密钥交换的必要。一旦你选择了一个主密钥机构(然后下载了它的 MPK),你就可以加密给整个世界上任何一个人的消息。甚至更酷炫地,在你加密的时候,你的通讯对象甚至还不需要联系密钥机构。她可以在你给她发送消息之后再取得她的私钥。

当然,这个“特性”也同时是一个漏洞。因为密钥机构产生所有的私钥,它拥有相当大权力。一个不诚实的机构可以轻易生成你的私钥然后解密你的消息。用更得体的方式来说就是标准的 IBE 系统有效地“包含” 密钥托管机制 (注2)

基于身份加密(IBE)中的“加密(E)”

所有这些想法和额外的思考都是萨莫尔在他 1984 年的论文中提出来的。其中有一个小问题:萨莫尔只能解决问题的一半。

具体地说,萨莫尔提出了一个 基于身份签名 identity-based signature (IBS)的方案—— 一个公共验证密钥是身份、而签名密钥由密钥机构生成的签名方案。他尽力尝试了,但仍然不能找到一个建立基于身份加密的解决方案。这成为了一个悬而未决的问题。 (注3)

到有人能解决萨莫尔的难题等了 16 年。令人惊讶的是,当解答出现的时候,它出现了不只一次,而是三次

第一个,或许也是最负盛名的 IBE 的实现,是由 丹·博奈 Dan Boneh 马太·富兰克林Matthew Franklin在多年以后开发的。博奈和富兰克林的发现的时机十分有意义。 博奈富兰克林方案 Boneh-Franklin scheme 根本上依赖于能支持有效的 “ 双线性映射 bilinear map ” (或者“ 配对 pairing ”) (注4) 的椭圆曲线。需要计算这些配对的该类 算法 在萨莫尔撰写他的那篇论文是还不被人知晓,因此没有被建设性地使用——即被作为比起 一种攻击 更有用的东西使用——直至 2000年

(关于博奈富兰克林 IBE 方案的简短教学,请查看 这个页面

第二个被称为 Sakai-Kasahara 的方案的情况也大抵类似,这个方案将在与第一个大约同一时间被另外一组学者独立发现。

第三个 IBE 的实现并不如前二者有效,但却更令人吃惊得多。这个方案 克利福德·柯克斯 Clifford Cocks ,一位英国国家通信总局的资深密码学家开发。它因为两个原因而引人注目。第一,柯克斯的 IBE 方案完全不需要用到双线性映射——都是建立在以往的 RSA 的基础上的,这意味着原则上这个算法这么多年来仅仅是没有被人们发现(而非在等待相应的理论基础)而已。第二,柯克斯本人近期因为一些甚至更令人惊奇的东西而闻名:在 RSA 算法被提出之前将近 5 年 发现 RSA 加密系统(LCTT 译注:即公钥加密算法)。用再一个在公钥加密领域的重要成就来结束这一成就,实在堪称令人印象深刻的创举。

自 2001 年起,许多另外的 IBE 构造涌现出来,用到了各种各样的密码学背景知识。尽管如此,博奈和富兰克林早期的实现仍然是这些算法之中最为简单和有效的。

即使你并不因为 IBE 自身而对它感兴趣,事实证明它的基本元素对密码学家来说在许许多多单纯地加密之外的领域都十分有用。事实上,如果我们把 IBE 看作是一种由单一的主公/私钥对来产生数以亿计的相关联的密钥对的方式,它将会显得意义非凡。这让 IBE 对于诸如 选择密文攻击 chosen ciphertext attacks 前向安全的公钥加密 forward-secure public key encryption 短签名方案 short signature schemes 这样各种各样的应用来说非常有用。

基于特征加密

当然,如果你给密码学家以一个类似 IBE 的工具,那么首先他们要做的将是找到一种让事情更复杂改进它的方法。

最大的改进之一要归功于 阿密特·萨海 Amit Sahai 布伦特·沃特世 Brent Waters 。我们称之为 基于特征加密 Attribute-Based Encryption ,或者 ABE。

这个想法最初并不是为了用特征来加密。相反,萨海和沃特世试图开发一种使用生物辨识特征来加密的基于身份的加密方案。为了理解这个问题,想象一下我决定使用某种生物辨识特征,比如你的 虹膜扫描影像,来作为你的“身份”来加密一则给你的密文。然后你将向权威机构请求一个对应你的虹膜的解密密钥————如果一切都匹配得上,你就可以解密信息了。

问题就在于这几乎不能奏效。

告诉我这不会给你带来噩梦

因为生物辨识特征的读取(比如虹膜扫描或者指纹模板)本来就是易出错的。这意味着每一次的读取通常都是十分接近的,但却总是会几个对不上的比特。在标准的 IBE 系统中这是灾难性的:如果加密使用的身份和你的密钥身份有哪怕是一个比特的不同,解密都会失效。你就不走运了。

萨海和沃特世决定通过开发一种包含“阈值门”的 IBE 形式来解决这个问题。在这个背景下,一个身份的每一个字节都被表示为一个不同的“特征”。把每一个这种特征看作是你用于加密的一个元件——譬如“你的虹膜扫描的 5 号字节是 1”和“你的虹膜扫描的 23 号字节是 0”。加密的一方罗列出所有这些字节,然后将它们中的每一个都用于加密中。权威机构生成的解密密钥也嵌入了一连串相似的字节值。根据这个方案的定义,当且仅当(你的身份密钥与密文解密密钥之间)配对的特征数量超过某个预先定义的阈值时,才能顺利解密:比如为了能解密,2048 个字节中的(至少) 2024 个要是对应相同的。

这个想法的优美之处不在于模糊 IBE,而在于一旦你有了一个阈值门和一个“特征”的概念,你就能做更有趣的事情。主要的观察结论 是阈值门可以拥有实现布尔逻辑的 AND 门和 OR 门(LCTT 译注:译者认为此处应为用 AND 门和 OR 门实现, 原文: a threshold gate can be used to implement the boolean AND and OR gates),就像这样:

甚至你还可以将这些逻辑闸门堆叠起来,一些在另一些之上,来表示一些相当复杂的布尔表达式——这些表达式本身就用于判定在什么情况下你的密文可以被解密。举个例子,考虑一组更为现实的特征,你可以这样加密一份医学记录,使医院的儿科医生或者保险理算员都可以阅读它。你所需要做的只不过是保证人们可以得到正确描述他们的特征的密钥(就是一些任意的字符串,如同身份那样)。

一个简单的“密文规定”。在这个规定中当且仅当一个密钥与一组特定的特征匹配时,密文才能被解密。在这个案例中,密钥满足该公式的条件,因此密文将被解密。其余用不到的特征在这里忽略掉。

其他的条件判断也能实现。通过一长串特征,比如文件创建时间、文件名,甚至指示文件创建位置的 GPS 坐标, 来加密密文也是有可能的。于是你可以让权威机构分发一部分对应你的数据集的非常精确的密钥————比如说,“该密钥用于解密所有在 11 月 3 号和 12 月 12 号之间在芝加哥被加密的包含‘小儿科’或者‘肿瘤科’标记的放射科文件”。

函数式加密

一旦拥有一个相关的基础工具,像 IBE 和 ABE,研究人员的本能是去扩充和一般化它。为什么要止步于简单的布尔表达式?我们能不能制作嵌入了任意的计算机程序 密钥 key (或者 密文 ciphertext )?答案被证明是肯定的——尽管不是非常高效。一组 近几年的 研究 显示可以根据各种各样的 基于格 lattice-based 的密码假设,构建在 任意多项式大小线路 arbitrary polynomial-size circuits 运作的 ABE。所以这一方向毫无疑问非常有发展潜力。

这一潜力启发了研究人员将所有以上的想法一般化成为单独一类被称作 “函数式加密” functional encryption 的加密方式。函数式加密更多是一种抽象的概念而没有具体所指——它不过是一种将所有这些系统看作是一个特定的类的实例的方式。它基本的想法是,用一种依赖于(1)明文,和(2)嵌入在密钥中的数据 的任意函数 F 的算法来代表解密过程。

(LCTT 译注:上面函数 F 的 (1) 原文是“the plaintext inside of a ciphertext”,但译者认为应该是密文,其下的公式同。)

这个函数大概是这样的:

输出 = F(密钥数据,密文数据)

在这一模型中,IBE 可以表达为有一个加密算法 加密(身份,明文)并定义了一个这样的函数 F:如果“密钥输入 == 身份”,则输出对应明文,否则输出空字符串的系统。相似地,ABE 可以表达为一个稍微更复杂的函数。依照这一范式,我们可以展望在将来,各类有趣的功能都可以由计算不同的函数得到,并在未来的方案中被实现。

但这些都必须要等到以后了。今天我们谈的已经足够多了。

所以这一切的重点是什么?

对于我来说,重点不过是证明密码学可以做到一些十分优美惊人的事。当谈及工业与“应用”密码学时,我们鲜有见到这些出现在日常应用中,但我们都可以等待着它们被广泛使用的一天的到来。

也许完美的应用就在某个地方,也许有一天我们会发现它。

注:

  • 注 1:最初在这片博文里我写的是 “20 世纪 90 年代中期”。在文章的评论里,Tom Ristenpart 提出了异议,并且非常好地论证了很多重要的发展都是在这个时间之后发生的。所以我把时间再推进了大约 5 年,而我也在考虑怎样将这表达得更好一些。
  • 注 2:我们知道有一种叫作 “无证书加密” 的加密的中间形式。这个想法由 Al-Riyami 和 Paterson 提出,并且使用到标准公钥加密和 IBE 的结合。基本的思路是用一个(消息接受者生成的)传统密钥和一个 IBE 身份共同加密每则消息。然后接受者必须从 IBE 权威机构处获得一份私钥的拷贝来解密。这种方案的优点是两方面的:(1)IBE 密钥机构不能独自解密消息,因为它没有对应的(接受者)私钥,这就解决了“托管”问题(即权威机构完全具备解密消息的能力);(2)发送者不必验证公钥的确属于接收者(LCTT 译注:原文为 sender,但译者认为应该是笔误,应为 recipient),因为 IBE 方面会防止伪装者解密这则消息。但不幸的是,这个系统更像是传统的公钥加密系统,而缺少 IBE 简洁的实用特性。
  • 注 3:开发 IBE 的一部分挑战在于构建一个面临不同密钥持有者的“勾结”安全的系统。譬如说,想象一个非常简单的只有 2 比特的身份鉴定系统。这个系统只提供四个可能的身份:“00”,“01”,“10”,“11”。如果我分配给你对应 “01” 身份的密钥,分配给 Bob 对应 “10” 的密钥,我需要保证你们不能合谋生成对应 “00” 和 “11” 身份的密钥。一些早期提出的解决方法尝试通过用不同方式将标准公共加密密钥拼接到一起来解决这个问题(比如,为身份的每一个字节保留一个独立的公钥,然后将对应的多个私钥合并成一个分发)。但是,当仅仅只有少量用户合谋(或者他们的密钥被盗)时,这些系统就往往会出现灾难性的失败。因而基本上这个问题的解决就是真正的 IBE 与它的仿造近亲之间的区别。
  • 注 4: 博奈和富兰克林方案的完整描述可以在 这里 看到,或者在他们的 原版论文 中。这里这里这里 有一部分代码。除了指出这个方案十分高效之外,我不希望在这上面花太多的篇幅。它由 Voltage Security(现属于惠普) 实现并占有专利。

via: https://blog.cryptographyengineering.com/2017/07/02/beyond-public-key-encryption/

作者:Matthew Green 译者:Janzen\_Liu 校对:wxy

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

Vim 是一种流行的、功能丰富的和高度可扩展的 Linux 文本编辑器,它的一个特殊功能便是支持用带密码各种的加密方法来加密文本文件。

本文中,我们将向你介绍一种简单的 Vim 使用技巧:在 Linux 中使用 Vim 对文件进行密码保护。我们将向你展示如何让一个文件在它创建的时侯以及为了修改目的而被打开了之后获得安全防护。

建议阅读: 你应该在 Linux 中使用 Vim 编辑器的 7 个原因

要安装 Vim 完整版,只需运行这些命令:

$ sudo apt install vim          #Debian/Ubuntu 系统
$ sudo yum install vim          #RHEL/CentOS 系统 
$ sudo dnf install vim      #Fedora 22+

参阅: 十年后 Vim 8.0 发布了在 Linux 上安装

怎样在 Linux 中用 Vim 对文件进行密码保护

Vim 有个 -x 选项,这个选项能让你在创建文件时用它来加密。一旦你运行下面的 vim 命令,你会被提示输入一个密钥:

$ vim -x file.txt
警告:正在使用弱加密方法;参见 :help 'cm'
输入加密密钥:*******
再次输入相同密钥:*******

如果第二次输入的密钥无误,你就能可以修改此文件了。

Vim File Password Protected

被密码保护的 Vim 文件

等你修改好之后,摁 Esc 和键入 :wq 来保存及关闭文件。下次你想打开它编辑一下,你就必须像这样去输入密钥:

$ vim file.txt
需要 "file.txt" 的加密密钥
警告:正在使用弱加密方法;参见 :help 'cm'
输入密钥:*******

假设你输了一个错误的密码(或者没输密码),你会看到一些垃圾字符。

Vim Content Encrypted

Vim 中的加密内容

在 Vim 中设置一种强加密方法

注意:警告信息暗示保护文件的是弱加密方法。那么接下来,我们来看看怎么在 Vim 中设置一种强加密方法。

Weak Encryption on Vim File

Vim 中文件弱加密

为了查看加密方式(cm)集,键入如下:

:help 'cm'

输出样例:

                                                *'cryptmethod'* *'cm'*
'cryptmethod'       string  (默认 "zip")
                            全局或本地到缓冲区 |global-local|
                            {not in Vi}
        当缓冲区写进文件中所用的加密方式:
                                                *pkzip*
            zip             PkZip 兼容方式。  一种弱加密方法。
                            与 Vim 7.2 及更老版本后向兼容。
                                                *blowfish*
            blowfish        河豚加密方式。  中级强度加密方法但有实现上
                            的瑕疵。需要 Vim 7.3 及以上版本,用它加密的文件不
                            能被 Vim 7.2 及更老版本读取。它会添加一个 “种子”,
                            每次你当你写入文件时,这个加密字节都不同。

你可以像如下所示的那样给一个 Vim 文件设置个新的加密方法(本例中我们用 blowfish2 加密方法)

:setlocal cm=blowfish2

然后键入回车和 :wq 保存文件。

Set Strong Encryption on Vim File

对 Vim 文件设置强加密

现在你再打开下面的文件时应该就看不到那条警告信息了。

$ vim file.txt
需要 "file.txt" 的加密密钥
输入加密密钥:*******

你也可以在打开 Vim 文件之后来设置密码,用 :X 命令就能像上面所示的那样去设置一个加密密码。

可以看看我们其他的关于 Vim 编辑器的有用的文章。

  1. 在 Linux 中学习有用的 Vim 编辑器的技巧
  2. 给每个 Linux 用户的 8 种有用的 Vim 编辑器技巧
  3. spf13-vim – Vim 编辑器的顶级分发版
  4. 怎样在 Linux 种把 Vim 编辑当作 Bash IDE 来用

本文到这里就结束了!文章中我们介绍了怎么通过 Linux 下的 Vim 文本编辑器来给一个文件做加密防护。

永远记住要用强加密方式及密码来适当的保护那些可能包含了诸如用户名及密码、财务账户信息等机密信息的文本文件。


作者简介:

Aaron Kili 是一个 Linux 和 F.O.S.S(Free and Open-Source Software,自由及开放源代码软件)爱好者,未来的 Linux 系统管理员、Web 开发人员,目前是 TecMint 的内容创作者,他喜欢用电脑工作,且崇尚分享知识。


via: https://www.tecmint.com/password-protect-vim-file-in-linux/

作者:Aaron Kili 译者:ch-cn 校对:wxy

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

隐私保护、安全和加密是不可分开的,用户可以通过加密来提高安全和保护操作系统的隐私信息。本文将会介绍在 Ubuntu Linux 中对硬盘全盘加密的优缺点。此外,我们也介绍如何在系统级别上进行加密设置,并对一些目录进行加密。加密是非常有用的,而且也没有你想象中那么复杂。综上所述,让我开始进行加密吧。

加密的优缺点

尽管进行全盘加密听起来非常棒,但是否要这么做还是有些争议的。我们先来看看这个做法有哪些优缺点。

加密的优点

  • 提高私密程度
  • 只有拥有密钥的人才能访问操作系统及其中文件
  • 确保政府或者黑客无法侦测你的系统和侵犯你的隐私

加密的缺点

  • 在其他的 Linux 操作系统上访问和挂载文件系统将变得困难
  • 无法从那些加密分区中恢复数据
  • 如果用户丢失了加密密钥,那就彻底悲剧了

安装前的准备

在 Ubuntu 中加密最好就是在安装进程开始之前在系统层面进行。在 Ubuntu 安装进程开始之后是无法加密的,所以先备份你的重要数据到 DropboxGoogle Drive (或者其它硬盘上),然后后准备重新安装 Ubuntu。

此处 开始下载最新版本的 Ubuntu,并制作好可启动的 U 盘 (需要至少 2 GB 可用空间)。

制作启动 U 盘需要一个烧录程序,可以到 etcher.io 去下载。下载好之后解压 zip 文件,右击 (或者使用鼠标选定之后按下回车) 解压出来的文件以运行。

注意:烧录程序会询问是否创建图标,选择“yes”。

在烧录程序中点击“ 选择镜像 Select Image ”按钮,选择之前下载好的 Ubuntu ISO 镜像。然后插入你的 U 盘。烧录程序会自动检测并为你选择。最后,点击“ 开始烧录 Flash ”按钮来开始创建进程。

完成之后,重启电脑至 BIOS,设置为 U 盘启动。

注意:如果你的电脑不支持从 U 盘启动,下载 32 位的 Ubuntu,并使用你电脑中的烧录软件将其烧录到 DVD 中。

对你的硬盘进行全盘加密

加载好 Live Ubuntu 之后,安装进程就可以开始了。当 Ubuntu 安装进程开始之后,会出现下面这样一个界面。注意每个人安装进程都可能不同的,或许你会看到的不太一样。

选择“ 擦除磁盘并安装 Ubuntu Erase disk and install Ubuntu ”,并选择“ 加密新装的 Ubuntu 以提高安全程度 Encrypt the new Ubuntu installation for Security ”来开始加密的安装进程。这样会自动选择 LVM。两个选框都必须选中。选好加密选项之后,点击“ 现在安装 Install Now ”。

注意:如果是双系统启动的话,你需要安装到空余磁盘空间,而非擦除磁盘。选择好之后,像上边一样选择加密选项。

选择加密选项并开始安装之后,会出现一个加密配置页面。这个页面用户需要为安装进程设置自己的加密密钥。

输入安全密钥。该安全密钥设置窗口会自动为你输入的密钥进行密码强度评级,使用这个功能时看着后边的显示,直到显示为“ 高强度密码 strong password ”为止。输入完成后,在下方在此输入来确认密码,最后用一张纸把密码写下下来妥善保管。

此外,选定“ 覆些磁盘空余空间 Overwrite empty disk space ”,当然这是一个可选步骤。一切准备就绪之后点击现在安装即可。

在设置完加密密钥之后,就是传统的 Ubuntu 安装配置了。选择时区、创建用户以及对应的安全密码。

与创建和加密 Ubuntu 磁盘对应,在创建用户的时记得候选择“ 登录系统需要密码 require my password to log in ”和“ 加密我的家目录 encrypt my home folder ”。这样可以为你的数据再增加一层保护。

等到用户名、加密设置以及其他所有事情都完成之后,Ubuntu 安装进程就可以开始了。随后,安装进程会告知你安装已完成,移除安装介质后重启即可享受 Ubuntu 之旅。

结论

进行磁盘加密之后,如果没有加密密钥则无法开启 Ubuntu。尽管无趣,但这种级别的加密使用最容易的,并且还充分利用了操作系统提供的特性。用户不需要过多的知识,或者使用其他第三方程序就可以很快完成加密要求。

加密之后的 Ubuntu,使用起来和没有加密的并没有什么区别。不需要其他的步骤,也不需要学习什么复杂的解密方法。对于那些非常在意隐私但又不想太过麻烦的人来说,这个提高安全等级的方法是必须学会的(当然,这很容易不是吗)。

你是否会使用 Ubuntu 对硬盘进行加密呢?在下方评论告诉我们。


译者简介:

GHLandy —— 欲得之,则为之奋斗。 If you want it, work for it.


via: https://www.maketecheasier.com/encrypt-hard-disk-in-ubuntu/

作者:Derrik Diener 译者:GHLandy 校对:wxy

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

当你有重要的敏感数据的时候,给你的文件和目录额外加一层保护是至关重要的,特别是当你需要通过网络与他人传输数据的时候。

由于这个原因,我在寻找一个可疑在 Linux 上加密及解密文件和目录的实用程序,幸运的是我找到了一个用 tar(Linux 的一个压缩打包工具)和 OpenSSL 来解决的方案。借助这两个工具,你真的可以毫不费力地创建和加密 tar 归档文件。

在这篇文章中,我们将了解如何使用 OpenSSL 创建和加密 tar 或 gz(gzip,另一种压缩文件)归档文件:

牢记使用 OpenSSL 的常规方式是:

# openssl command command-options arguments

在 Linux 中加密文件

要加密当前工作目录的内容(根据文件的大小,这可能需要一点时间):

# tar -czf - * | openssl enc -e -aes256 -out secured.tar.gz

上述命令的解释:

  1. enc - openssl 命令使用加密进行编码
  2. -e – 用来加密输入文件的 enc 命令选项,这里是指前一个 tar 命令的输出
  3. -aes256 – 加密用的算法
  4. -out – 用于指定输出文件名的 enc 命令选项,这里文件名是 secured.tar.gz

在 Linux 中解密文件

要解密上述 tar 归档内容,使用以下命令。

# openssl enc -d -aes256 -in secured.tar.gz | tar xz -C test

上述命令的解释:

  1. -d – 用于解密文件
  2. -C – 提取内容到 test 子目录

下图展示了加解密过程,以及当你尝试执行以下操作时会发生什么:

  1. 以传统方式提取 tar 包的内容
  2. 使用了错误的密码的时候
  3. 当你输入正确的密码的时候

在 Linux 中加密和解密 Tar 归档文件

在 Linux 中加密和解密 Tar 归档文件

当你在本地网络或因特网工作的时候,你可以随时通过加密来保护你和他人共享的重要文本或文件,这有助于降低将其暴露给恶意攻击者的风险。

我们研究了一种使用 OpenSSL(一个 openssl 命令行工具)加密 tar 包的简单技术,你可以参考它的 手册页 man page 来获取更多信息和有用的命令。


via: http://www.tecmint.com/encrypt-decrypt-files-tar-openssl-linux/

作者:Gabriel Cánepa 译者:OneNewLife 校对:wxy

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