Git과 종단 간 암호화로 Obsidian 보안 동기화하기
기기 간 Obsidian 노트 동기화하면서 데이터 프라이버시를 완벽히 지키는 건 Git과 git-crypt 도구를 활용하면 간단합니다. 이 방법으로 독점 클라우드 서비스에 의존하지 않고 노트에 대한 완전한 제어를 쥘 수 있어요.
환경 설정 및 GPG 키 생성
필요한 소프트웨어를 먼저 설치하세요. Arch Linux에서는 sudo pacman -S gnupg git-crypt, Debian/Ubuntu에서는 sudo apt install gnupg git-crypt를 실행하세요. 다음으로 GPG 디렉토리 권한을 강화하세요:
chmod 700 ~/.gnupg
find ~/.gnupg -type f -exec chmod 600 {} \;
find ~/.gnupg -type d -exec chmod 700 {} \;
gpg --full-generate-key로 비대칭 키를 생성하세요. 설정 중에 다음을 선택하세요:
- 키 유형: RSA (옵션 1).
- 크기: 4096비트.
- 만료: 0 (만료 없음).
- ID 정보: 이름과 이메일.
- 패스프레이즈: 각 저장소 잠금 해제 시 필요.
편의를 위해 24시간 동안 패스프레이즈를 캐시하려면 ~/.gnupg/gpg-agent.conf에 default-cache-ttl 86400과 max-cache-ttl 86400을 추가한 후 gpgconf --reload gpg-agent를 실행하세요.
git-crypt로 저장소 초기화
노트 폴더로 이동해 Git 저장소를 초기화하세요: cd ~/notes && git init. git-crypt init으로 암호화를 설정한 후 GPG 키를 신뢰 목록에 추가하세요: git-crypt add-gpg-user --trusted [email protected].
.gitignore와 .gitattributes를 제대로 설정하세요. .gitignore에는 Obsidian 임시 파일과 시스템 파일을 제외하세요:
.obsidian/workspace.json
.obsidian/workspace-mobile.json
.obsidian/cache
.trash/
.gitattributes에는 git-crypt 암호화 대상 파일을 지정하세요:
.gitattributes !filter !diff
.gitignore !filter !diff
*.md filter=git-crypt diff=git-crypt
*.canvas filter=git-crypt diff=git-crypt
*.png filter=git-crypt diff=git-crypt
*.jpg filter=git-crypt diff=git-crypt
*.jpeg filter=git-crypt diff=git-crypt
*.pdf filter=git-crypt diff=git-crypt
커밋 순서가 중요합니다: 먼저 .gitattributes를 커밋한 후 나머지를 커밋해 암호화되지 않은 데이터를 푸시하지 마세요.
git add .gitattributes
git commit -m "$(date '+%Y-%m-%d %H:%M')"
git add .
git commit -m "$(date '+%Y-%m-%d %H:%M')"
암호화 상태를 확인하려면 git-crypt status | grep WARNING을 실행하세요. 원격 저장소를 설정하고 푸시하세요.
Obsidian 연동 및 자동화
Obsidian 설정에서 Obsidian Git 플러그인(Vinzent 제작)을 설치해 UI나 일정에 따라 pull, commit, push를 처리하세요. 핵심 규칙: Obsidian 실행 전에 터미널에서 git-crypt unlock으로 저장소를 반드시 잠금 해제하세요. 그렇지 않으면 노트 텍스트 대신 바이너리 쓰레기가 보이고 플러그인이 잘못된 커밋을 푸시할 수 있어요.
보안을 강화하려면 pre-commit 훅으로 암호화되지 않은 파일 푸시를 차단하세요. 실행 가능한 .githooks/pre-commit 파일을 만드세요:
#!/bin/bash
for file in $(git diff --cached --name-only); do
if git check-attr filter "$file" | grep -q "git-crypt"; then
string=$(git show ":$file" 2>/dev/null | head -c 9)
if [ "$string" != $'\x00GITCRYPT' ]; then
echo "file '$file' is not encrypted. Be careful!"
exit 1
fi
fi
done
exit 0
Git에 사용하라고 설정하세요: git config core.hooksPath .githooks.
마이그레이션 및 백업
새 기기로 옮길 때는 비밀 GPG 키를 내보내세요: gpg --export-secret-keys --armor [email protected] > ~/key.asc. scp 등으로 안전하게 전송한 후 gpg --import로 가져오고, 저장소를 클론한 뒤 git-crypt unlock을 실행하세요. 양쪽 기기에서 키 파일을 삭제하세요. GPG 키와 패스프레이즈는 비밀번호 관리자 등 안전한 곳에 백업하세요—이게 없으면 노트에 접근할 수 없습니다.
대안: 대칭 암호화
GPG가 과하다면 git-crypt의 대칭 키를 사용하세요. git-crypt export-key ~/key.bin으로 내보내고 base64로 변환해 저장하세요: base64 -i ~/key.bin. 문자열을 비밀번호 관리자에 보관하세요. 다른 기기에서는 echo "base64 string" | base64 -d > key.bin && git-crypt unlock key.bin으로 디코딩하고 잠금을 해제하세요. 주의: 키에 추가 패스프레이즈가 없어 보안이 약합니다—키가 유출되면 데이터가 노출돼요.
주요 장점
- 완전한 데이터 제어: AES-256 종단 간 암호화로 Git 저장소에 노트가 안전하게 저장됩니다.
- 원활한 워크플로: Git 필터로 암호화/복호화가 자동—일반 Markdown 파일을 편집하세요.
- 크로스 플랫폼: Linux, macOS, Windows(WSL 또는 네이티브 Git)에서 동작.
- 자동 동기화: Obsidian Git 플러그인이 일정 커밋과 푸시를 처리.
- 추가 보호: pre-commit 훅으로 암호화되지 않은 파일의 우발적 푸시를 막음.
— Editorial Team
아직 댓글이 없습니다.