피로곰's 모두의 프린터

모두의 프린터는 개인, 기업 상관 없이 누구나 무료로 사용가능한 프로그램입니다. 회원가입,카드결제등을 요구하지 않습니다! 광고를 통해 연결되는 사이트에서의 회원가입, 카드결제 피해를 보지 않도록 주의하세요!
반응형

얼마전부터 모두의 PDF(MoPDF)라는 프로그램을 만들어서 오늘 베타 테스트버전도 배포를 시작했습니다만.. 관련 작업을 진행하면서 언젠가 글을 하나 작성하고자 했던 PDF의 패스워드 보안 및 권한체계에 대한 부분을 글로 작성해보도록 하겠습니다.

 

PDF 파일 포맷에는 패스워드를 통한 보안 체계가 존재합니다. RC4 나 AES를 통한 암호화 기능도 지원하고 있구요. 그리고 이러한 보안 체계와 함께 PDF파일을 다룰 수 있는 여러가지 권한(Permissions)을 지정가능한 것도 스펙으로 정해져 있습니다.

 

하.지.만!

 

솔직히 PDF의 보안 및 권한 체계는 헛점이 매우 많이 존재하는게 현실입니다. 

 

우선 가장 첫번째로 일반적으로 패스워드를 통한 데이터 파일의 보안기능이 제공되는 경우에는 해당 패스워드로 데이터 자체를 암호화를 해서 저장하는 것을 전재로 만들어지는 경우가 기본입니다.

 

하지만 PDF에 패스워드라는 개념이 도입된 초반에는 패스워드를 지정하고 패스워드를 모를 경우 PDF를 열어볼 수 없도록 스펙이 정해졌지만 .. 패스워드를 통한 데이터의 암호화가 필수요소가 아니었습니다. 한마디로 스펙에 따라 패스워드가 존재하는 PDF파일은 PDF뷰어들에서 패스워드를 묻고 해당 패스워드가 PDF파일의 패스워드와 일치해야만 내용을 보여준다~ 이런 식으로 동작을 하도록 만든다? .. 

 

하지만 실질 데이터는 암호화가 안되어 있다면 패스워드 부분을 건너뛰고 데이터를 분석해서 보여주는 PDF뷰어가 있거나 패스워드가 포함된 PDF파일의 헤더상의 패스워드정보만 날려버리면 실제 데이터는 암호화가 안되 있으니 패스워드를 몰라도 내용을 볼수 있게 됩니다.

 

이런 이유로 최근의 대부분의 PDF를 생성하는 프로그램들은 패스워드가 지정될 경우에는 해당 패스워드로 실제 데이터의 암호화까지 진행 합니다. PDF에서 지원하는 암호화방식은 RC4와 AES인데 아무래도 보안성은 AES 가 높기 때문에 AES를 사용하는 경우가 많은 편이긴 합니다만 ..

 

그럼에도 불구하고 업데이트없이 배포되는 꽤 많은 프로그램들은 여전히 PDF에 패스워드를 지정해도 내용을 암호화하지 않습니다. 그런 프로그램으로 생성된 PDF파일들은 .. PDF의 패스워드를 없애준다는 각종 사이트나 어둠의 도구들을 통해 아주 쉽게 패스워드 해제가 가능해집니다.

 

애초에 PDF 패스워드가 스펙으로 정해지기 이전이나 패스워드가 일반적으로 쓰여지기 이전에 만들어진 PDF뷰어들의 경우엔 아무 상관없이 막 내용을 보여주기도 하구요.

 

자 그럼 패스워드를 통한 PDF의 암호화는 최소한 최근의 툴들의 경우엔 별 문제가 없어졌다... 정도로 생각하면 되느냐?

 

이제 PDF의 ㅄ같은 패스워드 체계에 대해서 언급해야 겠네요.

 

PDF의 패스워드 보안은 2가지 패스워드 체계를 사용합니다. Owner Password 와 User Password 입니다.. 일반적으로 Owner Password 는 문서를 생성한사람 .. 저작권자? 모든 권한을 가지는 슈퍼유져? 그런정도의 느낌인거구요 User Password 는 Open Password 등으로 내용을 열어 볼수 있는 용도의 패스워드 .. 그러니까 읽기전용 패스워드 그런 느낌으로 생각하시면 됩니다.

 

