본문 바로가기
BackEnd

인증 & 인가에 대해서

by SoriKim 2023. 11. 23.
반응형

1. 인증(Authentication)

1️⃣ 인증(Authentication)이란? 

"인증(Authentication)"은 특정 사용자나 시스템이 자신이 주장하는 신원(Identity)나 권한을 입증하는 과정 또는 결과를 의미합니다. 즉, 특정 사용자가 누구인지 확인하고, 그 사용자가 특정 자원이나 서비스에 접근할 권한이 있는지 확인하는 프로레스를 말합니다. 

 

2️⃣ 인증의 유형

인증에는 여러 유형이 있습니다. 이 중에 단일 요소 인증(Single-Factor Authentication, SFA)은 사용자가 인증을 위해 단일한 인증 수단을 사용하는 방식입니다. 주로 아이디와 패스워드를 사용해 사용자 신원을 확인하는 전통적인 방법이 단일 요소 인증에 해당하며 사용자는 아이디, 패스워드를 입력해 시스템에 로그인 및 자원에 접근 가능합니다. 

 

이런 단일 요소 인증은 간단하고 직관적이지만, 보안 측면에서 취약점이 존재합니다. 예시로, 다른 사람이 패스워드를 알게 되거나 유출된 경우 해당 사용자의 계정이 쉽게 침해되는 등의 이류로 보안 강화를 위해 다중 요소 인증(Multi-Factor Authentication, MFA)과 같은 추가적 인증 수단을 도입하는 추세가 있습니다. 

 

3️⃣ 인증 절차 

인증 절차는 사용자가 시스템 또는 서비스에 자신의 신원을 확인하는 과정을 나타내며 일반적으로 웹사이트에서 사용자가 회원가입 및 로그인을 하여 아이디, 비밀번호를 확인하는 기본적 절차를 알아보겠습니다. 

 

🟢 회원가입

1) 사용자는 웹사이트에 접속해 회원가입 페이지로 이동

2) 사용자는 회원가입 양식에 필수 정보를 입력(일반적으로 이메일 주소, 비밀번호, 사용자 이름등이 포함) 

3) 필수 정보를 입력한 후 사용자는 회원가입 양식을 제출

4) 일부 웹사이트에는 사용자가 제공한 이메일 주소를 인증하기 위해 이메일을 보내고 ,사용자가 제공한 링크를 클릭하도록 요구하는 추가적 단계를 수행할 수 있음(선택) 

5) 제출된 정보가 유효할 시 웹사이트는 사용자 계정을 생성해 사용자 정보를 데이터베이스에 저장(비밀번호 등 사용자가 입력한 문자 그대로 저장하는 것이 암호화를 진행한 후 저장)

 

🟢 로그인

1) 이미 가입한 사용자는 로그인 페이지로 이동해 로그인 시도 

2) 사용자는 가입 시 설정한 사용자 이름 또는 이메일 주소와 비밀번호를 입력

3) 입력한 정보를 제출해 로그인 시도

4) 시스템은 사용자가 입력한 정보를 인증 서버 또는 데이터베이스와 비교해 확인(암호화된 비밀번호는 사용자가 로그인 시 입력한 비밀번호를 암호화한 후 그 값을 DB에 저장된 암호화된 비밀번호와 비교)

5) 정보가 일치하면 사용자에게 고유한 세션을 부여하고 이 세션을 사용해 사용자가 로그인한 상태를 추적(사용자의 인증 정보가 담긴 access token을 전송해 다음 요청에서는 이 token을 요청에 첨부해 서버로 전송하여 매번 로그인하지 않도록 함)

6) 성공적으로 인증 시 사용자는 해당 계정에 로그인해 웹사이트의 보호된 기능에 접근 

 

2. 인가(Authorization)

"인가(Authorization)"는 특정 사용자가 특정 리소스에 대한 접근 권한을 가지고 있는 여부를 확인하는 프로세스를 가리킵니다. 인가는 주로 인증된 사용자에 대한 권한 관리와 관련 있으며, 시스템이나 서비스에서 특정 작업을 수행할 수 있는 권한을 가진 지 여부를 결정합니다. 

 

인가는 일반적으로 다음과 같은 단계로 이루어집니다. 

