C.W.K.
Stream
Lesson 02 of 04 · published

자격 증명은 macOS 거야

~11 min · keychain, no-credential-store, no-leak

Level 0Finder 에서 길 잃음
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"제일 안전한 비밀번호는 네 앱이 절대 안 가진 거야. 쥐길 거부한 비밀은 흘릴 수 없어."

비밀번호를 저장하려는 유혹

공유 재연결은 앱이 그냥 사용자명이랑 비밀번호를 기억하면 매끄러워. 그래서 유혹적인 설계는 그걸 어딘가 숨기는 거야 — 저장된 URL(smb://user:pass@host)에, 앱 DB 에, 설정 파일에. 그거 하나하나가 터지길 기다리는 누출이야: URL 이 로그에 끝나고, DB 가 읽을 수 있는 데 백업되고, 설정 파일이 git 에 커밋돼. 저장된 비밀은 출구가 많은 비밀이야.

Waygate 는 비밀을 안 쥐어

Waygate 의 설계는 비밀을 절대 안 쥐어서 위험 전체를 없애. 자격 증명 스토어가 없어. 사용자명이랑 비밀번호는 통째로 macOS 의 연결 UI 랑 Keychain 이 소유해 — 시스템이 묻고, 시스템이 저장하고, 시스템이 마운트 시점에 공급해. Waygate 는 자격 증명을 URL, SQLite, 로그 줄, 또는 git 에 닿을 수 있는 어디에도 절대 안 넣어. 공유 연결이 필요하면 Waygate 는 시스템 흐름을 촉발하고 물러서.

저장 안 함이 제일 강한 보호야

이건 내재화할 가치 있는 일반 보안 진실이야: 비밀을 절대 안 흘리는 제일 믿을 수 있는 방법은 절대 안 갖는 거야. 저장된 비밀번호를 암호화하는 건 평문보다 낫지만, 여전히 네 앱이 키, 암호문, 책임을 쥔다는 뜻이야. Keychain 에 위임하는 건 비밀이 애초에 잃을 네 거가 아니었다는 뜻이야. Waygate 는 매번 위임을 골라 — 파일 매니저의 일은 파일을 브라우징하고 변형하는 거지, 두 번째 비밀번호 매니저가 되는 게 아냐.

자격 증명은 macOS 랑 Keychain 에만 살고; Waygate 는 하나도 안 남겨. 사용자명이나 비밀번호가 URL·DB·로그·git 에 절대 안 들어가. Waygate 는 시스템 연결 흐름을 촉발하고 macOS 가 비밀을 소유하게 해 — 자격 증명을 안 쥐는 게 절대 안 흘리는 제일 믿을 수 있는 방법이니까.
가족이 이 본능을 공유해. cwk 형제 전체에서 규칙은 같아: 비밀은 OS Keychain 에 남지, 절대 repo 에도 로그에도 안 남아. 이 퀘스트들에서조차, 내부 참조는 개념적으로 묘사되지 절대 진짜 호스트명·IP·자격 증명으로가 아냐 — 아빠가 짓는 표면은 신뢰 경계고, 비밀번호를 쟁여두는 파일 매니저는 자기가 벌려고 존재하는 바로 그 신뢰를 배신할 테니까.

Code

틀림 vs 맞음: 누가 비밀번호를 쥐나·swift
// WRONG -- the credential is now in a URL string that leaks into logs,
// history, crash reports, and anywhere the URL is serialized:
let url = URL(string: "smb://alice:hunter2@fileserver.local/projects")!   // LEAK
saveToDatabase(url)                                                       // LEAK^2

// RIGHT -- store only the sanitized address; ask macOS to connect.
// macOS prompts for and stores the credential in Keychain; Waygate never sees it:
let endpoint = SavedNetworkLocation(scheme: "smb", host: "fileserver.local",
                                    share: "projects", displayName: "Projects")
NSWorkspace.shared.open(endpoint.connectURL)   // system connect flow owns the secret
// Waygate's database stores `endpoint`. There is no password anywhere in it.

External links

Exercise

비밀번호로 뭔가에 연결하는 네가 쓴 앱이나 스크립트를 감사해. 비밀이 어디 사는지 찾아 — 설정 파일, 환경 변수, URL, 하드코딩된 문자열. 그 값이 끝날 수 있는 모든 곳을 추적해(로그, 백업, git, 크래시 리포트). 그다음 앱이 비밀을 아예 안 쥐게 다시 설계해. 대신 뭐가 소유해?
Hint
비밀의 복사본을 따라가: 설정 파일은 백업되고, 환경 변수는 프로세스 목록이랑 크래시 덤프에 보이고, URL 은 로그에 떨어져. 다시 설계는 사용 시점에 묻고 공급하는 시스템 자격 증명 스토어(Keychain, 시크릿 매니저)에 위임해서, 네 코드가 값이 아니라 참조만 쥐게 해. 제일 강한 감사 결과는 '비밀이 흘릴 내 프로세스에 아예 없었음' 이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.