设置加密的 git-repository

gr4*_*t3d 41 encryption version-control git

情况

嗨,我想用 git 保存数据,加密(在某些平台上,如bitbucketgithub)。因此问题:

我正在寻找不同的轻松方式:
如何在 bitbucket (/github)设置加密存储库?现在,我是 git 的新手,因此非常感谢包含所有必要步骤或分步说明的说明!

“研究”

git-crypt
我找到了git-crypt,但在网站上提到它用于单个文件加密。如果有人想加密整个存储库,他们会将其转发到git-remote-gcrypt

git-remote-gcrypt
在他们的README.rst 中,他们把它写得很简单

快速开始

git remote add cryptremote gcrypt::rsync://example.com:repo
git push cryptremote master
> gcrypt: Setting up new repository
> gcrypt: Remote ID is :id:7VigUnLVYVtZx8oir34R
> [ more lines .. ]
> To gcrypt::[...]
> * [new branch]      master -> master
Run Code Online (Sandbox Code Playgroud)

或低于

例子

# notice that the target git repo must already exist and its
# `next` branch will be overwritten!
git remote add gitcrypt gcrypt::git@example.com:repo#next
git push gitcrypt master
Run Code Online (Sandbox Code Playgroud)

尝试

我更喜欢完整的存储库加密,因此我尝试git-remote-gcryptQuickstartExample 的变体。到目前为止,我尝试按照他们的说明推送现有存储库。这产生了:(注意:我故意将用户名更改为user

-> 与ssh提供的示例一样

[...]/git_test$ git remote add origin gcrypt::git@bitbucket.org:user/test.git
[...]/git_test$ git push -u origin --allgcrypt: Development version -- Repository format MAY CHANGE
gcrypt: Repository not found: git@bitbucket.org:user/test.git
gcrypt: Setting up new repository
gcrypt: Remote ID is :id: ...
Zähle Objekte: 10, Fertig.
Komprimiere Objekte: 100% (6/6), Fertig.
Total 10 (delta 0), reused 0 (delta 0)
gcrypt: Encrypting to: --throw-keyids --default-recipient-self
gcrypt: Requesting manifest signature
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
error: Fehler beim Versenden einiger Referenzen nach 'gcrypt::git@bitbucket.org:user/test.git'
Run Code Online (Sandbox Code Playgroud)

或与https(有效)

[...]/git_test$ git remote add gitcrypt gcrypt::https://user@bitbucket.org/user/test.git
[...]/git_test$ git push -u gitcrypt --allgcrypt: Development version -- Repository format MAY CHANGE
Password for 'https://user@bitbucket.org': 
gcrypt: Repository not found: https://user@bitbucket.org/user/test.git
gcrypt: Setting up new repository
Password for 'https://user@bitbucket.org': 
gcrypt: Remote ID is :id: ...
Zähle Objekte: 10, Fertig.
Komprimiere Objekte: 100% (6/6), Fertig.
Total 10 (delta 0), reused 0 (delta 0)
gcrypt: Encrypting to: --throw-keyids --default-recipient-self
gcrypt: Requesting manifest signature
Password for 'https://user@bitbucket.org': 
To gcrypt::https://user@bitbucket.org/user/test.git
 * [new branch]      master -> master
Branch master konfiguriert zum Folgen von Remote-Branch master von gitcrypt.
Run Code Online (Sandbox Code Playgroud)

尽管如此,我还是不明白如何添加用户,甚至只是将我的备份拉到另一台机器上(因为我的 gpg 密钥是在本地生成的)!?请随意回答git-remote-gcrypt.

har*_*ymc 21

一个免费且部分开源的工具是 Keybase

Git 支持远程助手。我们已经做了一个开源的。

Keybase 的远程助手执行所有加密,同时让 git 做它的事情。这听起来可能令人印象深刻,但 Keybase 并没有从头开始重新实现 git。我们提供了一个远程助手,由我们已经开始贡献的优秀 go-git 项目提供支持。

我们提出:(1) 加密,(2) 团队 + 多设备密钥管理,(3) 更安全的身份概念。

它是端到端加密的。它是托管的,比如 GitHub,但只有你(和队友)可以解密其中的任何一个。对于 Keybase 来说,一切都不过是一团乱码。对您而言,这是常规结账,无需额外步骤。

甚至您的存储库名称和分支名称也是加密的,因此 Keybase 员工或渗透者无法读取。

通过Keybase Teams支持团队合作 :

Keybase 团队是一组具有灵活成员资格的命名人员。假设您从事一个名为 Treehouse 的项目。您可以在 Keybase 上注册树屋。这个队名是通用的;只能有一个具有给定名称的 Keybase 团队。

团队获得聊天和频道。聊天看起来有点像 Slack 或 Discord:

但是 Keybase 团队合作是端到端加密的,这意味着您不必担心服务器被黑客攻击。

密钥库

  • 这不适用于任何非 Keybase git 托管。它不适用于 Github 或 Gitlab 等。每当 Zoom 决定关闭 Keybase 托管时,唯一的遥控器就会丢失。 (8认同)
  • 那里的好工具!然而,它似乎是一个封闭的生态系统。我找不到任何显示如何与非 Keybase 用户一起工作的提示。这可能吗?我想强迫整个团队使用这个工具或依赖它仍然超过好处。 (5认同)
  • 请注意:“2020 年 5 月 7 日,Keybase 宣布已被 Zoom 收购[12],作为 Zoom “进一步加强我们视频通信平台安全计划”的一部分。来源:https://blog.zoom。 us/zoom 获取密钥库并宣布开发最广泛使用的企业端到端加密产品的目标/ (5认同)
  • Keybase *客户端* 是开源的(目前),但服务器不是。他们刚刚把自己卖给了 Zoom,对该项目的命运却完全保持沉默。Zoom 在隐私方面有着糟糕的历史。 (3认同)
  • 不是开源的!正如@Diagon 所提到的,只有客户端是开源的,但服务器不是。开源服务器的 github 票证可能会永远保持开放:https://github.com/keybase/client/issues/24105 (3认同)

小智 6

使用 git-remote-gcrypt 和 Bitbucket 的分步说明:

\n\n

先决条件

\n\n
    \n
  • GnuPG(brew install gpg在 macOS 上)
  • \n
  • git-remote-gcryptbrew install git-remote-gcrypt在 macOS 上)
  • \n
