오픈 소스 프로젝트에서 기밀 데이터를 숨기려면 어떻게해야합니까?


13

여러 파일 호스트 중 DropBox에 파일을 업로드하는 오픈 소스 프로젝트가 있습니다. 지금은 DropBox의 화면 스크래핑입니다. API를 사용하려면 OAuth 인증을 위해 제공 한 보안 키를 하드 코딩해야합니다. 그러나 누군가가 볼 수 있도록 키가 명확하게 보이는 경우 키가 비밀로 유지되지 않을까 걱정됩니다.

악의적 인 누군가가 내 키를 사용하여 PC (데스크톱 동기화가 활성화 된 경우)와 다른 사람의 PC ( 폴더를 공유했습니다) 등. :영형

나는 대답이없는 질문 을 찾았습니다 .

그러나 오픈 소스 프로젝트에서 기밀 데이터를 숨기는 방법을 일반적으로 알고 싶습니다.

한 가지 아이디어가 있습니다.

  • "<SECRET KEY HERE>"와 같은 소스 코드에 자리 표시자가 있고 릴리스를 위해 바이너리를 빌드 할 때만 채우십시오. (왝!)

괜찮은 아이디어가 있습니까?


1
정말 안전한 유일한 방법입니다. pgp 암호화를 사용하여 비밀 키를 인코딩 한 다음 해독 만 할 수는 있지만 키를 게시하는 데 방해가되는 이유는 무엇입니까?
프레스콧

programmers.stackexchange.com/questions/180957/… 이 질문을 확인하고 싶을 수도 있습니다 -DropBox API 키에 관한 것이 아니라 일반적인 메시지는 동일합니다.
tdammers

git-crypt는 당신을 위해 만들어졌습니다 :) github.com/AGWA/git-crypt
nha

답변:


14

기본 아이디어는 코드 또는 컴파일 된 이진 파일 에서 기밀 값체크인하지 않는 것 입니다. 특히 프로젝트가 오픈 소스 인 경우 실제로는 안됩니다. 이를 위해 수행 할 수있는 몇 가지 구성 전략이 있습니다.

코드의 자리 표시 자 (하드 코딩 된 값)

제안 된 바와 같이 코드의 자리 표시 자는 코드를 쉽게 변경할 수 있으므로 (컴파일 할 필요없이) 동적 프로그래밍 언어에서 가장 깔끔하고 가장 쉽습니다. MediaWiki와 같은 많은 오픈 소스 프로젝트가 이것을 수행하는 것을 보았습니다 LocalSettings.php.

이 전략단점 은 키가 하드 코딩되어 있다는 것입니다. 따라서 프로그램이 바이너리로 배포되는 경우 키를 하드 코드화하여 유지 관리 할 수있는 것은 아닙니다.

구성 텍스트 파일

구성 텍스트 파일 을 구현하여이를 수행 할 수도 있습니다 . 즉, 프로그램 / 응용 프로그램이 구성 파일을 검색 하고이 파일 에서 값을 읽습니다. 자리 표시 자와 함께 샘플 구성을 체크인 할 수 있지만 실제 구성은 컴퓨터에서 로컬로 설정할 수 있습니다.

귀하의 경우 key.conf실제 키를 사용하여 텍스트 파일을 작성 하고 프로그램에서 해당 파일을 사용하게하고 버전 제어에 의해 무시되도록 할 수 있습니다. 도움 key.conf.example이되도록 가짜 키로 텍스트 파일을 체크인하고 체크인 할 수 있습니다. 사용자가 올바른 파일에 실제 키를 추가 할 수 있도록 프로그램 / 응용 프로그램에 유용한 오류 메시지가 표시되는지 확인하십시오.

일부 프로그래밍 언어에는 다음과 같이이를 자동으로 제공하는 API가 있습니다.

애플리케이션이 데이터베이스 앱인 경우 데이터베이스에 키 또는 기타 구성 변수를 넣는 것을 고려하십시오. 위의 구성 텍스트 파일과 동일하지만 대신 키와 같은 모든 구성 변수를 데이터베이스 테이블에 넣습니다.

환경 설정보기 또는 Back Office 앱을 통해

프로그램이보기가있는 창 또는 웹 응용 프로그램 인 경우에는 기본 설정보기를 통해 응용 프로그램이 구성 파일을 만들도록 할 수도 있습니다. 그렇게하면 위에서 제안한대로 구성 파일 예제를 체크인 할 필요가 없습니다.

MediaWiki LocalSettings.php는 초기 설치 과정에서 파일 을 자동 생성함으로써 이와 유사하게 해결했습니다 .

분명히 이것은 백그라운드 프로세스, 서비스 또는 데몬으로 만 실행되는 프로그램에 대한 옵션이 아닙니다. 그러나 이러한 이유로 별도의 GUI 프로젝트를 작성하여 일반적으로 Back Office 응용 프로그램 이라고하는 웹 앱에서 관리 및 환경 설정을위한 입력 시점을 작성합니다 .


여기서주의 할 점 : 응용 프로그램 자체에서 자체 구성 설정을 수정하면 응용 프로그램 사용자가 설정 파일을 쓸 수 있어야하므로 공격 표면이 증가하므로 실제로 그러한 UI가 필요한지 여부를 열심히 생각해야합니다.
tdammers

2

가장 쉬운 방법은 기밀 데이터를 게시하지 않는 것입니다. 일부 옵션 :

  • 질문에서와 같이 자리 표시자를 사용하십시오.
  • 특히 키에 헤더 파일을 사용하고 소스 제어를 위해 커밋하지 말고 신뢰할 수있는 당사자에게만 공개하십시오.

오픈 소스 개발에 두 번째 옵션을 사용했습니다. 빌드 직전에 세부 정보를 작성하거나 커밋하지 않기 위해 한 가지 변경 사항을 걱정할 필요가 없기 때문입니다.


2

누군가가 소스 코드 (또는 리버스 엔지니어링 할 수있는 바이트 코드)를 가지고 있다면 디버거에서 코드를 실행하고 키를 보내는 지점에 중단 점을 두어 비밀 키를 얻을 수 있습니다.

드롭 박스와 대화하는 사전 컴파일 된 C 라이브러리를 키로 인코딩하여 조금 더 어려울 수 있지만 키가 누출되는 방법은 여전히 ​​많이 있습니다 (예 : 문자열을 생각하고 있습니다).

내가 이것을 생각할 수있는 유일한 안전한 방법은 게시 상자를 게시하는 웹 서비스를 제공하는 것입니다. 그렇게하면 비밀 키가 서버에서 제어 할 수 있습니다. 호스팅 및 대역폭 비용은이 솔루션이 무료 응용 프로그램에 이상적이지 않다는 것을 의미하지만 추가 된 이점은 서버가 파일을 보관 용으로 전송하기 전에 클라이언트가 제대로 클라이언트를 인증 할 수 있다는 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.