,

인증서와 비밀은 한 뿌리다 — 신뢰를 만드는 다섯 단어를 가르는 기준

이 글의 위치: 영어(English) → 어원(Etymology) → 개발 영어(Developer English)
어원은 Online Etymology Dictionary 원문으로 대조했고, 사전이 확정하지 않는 대목은 그렇게 표시했다. 측정값은 전부 내 서버(seongwon.net)에서 직접 뽑았다. 기준은 Editorial Policy 참조.


섞여 쓰이는 다섯 단어

보안 관련 문서나 리뷰에서 이런 문장을 자주 만난다.

"토큰을 인증서로 서명해서 보안 처리했습니다."

한 문장에 token·certificate·signature가 다 들어 있는데, 셋이 서로 무엇이 다른지는 흐릿하다. 여기에 secretauthentication까지 얹히면 더 엉킨다. 나도 오래 뭉뚱그려 썼다.

그런데 어원으로 보면 다섯 단어를 가르는 선이 하나뿐이다.

신뢰를 만드는 방법은 둘밖에 없다. 아는 쪽과 모르는 쪽을 가르거나, 보여서 증명하거나.

단어 뿌리 원래 뜻 신뢰를 만드는 방식
secret se+cernere 따로 갈라 둔 것 가른다
certificate certus(←cernere)+facere 갈라서 확실하게 만든 것 가른다
token 고대영어 tācn ← PIE *deik- 보여주는 표시 보인다
signature signum 남기는 표시 보인다
authentication autos+hentēs 스스로 행한 자임 위 둘을 써서 확인한다

이 표가 이 글의 전부다. 아래는 왜 그렇게 갈리는지, 그리고 그 선이 실무에서 무엇을 결정하는지다.


갈라진 쪽 — certificate와 secret은 형제다

이건 나도 확인하고 놀랐다. certificatesecret은 같은 뿌리에서 나왔다.

PIE *krei- (체로 치다 → 가려내다)
 └── 라틴어 cernere (가르다, 체질하다, 판별하다)
      ├── secretus  = se(따로) + cernere  → secret   "따로 갈라 둔 것"
      └── certus    = cernere 의 옛 과거분사 → certain → certificate
                                              "가려내어 확정된 것"

secret은 14세기 후반 영어에 "인간의 이해에서 감춰진 것"으로 들어왔고, certain은 1300년경 "정해진, 확정된"으로 들어왔다. 뿌리는 같은데 가른 뒤에 무엇을 하느냐가 갈렸다. 한쪽은 갈라서 감췄고, 다른 쪽은 갈라서 확정했다.

여기에 facere(만들다)가 붙어 certificate가 된다. 어원 그대로 풀면 "확실하게 만든 것" 이다. 참고로 이 facere는 factory·artifact·refactor를 만든 그 어근이라, 손의 동작으로 읽는 라틴어 어근 7개fac 절과 곧장 이어진다.

그런데 운용은 정반대다

같은 뿌리인데 실무에서의 취급은 정확히 반대다. 내 서버에 붙어서 인증서를 받아봤다.

$ echo Q | openssl s_client -connect seongwon.net:443 \
             -servername seongwon.net -showcerts

 0 s:CN=seongwon.net
   i:C=US, O=Let's Encrypt, CN=YR2
 1 s:C=US, O=Let's Encrypt, CN=YR2
   i:C=US, O=ISRG, CN=Root YR
 2 s:C=US, O=ISRG, CN=Root YR
   i:C=US, O=Internet Security Research Group, CN=ISRG Root X1

Verify return code: 0 (ok)

주목할 점은 이 인증서를 누구에게나 준다는 것이다. 나는 아무 인증 없이 접속해서 전체 체인을 그대로 받았다. 인증서는 감추는 물건이 아니라 내보이는 물건이다.

반대로 같은 서버의 개인키는 이 출력 어디에도 없다. 있어서도 안 된다. secret 쪽은 감춤으로써, certificate 쪽은 공개함으로써 각자 신뢰를 만든다.

같은 뿌리에서 갈라졌다는 게 우연처럼 보이지만, 두 단어가 하는 일은 결국 하나다 — 아는 쪽과 모르는 쪽을 가르는 것. 비밀은 감춰서 가르고, 인증서는 서명해서 "이건 진짜 이 도메인"과 "그 밖의 것"을 가른다.

감추는 쪽이 어떻게 신뢰를 만드는지는 HMAC 한 줄로 볼 수 있다. 같은 입력에 키만 바꿔봤다.

$ printf 'seongwon.net' > msg.txt
$ openssl dgst -sha256 -hmac "secret-A" msg.txt
  → 8c377adbf9d15626755e80165144b4b0d86d8984…
$ openssl dgst -sha256 -hmac "secret-B" msg.txt
  → d83d78eeadcdb6519ec544dbaba493a2becf6d86…

입력이 같아도 비밀을 아는 사람만 같은 값을 만든다. 값이 맞으면 "같은 비밀을 가진 쪽"이라는 뜻이고, 그게 곧 se-cernere가 하는 일이다.


보이는 쪽 — token은 teach와 형제다

token의 뿌리는 고대영어 tācn(표시·징표)이고, 게르만조어 *taikna-를 거쳐 인도유럽조어 *deik-(보이다, 엄숙히 말하다)로 간다. 그리고 같은 뿌리에서 나온 동사가 고대영어 tǣcan, 곧 지금의 teach다.

가르친다는 게 원래 "보여준다" 였다는 뜻이다. 그러니 토큰은 어원 그대로 "보여주는 물건" 이다.

