양자내성암호와 보안
양자컴퓨터의 개발과 보안의 두려움
양자컴퓨터는 고전컴퓨터와 달리 양자의 중첩을 이용해 동시에 여러 경우를 계산할 수 있는 점이 특징이다.
2개의 비트가 있다면 고전컴퓨터는 [00, 01, 10, 11] 4개의 경우 중 하나를 골라 계산하지만 양자컴퓨터는 4개의 경우를 중첩하여 계산 후 가장 확률이 높은 경우를 골라낸다.
양자의 중첩을 이용해 각 경우를 확률로 존재하는 상태에서 가장 높은 확률을 가진 경우를 찾아내는 것이다.
수조에 여러 개의 모래성을 쌓은 뒤 물을 채우면 가장 높은 성이 마지막까지 잠기지 않는 것과 같이 확률이 높은(높이가 높은) 경우를 남기고 나머지는 지우는(물속에 가라앉히는) 과정이다.
양자컴퓨터를 이용한 암호 풀이
양자컴퓨터를 이용하면 기존의 비대칭 암호를 풀이하는 시간이 매우 짧아지는 점이 양자내성암호를 개발해야하는 이유다.
고전컴퓨터를 기준으로 고안된 비대칭 암호는, 공개키와 비밀키를 사용하여 공개키 정보로부터 비밀키를 알아내기 위해서 매우 오랜 시간이 필요한 함수를 사용한다.
하지만 양자컴퓨터는 다양한 경우를 한 번에 계산하여 가장 확률이 높은 경우를 찾아내기 때문에, 비밀키를 알아내기 위해 필요한 연산 시간이 기하급수적으로 짧아진다.
양자컴퓨터로 풀기 어려운 암호
다양한 경우를 동시에 연산할 수 있는 양자컴퓨터의 특징에도 불구하고 모든 문제를 해결할 수 있지는 않다.
현재 양자내성암호로 가장 활발히 개발중인 암호는 격자 기반 암호인데, 이 암호는 격자 데이터 안에 비밀 정보를 숨겨서 전달하는 방식이다.
단순히 모래 속에 진주알을 숨기는 암호라면 양자컴퓨터가 쉽게 진주알(비밀 정보)의 특징을 찾아낼 수 있지만, 격자 기반 암호는 모래알에 쓰레기를 섞어 진주알을 찾기 어렵게 만든다.
기술적으로는 격자를 비틀어서 격자의 규칙성을 어긋나게 만드는 것이다.
격자를 비트는 노이즈로 인해 양자컴퓨터는 다양한 경우를 동시에 연산해도 월등히 높은 확률을 가지는 특정한 경우를 찾기 어려워진다.
비밀 정보는 격자의 규칙에서 살짝 옮겨진 곳에 저장되는데, 원래 격자 규칙을 안다면 비밀 정보가 규칙과 다른 것을 알 수 있지만 격자가 비틀린 상황에서는 규칙을 유추하기 어렵고, 규칙을 찾더라도 비틀린 정보들로 인해 진짜 비밀 정보가 아닌 정보들도 규칙에 맞지 않아 보여 비밀 정보를 찾기 위해 수 많은 후보군을 다시 검토해야 한다.
양자내성암호의 사용 분야
양자내성암호가 개발되어도, 모든 암호를 양자내성암호로 대체하지는 않는다.
우리가 많이 사용하는 https를 예로 들면 가장 처음의 터널 생성 과정에서 클라이언트와 서버가 공유하는 대칭키 전달 과정에서 양자내성암호를 이용한 뒤, 이후의 통신에는 대칭키 암호를 이용한다.
대칭키 전달에만 양자내성암호를 사용하는 이유는 비대칭 암호와 달리 대칭키 암호 방식은 양자컴퓨터가 유추하는데에 오랜 시간이 필요하기 때문이다.
비대칭 암호는 공개키가 비밀키를 유추할 수 있는 힌트가 되지만, 대칭 암호는 아무런 힌트 없이 256개 이상의 문자열 조합을 맞춰야 한다.
문자열 조합의 정답 여부는 실제 데이터를 복호화 시도해야 알 수 있기에 양자컴퓨터의 장점인 동시에 연산을 하지 못하고 한 번에 하나씩의 경우를 대입해야 한다.
데이터베이스에 양자내성암호 적용
데이터베이스에 저장된 데이터 역시 양자컴퓨터를 이용한 공격에 대비해 보안을 강화해야 한다.
데이터를 암호화하여 저장하고, 필요 시 복호화하여 사용하는 현재 방식과 크게 다르지 않은데, 복호화를 위한 키를 양자내성암호로 보호한다.
같은 서버 안에서 복호화 키를 보관하면 서버 공격 시 데이터베이스와 함께 복호화 키도 탈취하여 데이터 보호에 실패할 수 있다.
서버 공격에 대비하기 위해 복호화 키를 데이터베이스와 격리된 다른 서버에 보관하여 필요 시 데이터베이스 서버로 정보를 전달하도록 한다.
양자내성암호는 복호화 키 전달 시 이용된다. 복호화 키가 통신 과정에서 유출되지 않도록 보호하여 서버 간 통신을 암호화한다.
데이터베이스는 복호화 키를 저장하지 않고, 필요 시 서버에 요청 후 바로 삭제해 복호화 키를 보호한다.