보안 및 데이터
신뢰할 수 있는 호스트 (known_hosts)
호스트에 처음 연결하면 그 공개 키 지문(SHA-256)을 포착하여 확인 후 저장합니다. 이후 연결은 지문을 비교하며 — 만약 바뀌면 명확한 경고를 받습니다.
목록은 설정 → 보안 → 신뢰할 수 있는 호스트에서 관리합니다 — 각 항목은 호스트, 키 알고리즘(Ed25519, RSA, ECDSA…), 지문을 보여주며 제거할 수 있습니다.
연결은 어떻게 보호되는가
DR-Terminal은 능동적 공격자와 적대적 서버에 대비해 강화된 자체 SSH 구현을 사용합니다:
- 호스트 키는 핸드셰이크 중, 어떤 비밀이든 전송되기 전에 확인됩니다. 중간자가 잘못된 키를 제시하면 연결은 키 교환 단계에서 중단됩니다 — 비밀번호나 개인 키는 절대 기기를 떠나지 않습니다.
- 기본적으로 강력한 알고리즘만 사용합니다. 다운그레이드에 취약한 레거시 알고리즘 — SHA-1 서명 및 MAC,
ssh-rsa, 1024비트 Diffie-Hellman — 은 꺼져 있습니다. 연결은 최신 키 교환(양자 내성 하이브리드sntrup761x25519-sha512와mlkem768x25519-sha256을 먼저, 그다음 Curve25519, ECDH, Diffie-Hellman ≥ 2048비트), 암호(AES-GCM, ChaCha20-Poly1305, AES-CTR) 및 호스트 키 종류(Ed25519, ECDSA, RSA-SHA2)를 사용합니다. 더 약한 것만 제공하는 서버는 연결할 수 없습니다 — SSH 알고리즘(아래 참조)에서 레거시 알고리즘을 일부러 다시 켜지 않는 한 말입니다. - 자동 다운그레이드 없음. 서버가 사용하는 서명은 협상된 것과 일치해야 하므로, 몰래 더 약한 것으로 되돌아갈 수 없습니다.
- Terrapin(CVE-2023-48795)이 완화됩니다 — 엄격한 키 교환을 통해서.
- 적대적이거나 버그가 있는 서버에 강합니다. 네트워크에서 들어오는 패킷 길이, 메시지 필드, 채널 윈도우는 모두 범위 검사를 거치므로, 악의적인 서버가 앱을 다운시키거나 메모리를 고갈시킬 수 없습니다 — 인증 이전에도 마찬가지입니다.
이러한 보호는 자동으로 켜집니다. 사용자는 위의 신뢰할 수 있는 호스트 프롬프트를 통해서만 이들과 상호 작용합니다.
SSH 알고리즘 (고급)
설정 → 보안 → SSH 알고리즘에서는 클라이언트가 서버에 제안하는 내용을 조정할 수 있습니다 — 오래된 암호만 지원하는 레거시 장비를 위해, 또는 신뢰하는 순서를 고정하기 위해서입니다. 이 페이지에는 협상 범주마다 하나의 섹션이 있습니다:
- 키 교환, 암호, MAC(무결성) — 각 알고리즘을 켜거나 끄고 위아래로 옮깁니다. 이 순서가 서버로 보내는 우선순위입니다(양쪽 모두 지원하는 첫 번째 알고리즘이 채택됩니다).
- 호스트 키 — 켜기/끄기만 가능합니다.
- 압축 — 예/아니요 스위치(기본값은 꺼짐). *예*는
[email protected]을 먼저 제안하고 zlib이 없는 서버를 위한 대비책으로none을 덧붙입니다. *아니요*는none만 제안하므로 서버가 압축을 켤 수 없습니다. 압축은 느린 회선에서 도움이 되지만 양쪽 모두 CPU를 소모합니다.
라이브러리가 꺼진 상태로 제공하는 알고리즘에는 작은 호박색 legacy 태그가 붙습니다 — 직접 켜기 전까지 꺼져 있습니다. 범주가 비는 일은 절대 없습니다: 마지막으로 남은 켜진 알고리즘은 끌 수 없습니다. 섹션 제목 옆의 초기화는 라이브러리 기본값으로 되돌립니다.
저장된 각 연결은 전역 선택을 재정의할 수 있습니다: 연결 양식에서 SSH 알고리즘 → *사용자 지정*은 해당 호스트에만 적용되는 같은 편집기를 엽니다(기본값은 전역 설정을 따릅니다). 편집기를 확인하면 양식이 갱신됩니다 — 그 뒤에 연결을 저장하세요. 실제로 협상된 내용 — 키 교환, 호스트 키, 암호, MAC, 압축 — 은 세션 메뉴의 연결 정보에 표시됩니다.
새 설정은 이후에 여는 연결에 적용됩니다. 같은 호스트로의 두 번째 탭은 활성 SSH 연결을, 따라서 그 알고리즘을 재사용합니다 — 다시 협상하려면 연결을 끊고 다시 연결하세요.
양자 내성 경고
“지금 저장하고 나중에 복호화(store now, decrypt later)” 공격자는 오늘의 트래픽을 기록해 두었다가 양자 컴퓨터가 고전적 키 교환을 깰 수 있게 되면 복호화합니다. DR-Terminal은 양자 내성 하이브리드 키 교환(sntrup761x25519-sha512, mlkem768x25519-sha256 — OpenSSH가 제공하는 것과 같은 알고리즘)을 우선하며, OpenSSH처럼 세션이 고전적 키 교환으로 끝나면 경고합니다: 연결마다 한 번, 키 교환이 양자 내성이 아니며 서버 업그레이드가 필요할 수 있다는 대화 상자가 나타납니다. 다시 표시하지 않음은 경고를 영구히 끕니다. 이 설정은 설정 → 보안 → 양자 내성 경고에 있습니다(기본값은 켜짐).
내보낸 키
개인 키를 변환하거나 내보내면서(SSH 키 → 변환) 암호를 설정하면, 암호화는 형식별로 선택된 강력한 키 파생 함수를 사용합니다 — OpenSSH는 bcrypt, PKCS#8은 PBKDF2, PuTTY PPK v3는 Argon2id — 그리고 모든 솔트와 IV는 암호학적으로 안전한 난수 생성기에서 나옵니다. 변환기는 PEM과 바이너리 DER 양쪽에서 OpenSSH, PKCS#8, PKCS#1 및 PuTTY PPK(v2/v3)를 읽고 씁니다.
비밀은 어디에 저장되는가
비밀번호, 개인 키, 암호는 절대 연결 JSON으로 직렬화되지 않습니다. 곧바로 플랫폼의 보안 저장소로 들어갑니다:
- Android — EncryptedSharedPreferences, 하드웨어 Keystore로 뒷받침됨.
- iOS — Keychain(활성화했다면 생체 인증으로 보호됨).
- 데스크톱 — AES-256-GCM으로 암호화된 파일, 키는 사용자 프로필에서 파생됨.
암호화된 구성 백업
설정 → 구성 → 백업 내보내기는 비밀번호로 보호된 .drterminal 파일을 생성합니다. 여기에는 연결(자격 증명 포함), 그룹, 신뢰할 수 있는 호스트, SSH 키, SFTP 북마크, 명령 기록, 강조 규칙, 스니펫, 시리얼 및 Telnet 프로파일, SSH 알고리즘 환경설정, 터미널 외관과 설정, 그리고 (모바일에서는) DevOps 키보드 구성이 담깁니다. 백업 가져오기는 같은 묶음을 복원합니다 — 기기 간 이동 시 유용합니다.
형식: AES-256-GCM으로 암호화된 JSON. 비밀번호는 파일에 절대 저장되지 않습니다 — 암호화 키를 파생하는 데에만 쓰입니다(PBKDF2, SHA-256 100,000회 반복).
~/.ssh/config 가져오기
데스크톱에서는 기존 OpenSSH 구성에서 호스트를 일괄 가져올 수 있습니다. 가져오기 기능은 Host, HostName, User, Port, IdentityFile, ProxyJump 항목을 파싱하여 저장된 연결로 추가합니다. IdentityFile이 참조하는 키 파일은 디스크에서 SecureStorage로 로드됩니다.
로그 수준
설정 → 터미널 → 파일 로그 수준에서 ~/.dr-terminal/logs/(데스크톱) 또는 모바일의 동등한 위치에 무엇이 도달할지 고릅니다. 기본값: ERROR — 최소한의 잡음. 진단을 위해서는 DEBUG로 전환하세요.