기술적인 부분에 조금 관심이 있으신 분들은 눈치 채셨을수 있는 부분인데.. 

 

하나의 파일에 2개의 패스워드?

 

여기서 모든 ㅄ같은 문제가 발생 합니다. 왜냐면 2개의 서로 다른 패스워드로 하나의 파일을 암호화는 하되 둘중 어느 하나만으로도 암호화된 데이터를 복호화 하여 데이터를 사용할 수 있어야 한다? 일반적으로 사용되는 압호화 알고리즘들에선 이런식으로 동작하는 알고리즘은 없습니다. 물론 Public Key , Private Key 등으로 동작하는 알고리즘은 있습니다만.. 최소한 RC4 나 AES256 같은 암호화 알고리즘은 동일 데이터를 2개의 패스워드로 암호화 한 후 둘중 하나만 알아도 내용을 복호화 할 방법은 없습니다.

 

만약 이를 가능하게 하려면 동일한 데이터를 2벌 만들어서 하나는 Owner Password 로 하나는 User Password로 저장해서 다루면 가능할수 있겠지요. 하지만 그러면 동일 데이터를 2벌을 저장해야 하니 용량이 2배로 늘어나게 됩니다. 

 

이런 문제가 있다보니 PDF의 암호화는 User Password로 보통 암호화를 합니다. 엇? User Password??? ㅋㅋㅋ

정확히는 좀더 복잡한 단계가 존재하지만 .. 결론적으론 User Password 로 암호화 한다고 보는게 맞습니다. ㅎㅎ  

위에 User Password가 일반적으로 Open Password, 내용을 열어 볼수 있는 용도의 읽기전용 패스워드 같은 느낌이라 했지요? 근데 사실상 모든 짓이 가능해야할 것은 Owner Password를 알아야만 가능해야 하고 User Password로는 내용을 보기만 하거나 PDF에 지정된 Owner Password로 지정한 권한에 해당하는 행위만이 가능해야 하는게 맞는데 말이죠. 그런 이유로 2개의 패스워드를 존재하게 한것입니다만.

 

2개의 패스워드를 모두 써서 암호화가 가능한게 아니니 .. 암호화는 해야 되겠고 .. 일단 User Password를 알면 내용은 보여줘야 하니 .. 암호화는 User Password를 쓰고 있는겁니다.

 

이 상황을 좀더 풀어서 말씀 드리자면 ..

 

1. Owner Password 있음, User Password 없음

패스워드 없이 PDF를 열어 볼 수 있습니다 Owner Password가 존재하지만 User Password는 없기 때문에 실제 데이터는 암호화가 되어 있지 않습니다. 실제로 이러한 PDF파일에 출력불가나 복사불가 추출불가등의 권한을 설정 했다 하더라도 User Password 가 없기 떄문에 데이터는 암호화 되어 있지 않고 권한에 관한 데이터를 맘대로 수정할 수도 있으며 실제로 대부분의 PDF관련 프로그램들에선 User Password 가 없는 PDF는 아무런 제약없이 Owner Password를 비롯 각종 권한을 날리는게 가능 합니다.

 

2. Owner Password 있음, User Password 있음

User Password를 모르면 PDF 를 열어 볼수 없습니다. User Password만 안다 해도 근본적으론 Owner Password 모르면 권한 설정등을 변경하지 못해야 하는게 당연하지만.. 앞서 설명했듯이.. PDF의 암호화는 뭐로 한다? User Password로 한다! .. 이미 User Password를 알고 있기 때문에 .. 맘대로 권한조정, 패스워드 날리기가 가능합니다. 물론 스펙을 지켜 만든 뷰어 프로그램들에선 User Password 만 알 경우엔 인쇄, 복사 등 제한된 권한에 대한 기능은 동작하지 않을테지만 .. 그런걸 무시하고 만들어진 프로그램들에선 그냥 다 뚤린다는 겁니다.

 

 Owner Password가 없이 User Password 만 있는경우도 똑같은 소리죠 결국은 PDF파일의 암호화는 User Password를 알면 끝이란 소립니다.

 

