매일 업데이트
2022-11-15 23:28 8 min

중요한 용어 개발자가 알아야 할 사항

데이터 보안: 개발자가 알아야 할 필수 용어

데이터 중심 사회로 진화하면서, 사용자 데이터를 안전하게 관리하는 것이 매우 중요해졌습니다. 개발자로서 우리는 복잡하고 취약한 시스템을 다루면서, 사용자 경험을 UI 및 백엔드로 구현해야 하는 어려움에 직면합니다. 여기에 데이터 보안이라는 중요한 고려 사항이 추가됩니다. 이는 사용자 데이터를 오용할 경우 발생하는 고객 불만과 정부 및 기업의 규정 준수 요구 사항 때문입니다.

데이터 보안 책임의 분산

보안을 더욱 복잡하게 만드는 것은 여러 계층의 보안이 존재하며, 책임 소재가 명확하지 않다는 것입니다. 최신 클라우드 환경에서는 개발자, 데이터베이스 관리자, 시스템 관리자(DevOps), 백오피스 사용자 등 다양한 팀이 데이터의 흐름을 직접 제어합니다. 각 팀은 데이터 보안을 다른 팀의 문제로 치부할 수 있습니다. 하지만 실제로는 데이터베이스 관리자는 애플리케이션 보안을, DevOps 직원은 백오피스 접근을 제어할 수 없는 등 각자의 영역에서 책임져야 할 부분이 있습니다.

개발자의 역할과 데이터 보안

개발자는 데이터 접근 측면에서 가장 넓은 영역을 담당합니다. 앱의 모든 부분을 구축하고, 다양한 백엔드 서비스에 연결하며, 데이터베이스를 읽고 쓸 수 있는 권한을 가집니다. 개발자가 만든 앱은 시스템 전체에 접근할 수 있으므로, 소스 코드 수준에서 보안 취약점이 발생할 가능성이 높으며, 이는 개발자의 직접적인 책임입니다.

데이터 보안은 복잡하고 깊이 있는 주제이므로, 하나의 게시글로 모든 것을 다룰 수는 없습니다. 하지만 개발자가 앱을 안전하게 유지하기 위해 알아야 할 필수 용어들을 소개하고자 합니다. 이를 앱 데이터 보안 기초라고 생각해주시면 됩니다.

그럼 시작해 보겠습니다!

해싱

해싱은 데이터를 읽을 수 없는 다른 형식으로 변환하는 과정입니다. 예를 들어, 널리 알려진 Base64 인코딩을 사용하여 "내 비밀은 안전한가요?"라는 문자열을 "SXMgbXkgc2VjcmV0IHNhZmUgd2l0aCB5b3U/"로 변환할 수 있습니다. 이러한 데이터 스크램블링은 웹 앱에서 비밀번호나 신용카드 번호를 저장할 때 사용됩니다. 해싱의 목적은 데이터 유출 시 공격자가 암호나 신용카드 번호 등을 사용하여 실제 피해를 입힐 수 없도록 하는 것입니다.

암호 해싱은 단방향 해싱 기술을 사용합니다. 즉, 데이터는 스크램블할 수 있지만 다시 해독할 수는 없습니다. 그렇다면 로그인 시 앱이 비밀번호를 어떻게 확인할까요? 앱은 사용자가 입력한 비밀번호를 동일한 해싱 과정을 거쳐 데이터베이스에 저장된 해시 값과 비교합니다. 값이 일치하면 로그인이 허용됩니다.

해시에 대한 또 다른 흥미로운 점은, 소프트웨어나 파일을 다운로드할 때 파일이 손상되지 않았는지 확인하라는 지시를 받았을 가능성이 있다는 것입니다. 다운로드 페이지에서 제공되는 해시 문자열과 다운로드한 파일의 해시 값을 비교하여 파일의 무결성을 확인할 수 있습니다. 이러한 해시 값은 SHA256 알고리즘과 같은 알고리즘을 사용하여 생성됩니다. 만약 두 해시 값이 다르다면, 다운로드 과정에서 파일이 손상되었거나 악의적으로 변경되었을 가능성이 있습니다.