1) 인가 요청: 사용자가 특정 리소스에 접근하거나 특정 작업을 수행하려고 할 때 인가 요청이 발생

2) 권한 확인: 시스템은 해당 사용자에게 필요한 권한이 있는지 확인하고 이를 통해 사용자가 특정 동작을 수행할 수 있는지 여부를 결정

3) 결과 반환: 권한 확인이 완료되면 시스템은 해당 작업이 허가 되었는지 여부를 나타내는 결과를 반환

 

예시로 웹 애플리케이션에 특정 페이지에 접근하려는 사용자에 대한 인가는 해당 사용자가 로그인되어 있고, 그 사용자의 권한에 따라서 허용되거나 거부될 수 있습니다. 인가는 사용자에 대한 세부 권한을 관리하고, 보안을 강화하며, 민감한 정보 또는 기능에 대한 접근을 통제하는 데 중요한 역할을 합니다. (ex. 잡플래닛 기업 리뷰 보기, 영화 예매 시 로그인 후 사용 권한 주어짐 등) 

 

 

3. 암호화 종류 

1️⃣ 단방향 암호화(One-Way Encryption)

단방향 암호화 특징은 원본 데이터를 암호화할 때 사용하는 해시 함수에 의해 일정한 길이의 고정된 문자열로 반환됩니다. 이 변환된 값은 다시 원본 데이터로 역추적이 불가해 서로 다른 데이터도 같은 해시 값이 될 수 있습니다. 이런 특성 때문에 원본 데이터를 복원할 수 없습니다. 단방향 암호화를 사용하는 주된 이유는 메시지 또는 파일의 무결성을 보장하기 위해서입니다. 

원본의 값이 1bit라도 달라지면 해시 알고리즘을 통과한 후의 해시값이 매우 높은 확률로 달라지며 이를 통해 메시지나 파일이 원본인지 아닌지 확인 가능합니다. 

 

해시의 무결성을 보장하는 특징을 이용해 저자서명, 파일 또는 데이터의 식별자, 사용자의 비밀번호, 블록체인 등에 활용됩니다. 

 

▶︎ 예시 

MD5 (Message Digest Algorithm 5): 128비트 길이의 해시 값을 생성하는 알고리즘입니다. 그러나 현재는 보안 취약점이 존재하므로 사용을 권장하지 않습니다.

 

SHA-256 (Secure Hash Algorithm 256-bit): 256비트 길이의 안전한 해시 값을 생성하는 알고리즘으로, 보안적으로 강력합니다.

 

▶︎ 용도

비밀번호 저장

사용자의 비밀번호를 저장할 때 원본 비밀번호를 저장하지 않고, 단방향 암호화된 값(해시)을 저장해 보안을 강화합니다. 

 

무결성 검증

데이터의 무결성을 검증하고, 데이터가 변경되지 않았는지 확인 시 사용됩니다. 

 

▶︎ 한계 

해시 알고리즘은 동일한 평문에 대해서 항상 동일 해시값을 갖습니다. 따라서 특정 해시 알고리즘에 대해서 어떠한 평문이 어떤한 해시값을 갖는지 알 수가 있습니다. 이런 특징을 이용하여 해시 함수의 해시 값들을 대량으로 정리한 테이블이 존재하며, 이를 레인보우 테이블이라고 부릅니다. 그리고 레이보우 테이블을 이용하여 사용자의 정보를 해킹하는 공격을 레인보우 공격이라고 합니다.

또한 해시 함수는 본래 데이터를 빠르게 검색하기 위해서 탄생 되었습니다. 이러한 해시 함수의 빠른 처리 속도는 공격자에게 오히려 장점이 됩니다. 공격자는 매우 빠른 속도로 임의의 문자열의 해시값과 해킹할 대상의 해시값을 비교하여 대상자를 공격할 수 있습니다. (MD5를 사용한 경우 일반적인 장비를 이용하여 1초당 56억 개의 해시값을 비교할 수 있습니다).

 

▶︎ 솔팅(Salting) & 키 스트레칭(Key Stretching) 

 솔팅(Salting)