라틴어 dicere(말하다)와 index도 같은 *deik- 계열로 본다. 다만 내가 확인한 사전 항목은 token↔teach 관계까지만 명시하고 라틴어 쪽은 따로 다루지 않아, 여기서는 그렇게만 적어 둔다.

뜻이 옮겨 앉은 자리도 재미있다. 1590년대에 token"화폐처럼 찍어낸 금속 조각" 을 가리키게 됐다. 진짜 돈은 아니지만 내밀면 통하는 것. 지금 우리가 API 토큰이라 부르는 것과 정확히 같은 성격이다. 그 자체로 가치가 있는 게 아니라, 내밀었을 때 받아주기로 약속돼 있어서 통한다.

signature는 라틴어 signum(표시)에서 왔다. design·assign·signal이 한 가족이다. 토큰이 "내미는" 쪽이라면 서명은 "남기는" 쪽이다.

실제 서명이 어떻게 생겼는지도 재봤다.

$ … | openssl x509 -noout -text | grep "Signature Algorithm"
    Signature Algorithm: sha256WithRSAEncryption
    Public-Key: (2048 bit)

  서명 값: 16진수 512자 = 256바이트

256바이트. 도메인 하나가 진짜임을 보증하는 데 쓰이는 표시의 크기다. 이걸 만들 수 있는 건 발급자의 개인키뿐이고, 검증은 누구나 공개키로 할 수 있다. 만들기는 가르고, 확인하기는 보인다 — 두 갈래가 한 물건 안에서 맞물리는 지점이 서명이다.


확인하는 쪽 — authentication은 "스스로 한 일"이다

authentication의 뿌리는 그리스어 authentikos(원본의, 진짜의)이고, 그 앞에 authentēs가 있다. autos(스스로) + hentēs(행하는 자), 곧 "제 권한으로 직접 행한 자" 다.

이 단어에는 어두운 옛 뜻도 함께 있었다 — "제 손으로 저지른 자", 곧 살인자. 지금의 "진짜인"이라는 뜻은 "남을 시킨 게 아니라 본인이 한 것"이라는 감각에서 나왔다.

그래서 인증은 어원상 "이 일을 정말 본인이 했는가" 를 묻는 절차다. 무엇을 가졌는지(token)나 무엇을 아는지(secret)는 그 물음에 답하기 위한 재료일 뿐이다. 다중 인증이 "아는 것 + 가진 것 + 그 자체인 것"으로 구성되는 게 우연이 아니다. 전부 authentes를 확인하는 서로 다른 경로다.

한 걸음 더 가면 authorization과의 차이도 자연스럽다. authentication은 누구인가(스스로 행한 그 사람인가), authorization은 무엇을 해도 되는가다. 앞의 것이 끝나야 뒤의 것이 시작된다.


가르는 기준 하나 — 훔쳐 가면 무슨 일이 일어나나

다섯 단어를 실무에서 가장 빠르게 가르는 질문은 이것이다. "이게 남의 손에 들어가면 무슨 일이 벌어지나." 어원의 두 갈래가 그대로 답이 된다.

단어 남에게 넘어가면 왜 그런가 (어원)
secret 끝난다. 즉시 교체해야 한다 가름이 무너진다 — 아는 쪽과 모르는 쪽이 같아진다
token 그 범위·기간만큼 뚫린다 내밀면 통하는 물건이라, 가진 사람이 곧 주인이 된다
signature 아무 일도 없다 남기는 표시일 뿐, 만들려면 개인키가 필요하다
certificate 아무 일도 없다 애초에 누구에게나 내주는 공개물이다
authentication 훔칠 대상이 아니라 절차 훔치는 건 그 재료(secret·token)다

이 표를 알고 나면 앞의 문장이 왜 어색한지가 보인다. "토큰을 인증서로 서명해서 보안 처리했다"에서 인증서는 서명하는 도구가 아니다. 서명은 개인키가 하고, 인증서는 그 서명을 검증할 공개키를 담아 내보이는 물건이다.

내 서버 인증서를 보면 그 성격이 더 분명해진다.

subject = CN=seongwon.net
issuer  = C=US, O=Let's Encrypt, CN=YR2
notBefore = Jul 31 15:55:46 2026 GMT
notAfter  = Oct 29 15:55:45 2026 GMT      ← 90일
serial    = 0590FCD9D3E1AF378C027D967F251C028D68
SAN       = DNS:seongwon.net, DNS:www.seongwon.net

유효기간이 90일이다. 공개물이라 훔쳐 가도 손해가 없지만, 대신 짧게 끊어 자주 새로 발급한다. 감추는 물건은 새어나가는 순간이 문제이고, 내보이는 물건은 낡아가는 것이 문제다. 관리 방식이 다른 이유가 여기 있다.


정리

  • 가르는 쪽secret(따로 갈라 감춤)과 certificate(갈라서 확실히 함)는 같은 cernere 뿌리다. 감춤과 공개라는 정반대 운용이 한 어원에서 나왔다
  • 보이는 쪽token(내미는 표시, *deik- → teach의 형제)과 signature(남기는 표시, signum)
  • 확인하는 쪽authentication은 재료가 아니라 "본인이 스스로 한 일인가"를 묻는 절차(autos+hentēs)
  • 실무에서 가르는 질문 하나 — "남의 손에 들어가면 무슨 일이 벌어지나." 비밀은 끝나고, 토큰은 그만큼 뚫리고, 서명과 인증서는 아무 일도 없다

나는 이 선을 그은 뒤로 보안 관련 리뷰에서 말이 덜 엉킨다. "이건 가르는 물건인가, 보이는 물건인가"만 물어도 대개 제자리를 찾는다.


함께 읽으면 좋은 글

참고

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다