\n\n

概述

\n\n

本指南将引导您完成使用 Bitbucket 创建和使用名为 \xe2\x80\x9cgcrypt-sample\xe2\x80\x9d 的 git 存储库的过程,利用 git-remote-crypt 和专用 PGP 密钥对来提供最终-端到端加密。

\n\n

每一次推动都将是一次强力推动!

\n\n

脚步

\n\n

配置

\n\n
    \n
  1. 设置本地和远程存储库:\n\n
      \n
    • 设置本地存储库git init gcrypt-sample
    • \n
    • 在 bitbucket.org 上创建一个存储库gcrpyt-sample
    • \n
  2. \n
  3. 如果您还没有\xe2\x80\x99t,请设置您的 ssh 密钥:ssh-keygen
  4. \n
  5. 添加 gcrypt 远程: \ngit remote add cryptremote gcrypt::git@bitbucket.org:user/gcrypt-sample.git
  6. \n
  7. 生成您的 GPG 密钥对。推荐本指南;对于此示例,只需运行gpg --gen-key即可。
  8. \n
  9. 配置 gcrypt 以接受您刚刚创建的 gpg 密钥:\n\n
      \n
    1. git config remote.cryptremote.gcrypt-participants <GPG key fingerprint>
    2. \n
    3. git config remote.cryptremote.gcrypt-signingkey <GPG key fingerprint>
    4. \n
  10. \n
  11. 编辑您的 git 存储库:\n\n
      \n
    1. echo \'Hello, world!\' > hello.txt
    2. \n
    3. git add hello.txt
    4. \n
    5. git commit
    6. \n
  12. \n
  13. git push -u cryptremote master\n\n
      \n
    • 如果您有多个 PGP 密钥对,则\xe2\x80\x99 必须循环遍历,直到获得所需的\xe2\x80\x94,这是因为每次都先拉后推;请参阅下面的注释。
    • \n
  14. \n
\n\n

关于从存储库中拉取的注释

\n\n

每次下拉(包括推入)时,您都必须循环浏览 PGP 密钥,直到找到正确的密钥。原因是 git-remote-gcrypt 默认使用隐私保护来编辑签名密钥的身份。因此,从存储库中提取时,您必须检查所有可用密钥以查看哪一个是签名密钥。remote.cryptremote.gcrypt-publish-participants可以通过设置属性(任何内容)来发布所使用的签名密钥(并因此撤销匿名性) 。

\n\n

如果您为存储库设置了显式且单一的 PGP 密钥,那么这样做应该没问题。然而,这样做确实会对共享存储库产生影响(不同的提交无疑可以与不同的用户绑定)。

\n\n

什么\xe2\x80\x99s 加密了?

\n\n

在我的肉眼看来,几乎一切。

\n\n

什么是加密的

\n\n
    \n
  • 文件名(包括路径)
  • \n
  • 文件内容
  • \n
  • 分支(我不知道推送的第一个分支是否记录在 master 下,但所有后续分支都记录在 master 下)
  • \n
  • 提交历史记录:有一个提交(\xe2\x80\x9c初始提交\xe2\x80\x9d)和一个日期(尽管您的推送日期可能会被远程单独跟踪,当然\xe2\x80\x94BitBucket\ xe2\x80\x99s \xe2\x80\x9cLast Updated\xe2\x80\x9d 显示了准确的时间。当然,Bitbucket\xe2\x80\x99s 可能没有注意提交本身\xe2\x80\x94it\xe2\ x80\x99s 可能假设你\xe2\x80\x99正在这样做。)
  • \n
\n\n

什么没有加密

\n\n
    \n
  • 存储库名称(尽管 \xe2\x80\x99s 足够明显);只需使用代号
  • \n
  • 文件的数量或大小(它们不以任何方式分布);不确定这对不同分支有何影响
  • \n
\n

  • git-remote-gcrypt 似乎是一个糟糕的选择,因为除非我误解了它,否则它每次都可以强制推送所有内容(合并到单个远程提交中)。这使得它完全无法扩展推送。此外,没有可用的支持,没有维护的二进制文件,也没有供用户讨论各种问题的地方。 (3认同)
  • 对我不起作用,因错误而失败并且没有可用的支持。 (2认同)