솔팅은 단방향 해시 함수를 통해 암호화를 진행 할 때 본래 데이터에 추가적으로 랜덤 한 데이터를 더해 암호화를 진행하는 방식입니다. 원래 데이터에 추가 데이터가 포함되어 원래 데이터의 해시값과 다르게 됩니다.

 

키 스트레칭(Key Stretching) 

단방향 해시값을 계산한 후, 그 해시값을 또 다시 해시하고 이를 반복하는 방식입니다. 

최근 일반적인 장비로 1초에 50억 개 이상의 해시값을 비교할 수 있지만, 키 스트레칭을 적용해 동일한 장비에 1초에 5번 정도만 비교할 수 있습니다. GPU(Graphics Processing Unit)를 사용하더라도 수백에서 수천 번 정도만 비교할 수 있습니다. 

 

 

2️⃣ 양방향 암호화(Two-way Encryption)

양방향 암호화의 특징은 원본 데이터 복호화가 가능하다는 것입니다. 암호화된 데이터를 다시 원본 데이터로 복원할 수 있는 알고리즘을 사용하며 이를 위해 대칭키(암호화와 복호화에 동일한 키 사용)또는 공개키와 개인 키 쌍을 사용합니다. 

 

▶︎ 예시 

대칭키 암호화 

암호화와 복호화에 동일한 키를 사용하는 알고리즘으로 AES(Advanced Encryption Standard)가 대표적입니다. 

 

대칭키 암호화 한계 

  • 대칭키 방식은 하나의 키를 이용하므로 다른 사람과 대칭키 기반으로 암호화 통신을 할 경우 상대방도 사전에 같은 키를 갖고 있어야 합니다. 이때, 키를 주고받는 과정에서 키가 중간에 유출될 우려가 있고, 이로 인해 암호화 통신을 해킹당할 수 있습니다. 특히 여러 상대방과 통신할 경우 각각의 키를 관리하는 것은 더욱 어려워진다는 단점이 있습니다.

 

비대칭키 암호화 

암호화와 복호화에 각가 다른 키를 사용하는 알고리즘입니다. 이런 알고리즘은 공개키(Public Key)와 개인 키(Private Key)라는 두 개의 키를 사용해 데이터를 암호화하고 해독합니다. 비대칭키 암호화는 키와 복호화 하는 키를 구분해 대칭키 암호화의 고질적 문제인 키의 탈취 또는 관리의 단점 부분을 보완할 수 있습니다. 

 

▶︎ 용도

데이터 기밀성

민감한 정보를 안전하게 전송하기 위해 사용되며 HTTPS에서 사용되는 SSL/TLS는 대표적인 양방향 암호화 프로토콜입니다. 

 

데이터 암호화

사용자가 서버로 비대칭키 방식을 이용해 데이터를 보내는 과정

  • 서버에 key pair 발급 후 Public Key 사용자에게 전달
  • 사용자는 데이터를 암호화할 때 서버에 받은 Public Key을 사용
  • 서버는 사용자가 보낸 암호화된 데이터를 Private Key로 복호화해 내용을 확인

이 과정에서 해커가 이미 Public Key를 훔쳤었고, 사용자가 서버로 데이터를 보낼 때 데이터 또한 중간에 가져간다고 해도 해커는 해당 데이터를 확인할 수 없습니다. 사용자가 Public Key로 암호화 한 데이터는 서버가 가지고 있는 Private Key로만 복호화가 가능하기 때문입니다. 따라서 Public Key 어디에도 공개돼도 되지만, Private Key 절대 공개 돼서는 안 됩니다.

 

디지털 서명

개인 키로 암호화한 데이터는 공개키로만 해독 가능하므로, 이를 활용하여 디지털 서명을 생성할 수 있습니다. 디지털 서명은 데이터의 무결성과 인증을 보장하는 데 사용됩니다.

 

 

📍 단방향 암호화와 양방향 암호화 비교 

 

단방향은 무결성 검증 및 안전한 비밀번호 저장에 사용 되지만 원본 데이터를 복원할 수 없습니다. 반면 양방향은 데이터의 기밀성을 보장하고 안전한 통신을 위해 사용되고 복원이 가능하여 원본 데이터를 얻어야 하는 경우에 사용됩니다. 

 

반응형

댓글