Owner Password만 설정 하고 User Password는 없이 권한설정을 해서 ..

 

이렇게 권한 설정을 했다 하더라도 .. 스펙을 잘 지켜준 PDF 뷰어들의 경우엔 .. 컨텐츠를 복사도 못하고 인쇄도 못하고 주석을 달거나 서명도 못하고 .. 이미지나 텍스트등을 추출도 못할겁니다. 

 

하지만 Smallpdf 같은 사이트나 .. 각종 커맨드라인 툴을 비롯해서 .. PDF의 권한이나 패스워드를 설정, 변경해주는 기능을 해주는 프로그램을 사용할경우 User Password 가 비어있거나 User Password 를 알고 있는 경우 Owner Password 는 아무 의미가 없어집니다.

 

애초에 .. 목표한 의도는 무엇인지 잘 알겠지만 2개의 패스워드가 존재한 순간 어쩔수 없는 일이 되어버린 것이지요.

 

많이들 쓰시는 Smallpdf 에서의 패스워드 해제기능을 예를들어 보자면 ..

 

PDF 패스워드에 헛점이 있다는걸 알기 때문에 이런 안내사항도 보여주는 겁니다. 잘못하면 본인들이 해킹툴 취급을 당할수 있으니까요.

 

업로드한 파일은 User Password, Owner Password 가 둘다 설정된 PDF 파일입니다. AES256으로 암호화 되어 있구요.

 

두 패스워드가 다 설정되어 있기 때문에 .. 이 PDF 파일은 패스워드를 모르면 해제할 방법이 없습니다. 게다가 aes256 으로 암호화가 되어 있으니 .. 위 설명대로 정말 백만 년이 걸릴수도 있겠지요.

 

이런경우 Owner Password 나 User Password 둘중 하나라도 모르면 해제할 방법이 없습니다. 

 

두번째로 Owner Password 만 설정된 파일로 시도해 보겠습니다.

 

바로 해제 되었습니다 ㅎㅎ ..

 

한마디로 PDF의 패스워드의 권한 설정이라 하는 것은 Owner Password 와 User Password 를 둘다 지정하지 않으면 Smallpdf 같은 사이트에서 바로 뚫어버릴 수 있으며.. 이 경우에도 User Password를 알경우엔 지정된 권한을 무효화 시킬수 있다는 겁니다. 

 

물론 일반적인 PDF뷰어로는 불가능하지만 .. 저런 웹사이트나 여러 툴들을 통해 가능한 일이라는 것이지요.

 

한마디로 현재로써는 PDF의 보안기능은 나 외에는 다른 누구도 보게 하고 싶지 않을때 아무나 내용을 못열어보게 하고 싶을때 두 패스워드를 전부 설정해서 나만 보는 용도로 쓰거나 ..

 

User password 를 없이 만들던 있이 만들던간에 애초에 작성자가 허용한 권한이 존재하고 그 권한은 인위적으로 무시하고 변조하여 사용을 한 경우엔 책임을 물을 용도로 .. 작성자의 배포 의도를 어필하는 정도 이상의 의미는 기대하기 힘들다고 보시면 됩니다.

 

PDF 1.8 이 나오게 되면 얼마나 변하게 될진 알수 없습니다만.

 

혹시라도 Acrobat Pro 나 기타 PDF 편집 프로그램에서 .. 패스워드와 권한설정등으로 내가 만든 PDF의 내용이 보호되고 있다고 생각하신다면 .. 아닙니다! 

 

쉽게 복사하거나 추출하는 등의 행위를 방지하고 싶으시다면 PDF IMAGE 형식이나 워터마크등을 동원하여 더 적극적으로 내용을 보호하셔야 합니다.

 

그런 이유로 고스트스크립트의 경우에도 PDF에 패스워드를 지정하는 경우 Owner , User 패스워드 두개를 다 설정하고 있습니다 모두의 PDF도 일단은 그런 방향으로 잡고는 있습니다만.. 조금 더 고민할 부분은 있을것 같군요 ..

 

이상입니다.

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band