목차


해시를 통한 이미지 워터마크 시스템 제안

개요

본 제안서는 이미지의 일정 영역을 마스킹 처리하고, 이러한 이미지의 개인 소유를 구분하기 위한 마스킹 작업과 함께 관련 식별정보를 남기는 시스템을 제안하고자 한다. 해당 시스템에서는 이용자가 이미지를 업로드하면, 이미지에서 고유 코드와 같은 개인정보 영역을 지우고 해당 파일의 소유자만이 재현할 수 있는 방법을 통해 해당 이미지의 신뢰성을 향상시킴과 동시에 및 악용을 방지할 수 있는 시스템을 제안하고자 한다.

문제인식

인터넷 상에서 업로드된 이미지의 경우, 종종 그 이미지에 대한 소유권 문제 및 이용허락과 관련된 문제가 존재할 수 있다. 예를 들어, 본인이 창작한 그림의 경우 개인 서명을 이미지에 남겨 이를 보호하고자 한다. 그리고 이미지의 경우 불특정 이용자들에게 악용되고 왜곡되는 경우가 있는데 이는 원 제작자가 의도하지 않은 방향으로 흘러갈 수 있다. 예를 들어, 중고거래 플랫폼에서는 판매 게시글을 작성할 때 자신의 소유임을 확인할 수 있는 관련 사진을 업로드하여 신뢰성을 확보하는 용도로 이용한다. 하지만 일부 이용자는 이러한 이미지만을 이용해 자신이 물건이 있는 척 기망하고자 하는 용도로 이용이 될 수 있다.

또한, 일부 이미지의 경우 개인정보가 기재된 부분이 있는데 이를 가리지 않고 그대로 이용하고자 하는 경우 개인정보 노출로 인한 곤란한 사정에 처하는 경우가 종종 있다.

이러한 문제를 해결하기 위해, 이미지에 자체적인 워터마크를 기재하고, 이미지에서 개인정보 부분을 마스킹하는 시스템을 통해 다른 이용자가 파일의 이용을 왜곡하는 것을 제한하고자 한다.

주요 기술

hash

해시의 경우 어떠한 데이터에 대하여 단방향으로 값을 내보낼 수 있도록 하는 기술이다.

예를들어 2024.png 라는 텍스트 데이터에 대하여 SHA-256 방식으로 해싱을 하면 89F3DF4002C45EAEF7C10BC81255C23A98A3973D73D56F20B9A5814A8ED76B49 라는 값이 나오게 되는데, 이 값을 역방향으로 하는 경우 2024.png 라는 값을 알아내기 어렵도록 한 기술이다. 여기서 중요한 점은 해시는 파일의 크기가 어떻든 대체로 일정한 크기의 값이 나온다는 점이다. 만약 텍스트 데이터가 “2024.png4985132” 이라면 해시의 값은 06A888D0A62889C0B3722A2E8A29C357C342333114E40DF938709BA88CC061A9 이 나오며, 파일의 크기에 비례하여 값이 커지지 않기 때문에 일정한 값을 낼 수 있는 장점이 있다.

임의의 길이의 데이터를 고정된 데이터로 변환할 수 있는 장점으로 인해, 파일 위변조 여부를 확인하기 위해 해시를 이용하게 된다. 예를들어, linux의 패키지 저장소의 경우 MITM(man in the midde)공격 등으로 파일의 변조가 있었는지의 여부를 확인해야 하는데 공개 저장소에 기재된 해시 값이 다운로드 받은 해시 값과 다르다면, 변조된 파일임을 확인할 수 있다. 간혹 SSD의 하드웨어적 오류를 검출하는 용도로도 사용이 가능하다. ( https://gigglehd.com/gg/bbs/15144059 )

실행방안

웹 페이지를 통해 이미지를 업로드할 때, 이미지 파일의 악용을 제안하기 위해 해당 파일에 몇 가지 정보를 추가할 수 있도록 한다.

노란색 테두리를 원본 이미지라고 했을 때, (1) 영역에서는 원본 이미지를 통한 해시 값을 이미지 내용에 첨부한다. 필요에 따라 이러한 패턴의 정보를 몇 가지 더 추가하는 방식으로 이용이 가능할 것이다. (2) 영역은 개인정보 영역으로, 해당 영역만 삭제하거나, 비식별화 할 수 있도록 해야 한다. (3) 영역은 해시 값이 가지는 특성상 일정 숫자나 정보에 대해 사람이 검색하거나 확인하기 어렵게 되어 있으므로 원본이 이미지라는 점을 반영하여 (1)에 추가된 정보에 대해 OCR이 가능하거나, 관련 정보를 추가하는 short-link 를 첨부하여 사람이 이를 다루기 쉽도록 한다.

.NET ASP 기반 웹 페이지

해당 시스템은 구조 상 이미지 업로드 - 이미지 파일 결과 출력, 이미지의 업로드 정보에 대한 데이터베이스 페이지 정도의 구조를 가질 것이므로 복잡한 형태의 페이지를 지양하고, 간단한 형태로 만들 수 있는 것을 가정해야 할 것이다. 이를 위해 .NET ASP 기반으로 작성하여 기본적인 Razor Page를 작성해야 할 것이다.

python 이미지 처리

파일 업로드에 대한 간단한 웹 페이지를 작성한 다음, 이미지 프로세싱에 대하여는 python 기반으로 수행할 수 있도록 해야 할 것이다. 본 프로젝트에서 이미지 처리 방식은 여러 방법이 존재할 수 있는데, 작업 특성상 속도를 중요시 하지 않고, 해당 이미지 처리 부분은 다른 용도로 재사용성이 있는 형태로 제작하여 향후 관련 기술이 필요한 경우 이를 이용할 수 있을 것이다.

salt 추가

( https://ko.wikipedia.org/wiki/%EC%86%94%ED%8A%B8_(%EC%95%94%ED%98%B8%ED%95%99) )

파일 업로드 시 사용자가 임의로 설정 가능한 salt 값을 추가하여 이를 통해 의도치않은 파일 유출, 혹은 동일한 이미지를 제작하여 악용하는 경우에 대한 보완책으로 기능할 수 있도록 하면 더 높은 수준의 보안을 확보할 수 있을 것이다. 단, salt 값에 대해서는 사용자가 다른 환경에서도 원본 파일읕 통해 이미지에 기재된 hash 값의 재현이 가능할 수 있도록 해야 하기 때문에 사이트에서 임의로 설정하지 않고 사용자에게 암호 형태로 입력받도록 해야 할 것이다.

위험요소

본 프로젝트에서는 구조적인 문제와 개발상에 문제가 예상되는 부분이 존재한다. 다음과 같은 부분을 주의하여 시스템 개발을 진행해야 할 것이다.

  • 이미지 처리 프로세스로 인해 걸리는 시간이 문제가 될 수 있다.
  • 웹 페이지 영역이 C# .NET ASP 이므로, python으로 작동하는 이미지 처리 영역을 어떻게 진행해야 할 지에 대해 구체적인 설정 및 동작 방식에 대하여 장단점을 파악하고 이를 구현해야 할 것이다.
  • 이미지 업로드 파일에 대한 short-link 기능을 제공하고자 하는 경우, 관련 네트워크 트래픽이 유의미한 수준으로 발생할 수 있다. 어플리케이션 외적으로 부하 분산등의 기능을 추가해야 할 것이다.