암호 해싱에서 자주 언급되는 이름은 MD5(현재는 안전하지 않음), SHA-1, SHA-2(SHA-256 및 SHA-512 포함) 등이 있습니다.

솔팅

보안은 공격자와 방어자 간의 끊임없는 싸움입니다. 해시만으로는 공격자가 암호를 추측하거나 해독하는 것을 완전히 막을 수 없기 때문에 솔팅이라는 개념이 도입되었습니다. 솔팅은 해시를 생성할 때 원래 데이터에 임의의 문자열을 추가하여 해시 값을 더욱 복잡하게 만드는 방법입니다. 이렇게 하면 공격자가 해시 값만으로 암호를 추측하기 어려워집니다.

예를 들어, 비밀번호 "superman009"를 해시할 때 먼저 무작위 문자열인 "소금"을 추가한 후 이 조합을 해시합니다. 이렇게 하면 생성된 해시 값이 표준 해시 값 구조에서 벗어나 지능적인 역추적이나 추측을 더욱 어렵게 만듭니다.

해싱과 솔팅은 매우 복잡한 분야이며, 끊임없이 발전하고 있습니다. 개발자로서 우리는 이러한 기술을 직접 다루지는 않지만, 이에 대한 이해는 더 나은 결정을 내리는 데 도움이 될 수 있습니다. 예를 들어, 오래된 PHP 프레임워크에서 MD5 해시를 사용하여 암호를 저장하는 것을 발견했다면, 새로운 암호 라이브러리를 도입해야 할 시점임을 알 수 있습니다.

암호화에서 "키"는 데이터를 암호화하고 해독하는 데 사용되는 비밀 값입니다. 지금까지 살펴본 해싱은 데이터를 되돌릴 수 없게 변환하는 단방향 암호화 방식입니다. 그러나 일상적인 사용에서는 데이터를 안전하게 전송하거나 저장하면서도 필요할 때 읽을 수 있어야 합니다. 이를 위해 암호화는 키를 사용하여 데이터를 암호화하고 해독합니다.

데이터 소유자는 키를 사용하여 데이터를 뒤섞습니다. 이 키가 없으면 암호화 알고리즘이 아무리 강력하더라도 데이터를 해독하는 것은 불가능합니다.

키 순환

키는 암호화의 핵심 요소이지만, 비밀번호처럼 위험 요소도 가지고 있습니다. 키가 노출되면 모든 보안이 무너질 수 있습니다. 따라서 키를 주기적으로 변경하는 키 순환이 필요합니다. 특히, GitHub와 같은 서비스에서 오래된 코드가 노출되면, 그 코드에 포함된 암호화 키도 함께 노출될 수 있습니다. 키 순환은 이러한 위험을 줄여줍니다. 신뢰할 수 있는 클라우드 PaaS 제공업체는 자동화된 키 순환 서비스를 제공합니다.

이미지 출처: AWS

예를 들어 AWS는 AWS KMS(Key Management Service)를 통해 키 순환을 자동화할 수 있습니다. 이러한 자동화된 서비스는 서버 간 키 변경 및 배포를 간소화하여 대규모 시스템에서 보안을 유지하는 데 필수적입니다.

공개 키 암호화

키 관리가 번거롭다고 생각될 수 있지만, 공개 키 암호화 덕분에 온라인에서 안전하게 통신하고 거래할 수 있게 되었습니다. 공개 키 암호화는 수학적 돌파구를 통해 인터넷이 안전하게 유지될 수 있도록 한 중요한 기술입니다. 알고리즘의 세부 사항은 복잡하지만, 간단히 말해 공개 키 암호화는 두 개의 키를 사용합니다: 개인 키와 공개 키입니다.

이미지 출처: Electronic Frontier Foundation

