Git-Crypt

Git-Crypt là một công cụ cho phép chúng ta mã hoá và giải mã các tập tin với GPG (GNU Privacy Guard) keys. Sử dụng Git-Crypt chúng ta có thể dễ dàng chọn các tập tin cần mã hoá để mã hoá trước khi push chúng lên remote server. Việc sử dụng Git-Crypt sẽ góp phần vào việc bảo vệ các dữ liệu nhạy cảm đang chứa trong project của chúng ta khi mà dữ liệu đó được publish hoặc đẩy lên Git repository.

1. Cài đặt git-crypt

Chúng ta có thể tham khảo cách cài đặt theo tài liệu sau: Cài đặt Git-Crypt

Ví dụ để cài đặt trên Mac OS ta sẽ cài đặt qua Homebrew với câu lệnh đơn giản sau:

brew install git-crypt

2. Tạo repository và khởi tạo git-crypt

Giả sử chúng ta có một repository và trong repository đó chúng ta có một file dùng để lưu chữ các api keys.

mkdir project1
cd project1
echo "Project document" > README.md
echo "Apikey: jkdjf234234" > apis.txt
git init

Trong ví dụ trên ta có một dự án với tên là project1 trong project1 ta tạo 2 tập tin là README.md(Chứa các tài liệu cơ bản của dự án) và apis.txt (Chứa các dữ liệu nhạy cảm liên quan đến các api keys của dự án).

Sau khi đã khởi tạo git như trên ta sẽ tiếp tục khởi tạo git-crypt cho dự án.

git-crypt init

Sau khi thực hiện xong câu lệnh trên ta sẽ thấy output hiện ra:

Câu lệnh khởi tạo git-crypt sẽ tạo ra một symmetric key cho project của chúng ta. Việc cần làm lúc này là chúng ta sẽ lưu trữ key này lại để phục vụ cho việc giải mã sau này.

git-crypt export-key git-crypt-key

Trong project của chúng ta sẽ xuất hiện 1 file mới là git-crypt-key, ta sẽ lưu trữ file này cẩn thận để phục vụ cho việc giải mã.

3. Cấu hình các tập tin cần mã hoá

Để git-crypt biết được các tập tin nào trong project cần được mã hoá, chúng ta cần tạo 1 file là .gitattributes và thêm các điều kiện mã hoá vào đó.

echo "apis.txt filter=git-crypt diff=git-crypt" > .gitattributes

Như câu lệnh trên, chúng ta sẽ tạo ra file .gitattributes với config sẽ mã hoá file apis.txt

Trong trường hợp nếu ta muốn mã hoá hết các tập tin có phần mở rộng là .key ta sẽ thêm config như sau:

*.key filter=git-crypt diff=git-crypt

Hoặc nếu muốn mã hoá hết các tập tin của thư mục keys ta sẽ config:

keys/** filter=git-crypt diff=git-crypt

Để tránh việc file .gitattributes bị mã hoá bởi các điều kiện được chứa bên trong nó, ta sẽ thêm:

.gitattributes !filter !diff

4. Kiểm tra trạng thái và mã hoá

Để kiểm tra trạng thái của các tập tin mã hoá chúng ta sử dụng câu lệnh sau:

git-crypt status

Ta có thể thêm tham số -e để chỉ trả về các tập tin đã được mã hoá.

Với kết quả trạng thái như trên ta thấy apis.txt đã được đánh dấu mã hoá đúng theo mong muốn của chúng ta. Vậy ta sẽ tiến hành commit và thực hiện mã hoá.

git add * git commit -m "Add files" git-crypt lock

Sau khi lock tập tin apis.txt sẽ được mã hoá nội dung và kết quả mã hoá sẽ là:

Để giải mã ta sẽ sử dụng git-crypt-key đã tạo ở bước trước đó để giải mã thông tin.

git-crypt unlock git-crypt-key

git-crypt-key là chìa khoá để giải mã các tập tin đã bị mã hoá nên việc lưu trữ nó là vô cùng quan trọng, bởi việc thất lạc hoặc bị sao chép sẽ đều có thể dẫn đến rủi ro gây mất mát và rò rỉ thông tin nhạy cảm.

5. Sử dụng cùng git-crypt key cho nhiều repositories khác nhau

Chúng ta có thể sử dụng 1 git-crypt key cho nhiều dự án khác nhau, việc tái sử dụng này khá đơn giản chỉ cần một vài thay đổi trong bước khởi tạo git-crypt như sau.

Việc khởi tạo repository và git vẫn giống như mô tả ở trên chỉ khác là thay vì sử dụng git-crypt init thì ta sử dụng git-crypt unlock

mkdir project2
cd project2
echo "api 1" > api.key
git init
echo "*.key filter=git-crypt diff=git-crypt" > .gitattributes
git add *
git commit -m "init"
git-crypt unlock ../project1/git-crypt-key
git-crypt lock

Trong ví dụ trên project2project1 cùng sử dụng chung 1 key git-crypt-key. Git-crypt trong project2 được cấu hình sẽ mã hoá các tập tin mà có phần mở rộng là .key.

Leave a Reply

Your email address will not be published. Required fields are marked *