Last update:
개요
개발을 하다보면 Ubuntu/Debian의 메인 패키지 저장소가 아닌 서드 파티 저장소에서 패키지를 다운받을 때 key도 함께 다운받는 것을 보게 된다. 아래는 ROS의 예시
sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
Shell
복사
이는 패키지가 중간에 변경이 됐는 지를 탐지해서 보안을 높이기 위한 방법으로, 공개키/비공개키를 활용한다. 공개키/비공개키는 서로가 쌍을 이루는 암호키로, 비공개키에서 암호화한 것은 공개키로만 복호화할 수 있고, 공개키로 암호화한 것은 비공개키로만 복호화할 수 있다.
원리
패키지 제작자
1.
패키지를 만든다()
2.
공개키/비공개키 쌍을 만든다 (/)
3.
패키지 내용물을 해싱한다( → → ) (SHA-256 등)
4.
해시를 프라이빗 키로 암호화하여 서명(signature)을 만든다( → → )
5.
패키지와 서명을 묶어서 배포한다()
패키지 사용자
1.
서명을 포함한 패키지와, 공개키를 다운받는다(, )
2.
서명을 제외한 패키지 내용물을 해싱한다( → → )
3.
서명을 복호화 한다. ( → → )
4.
2번의 해시와 3번의 해시가 같은지 검증한다.
만약 중간에 해커가 패키지를 임의로 변경했다면 2, 3번의 두 해시가 달라지기 때문에 보안 상 해당 패키지를 사용할 수 없게 된다.
기타
•
당연히도 패키지 제작자는 비공개키를 본인만 알고 있어야 한다.
•
gpg파일은 GNU Private Guard의 약자이다.
•
Key들을 여러 개 묶은 것을 비유삼아 Keyring이라고 부른다.