개인 키는 비밀로 유지해야 하며 누구와도 공유해서는 안 됩니다. 공개 키는 공개적으로 게시되며, 데이터를 보낼 때 사용됩니다. 데이터를 암호화하려면 수신자의 공개 키를 사용하여 암호화해야 하며, 암호화된 데이터는 개인 키와 공개 키 조합을 통해서만 해독할 수 있습니다. 이 시스템의 장점은 개인 키를 공유하지 않고도 안전하게 데이터를 전송할 수 있다는 것입니다. 또한 메시지를 가로채는 사람이 수신자의 공개 키를 가지고 있더라도 메시지를 읽을 수 없습니다.

공개 키 암호화의 기반에는 큰 소수를 인수분해하는 것이 매우 어렵다는 수학적 원리가 있습니다. 따라서 키가 충분히 크면 수천 년이 지나도 암호를 해독할 수 없을 것입니다.

TLS (전송 계층 보안)

공개 키 암호화는 HTTPS의 기반이 됩니다. 브라우저와 서버는 서로의 공개 키를 사용하여 HTTP 트래픽을 암호화하고, 보안 HTTP(HTTPS) 연결을 설정합니다. 이를 통해 웹 페이지와 같은 데이터를 안전하게 주고받을 수 있습니다.

이미지 출처: Mozilla

OSI 모델은 데이터 암호화에 대해 구체적으로 언급하지 않지만, 데이터가 전송 계층으로 전달되기 전에 애플리케이션 계층에서 암호화되고, 수신자 측에서 해독됩니다. 전송 계층이 이 과정에 포함되기 때문에 "전송 계층 보안"이라는 이름이 붙었습니다. SSL(Secure Socket Layer)이라는 용어도 사용되지만, 이는 TLS의 이전 버전이며 현재는 TLS로 대체되었습니다.

전체 디스크 암호화

매우 높은 수준의 보안이 요구되는 경우, 데이터가 전송될 때뿐만 아니라 저장되어 있을 때도 보호해야 합니다. 전체 디스크 암호화는 하드 디스크 전체를 암호화하여 물리적 침해 시에도 데이터를 안전하게 유지합니다. 이는 정부 서버와 같이 매우 민감한 데이터를 저장하는 시스템에 필수적입니다.

전체 디스크 암호화는 하드웨어 수준에서 수행되어야 합니다. 하드 디스크 전체가 암호화되면 운영 체제도 암호화되어 부팅할 수 없기 때문입니다. 따라서 하드웨어는 디스크 내용이 암호화되어 있다는 것을 이해하고, 운영 체제에 요청된 디스크 블록을 전달할 때 즉시 해독해야 합니다. 이러한 추가적인 작업으로 인해 읽기/쓰기 속도가 다소 느려질 수 있다는 점을 고려해야 합니다.

종단 간 암호화

최근 대규모 소셜 네트워크에서 개인 정보 보호 및 보안 문제가 계속 발생하면서, "종단 간 암호화"라는 용어는 일반인들에게도 익숙해졌습니다. 종단 간 암호화는 데이터가 생성, 저장 또는 전송될 때 앱에서 암호화하는 방식으로, 데이터가 수신자의 기기에 도달할 때까지 안전하게 보호됩니다.

이미지 출처: Google

종단 간 암호화는 공개 키 암호화와 같은 수학적 보장을 제공하지는 않습니다. 표준 암호화처럼 비즈니스와 함께 키가 저장되지만, 비즈니스가 보안을 어떻게 설정하느냐에 따라 메시지의 안전성이 결정됩니다.

결론

이 글에서 다룬 대부분의 용어는 이미 들어보셨을 것입니다. 하지만 이러한 개념을 다시 한번 검토하고, 데이터 보안에 대한 인식을 높이는 계기가 되기를 바랍니다. 앱 데이터 보안은 단 한 번의 승리로 끝나는 것이 아니라, 매번 이겨야 하는 싸움입니다. 단 한 번의 보안 실패로 인해 산업 전체, 경력, 심지어 생명까지 파괴될 수 있기 때문입니다.

저자
Korea

기술 트렌드와 실용적인 팁을 전하는 लेखक입니다.