보통의 데이터들은 하나의 테이블에 넣어두고, join등을 통해 Query 한다.
하지만 하나의 테이블에 수십만건 이상의 데이터가 쌓이면 성능상/유지보수상의 문제가 생긴다.
특히 로그를 쌓거나 이력 관리하는 DB는 일정 주기로 테이블을 생성하여 백업한다.

아래 쿼리는 월 주기로 테이블을 생성하고, 일정 주기가 지나면 테이블을 drop 하는 SP이다.
아무래도 현행법상 개인정보 등을 이유로 로그 보존 기간이 있으므로, 해당하는 기준에 맞게 자료를 삭제하면 된다.

그리고, 매번 수동으로 SP를 호출하기 힘들기 때문에, MariaDB에서 제공하는 EVENT SCHEDULER 기능을 사용하면, 주기적으로 실행할 수 있다.



이전 포스트에서는 MariaDB를 활용한 암호화 하는 방법을 소개했다.


이렇게 생성된 패스워드를 사용하는 방법 중, 시스템 간에 API호출할 때 패스키로 사용할 수 있다.

다시 말해서 파라미터를 전달할 때, 암호화된 키를 같이 전달함으로써 상호간에 인증된 시스템이라는 것을 확인할 수 있다.


단방향 암호화인 경우에는 단순히 해시값을 비교할 수도 있으며,

양방향 암호화인 경우에는 사전에 약속된 암호화Key를 사용하여 복호화하고, 비교해볼 수 있다.


위 두가지 케이스에 대해서 보통은 API를 만들고, 그것을 호출해서 사용한다.

하지만 API를 사용하기 힘든 환경이거나 굳이 API를 위해서 별도의 서비스가 부담스러울 경우에는 DB에서 SP (Stored Procedure)를 호출하여 사용할 수 있다.


Input값에는 암호화에 사용되었던 Parameter들과 암호화된 String이 대입된다.

Output은 암호가 맞는지 틀린지에 대한 Boolean 값이 리턴되며, false는 0으로, true는 1로 표시된다.


아래 예시는 3개의 Parameter를 사용한 MD5 암호화이며, 내부 로직만 바꾸면 다른 암호화로 대체할 수 있다.


3개의 파라미터를 사용하는 SP 생성문



SP 호출 예제 




회사에서 보안이라고 하면 가장 기본적인 것이 데이터 암호화라고 할 수 있다.

이 암호화라는 것이 사용 목적에 따라 다른 방법을 사용해야 한다.


암호화를 크게 구분하자면, 복호화가 가능한지의 여부에 달라진다.

다시 말해서, 암호를 만들었는데, 이를 다시 평문으로 되돌릴 수 있는지에 다르다.

주로 패스워드는 단방향 암호화를 사용한다.

중요하지 않은 정보들은 암호화 하지 않는 경우가 많고, 보안적으로 껄끄럽거나 중요한 정보(개인정보 등)은 양방향 암호화를 한다.

물론, 복호화가 불가능한 알고리즘이라고 하더라도, 알고리즘별로 보안적 이슈가 존재한다.


단순히 생각해서, 모든 암호화 알고리즘을 강력한 것으로 사용하면 좋을까?

당연히 보안성 측면에서는 좋다. 하지만, 실용성에서는 큰 무리가 따른다.

예를 들어, 실시간성이 보장되어야 하며, 높은 TPS (Transaction Per Second)가 요구되는 시스템에서는 강력한 알고리즘을 사용하기에는 큰 비용이 요구된다.

따라서 보안 레벨과 실용성에 맞는 적절한 암호화 적용이 필요하다.



암호화를 실제로 사용하기 위해서는

1. DBMS에서 제공하는 알고리즘 사용

2. (Application 또는 Server Side에서) Library 사용

3. 직접 구현 (올ㅋ)

의 방법이 있을 것이다.


상황별로 차이가 있겠지만, 

1번의 경우에는 데이터 저장,

2번의 경우에는 네트웍 구간에서의 적용이 주된 목적일 것이다.



앞 이야기가 길었는데, 제목과 같이 1번에 해당하는 암호화 방식을 '간단한' 방식으로 소개한다.



1. MD5


허무할 정도로 간단하다.

다음 것도 그렇다.


2. SHA2

SHA256


SHA 512


3. AES128

MariaDB에서는 기본적으로 AES128 암호화 방식을 지원한다. Rijndael 이라는 수학자가 제시한 알고리즘을 사용하고 있으므로, Rijndael의 이름을 가진 라이브러리를 사용하는 경우가 많다.

AES도 두가지 종류가 있는데, ECB와 CBC 방식이다.

CBC 방식은 IV (initialization vector)라는 값을 사용한다는 차이가 있다.

(MariaDB에서 제공하는 방식은 ECB 이다.)

앞의 두가지 방식은 단방향 암호화이며, AES128은 양방향 (복호화가 가능한) 암호화이다.


앞에 입력한 것이 암/복호화 대상 String 이며, 뒤에 있는것이 암/복호화에 사용되는 Key 이다. (Key는 보관을 잘 해야겠지)

-암호화

-복호화



+ Recent posts