인증과 인가
로그인 = 인증, 인가
인증 = 내가 그에 대한 자격이 있는지를 확인(주체를 확인)
단방향 해시의 다이제스트
- 해시
- 해시값
- 해시코드
- 다이제스트
-> 위의 네개는 모두 같은 말
해시를 사용하는 이유?
단방향 해시의 경우 고정된 크기를 가지고있어서 그것으로 변환되기 때문에 빠른검색에 유리하다.(원문이 매우 큰 수여도 이를 고정적 길이로 변환시켜줌)
이 경우 원문의 손실이 있기 때문에 해시로 저장한 경우라면 원문으로 복귀 시킬 수 없다.(원문 손실이 이미 있기 때문)
이런 경우 데이터베이스가 털려도 비밀번호는 원문으로 돌아갈 수 없기 때문에 안전하다.
단방향 해시 함수 vs 암호화 알고리즘
- 단방향 해시 함수의 경우엔 단방향이라서 복호화가 불가
- 암호화의 경우엔 암호화와 복호화 작업이 모두 가능
단방향 해시의 문제
- 입력값이 같다면 이에 대응하는 해시값 역시 같은 문제가 발생한다.
단방향 해시의 문제 발생 -> 해결 방안?
1. salt
- 입력값이 같으면 메시지가 같은 경우는 salt를 다르게 주면 이 역시 보완이 가능하다.
2. 키 스트레칭 기법
- 비밀번호에 salt 작업을 하면 해시함수를 돌려서 해시를 만들고 다시 해시 함수를 돌리는 것(해시 함수를 여러번 돌리는 것..)
입력한 비밀번호 다이제스트 생성 -> 생성 다이제스트로 다이제스트(해시)를 다시 생성(여기를 천번~~넘게 돌림, 이때 중요한 것은 여기를 몇번 돌렸는지를 모르게 하는 것..) -> 결과적으로 입력 비밀번호를 해당 반복만큼 돌려줘야 같은 값이 나오기 때문에 동일한 입력에 대한 동일한 출력이 나오는 해시의 문제를 해결 ..
정리
로그인 관련
- 그동안은 심플하게 처리..
- plain text 사용 x
- 원문 참조를 막기 위해서 단방향 해시 함수를 사용해야 한다.
- 이때 그냥 단방향을 쓰면 유추가 가능해지기 때문에 salt와 여러번의 iterator를 사용해서 유추를 못하게 해야한다.
- 또 다른 하나의 로그인에서 알아보아야 할 점..(쿠키와 세션)
- 그간 세션 여부를 보고 로그인 판단을 진행 -> 이 경우 문제?? -> 로그인을 해서 브라우저에 있는 동안에는 유지가 되지만 브라우저를 끄는 순간 세션을 찾을 수는 없다. 서버상에는 존재를 해도 다시 찾아갈 방법이 없다.
- 이를 해결하기 위해서는 쿠키에 세션 id 정도는 남겨주어야 한다.
- 쿠키 expire time = (주지 않으면 브라우저가 살아있는 동안에만 살아 있음) 쿠키에 남아있는 세션 아이디로 다시 접근할 수 있게 해야 한다.
'Back-End > 백엔드 관련 정리' 카테고리의 다른 글
spring security - 필터 (0) | 2022.12.06 |
---|---|
인증(2) - 쿠키와 세션 (0) | 2022.12.05 |
[javascript][open data] - 공공포털 데이터를 사용해보자 (0) | 2022.10.04 |
[자바][다시 개념 정리] - 객체 지향 프로그래밍? (0) | 2022.09.24 |
[자바][List] - 리스트 인터페이스를 사용해 직접 LinkedList 클래스를 구현해보자 (0) | 2022.09.18 |