지식이없는 코드 호스팅? [닫은]


28

온라인 서비스 제공 업체가 저장 한 데이터에 대한 정부의 광범위한 모니터링에 대한 최근의 계시에 비추어 볼 때 제로 지식 서비스는 현재 모든 분노입니다.

제로 지식 서비스는 모든 데이터가 서버에 저장되지 않은 키로 암호화되어 저장되는 서비스입니다. 암호화 및 암호 해독은 전적으로 클라이언트 측에서 이루어지며 서버는 일반 텍스트 데이터 나 키를 전혀 보지 못합니다. 결과적으로 서비스 제공 업체는 원하는 경우에도 데이터를 해독하여 제 3 자에게 제공 할 수 없습니다.

예를 들면 : SpiderOak 은 지식이없는 Dropbox 버전으로 볼 수 있습니다.

프로그래머로서 우리는 가장 민감한 데이터 중 일부 (코드)를 특정 온라인 서비스 제공 업체 (Bitbucket, Assembla 등)와 같은 특정 온라인 서비스 제공 업체에 크게 의존하고 신뢰합니다. 물론 여기서 개인 저장소에 대해 이야기하고 있습니다. 제로 지식의 개념은 공용 저장소에 적합하지 않습니다.

내 질문은 :

  1. 무 지식 코드 호스팅 서비스를 만드는 데 기술적 장벽이 있습니까? 예를 들어 SVN, Mercurial 또는 Git과 같이 널리 사용되는 버전 제어 시스템에서 사용하는 네트워크 프로토콜에 대해 클라이언트와 서버간에 통신되는 데이터가 서버가 모르는 키?

  2. 오늘날 존재하는 제로 지식 코드 호스팅 서비스가 있습니까?


1
동형 암호화가 없으면 제로 지식 코드 호스팅 사이트가 제로 지식 버전의 드롭 박스보다 어떤 이점을 제공 할 수 있는지 알 수 없습니다. 나는 아무도 안전하고 (즉, 전문가가 신뢰할 수있을만큼 안전하고) 사용하기에 충분히 빠른 그러한 체계를 아직 내놓지 않았다고 믿는다.
Brian

2
@AndresF. SpiderOak은 클라이언트에서 diff 생성이 발생하고 서버가 암호화 된 diff를 저장 한 다음 diff와 base가 암호화되면 클라이언트에서 다시 diff-to-base 응용 프로그램이 다시 발생한다는 것을 의미한다고 가정 할 수 있습니다. 나는 그들의 언어가 매우 불분명하다는 것에 동의합니다.
apillers

2
@apsillers : 또는 고의로 이러한 내용을 파일에 채우고 파일 자체를 식별하는 데 사용할 수 있습니다 (예 : 누군가가 암호화를 사용하여 불법 복제를 숨기려고하는 경우).
Brian

4
그것은 내가 경험 한 것이 아니지만 제로 지식 코드 호스팅 서비스를 얻는 데 가능한 기술적 장벽을 상상할 수 있습니다. 모든 사용자가 동일한 키를 알고 / 사용할 필요는 없습니까? 이 경우 다른 수준의 사용자 액세스를 보장하는 인증 메커니즘은 무엇입니까?
CB

2
@ gnat : 나는 추천을 요구하지 않습니다. 나는 단지 내가 설명한 종류의 서비스가 존재하는지 묻고 있습니다. 그러한 서비스의 존재는 내가 질문의 초기에 요구 한 기술적 장벽이 극복 될 수 있다는 증거를 제공 할 것이다.
HC4-복원 Monica Monica

답변:


3

각 줄을 별도로 암호화 할 수 있습니다. 파일 이름과 대략적인 줄 길이 및 줄 변경이 발생하는 줄 번호를 누설 할 수 있다면 다음과 같이 사용할 수 있습니다.

https://github.com/ysangkok/line-encryptor

각 줄은 별도로 (그러나 동일한 키로) 암호화되므로 업로드 된 변경 사항은 (일반적으로) 관련 줄만 포함합니다.

현재 충분히 편리하지 않은 경우 두 개의 Git 리포지토리를 만들 수 있습니다. 하나는 일반 텍스트와 다른 하나는 암호 텍스트입니다. 일반 텍스트 저장소 (로컬 인)에서 커밋 할 때 커밋 후크는 diff를 가져와 위에서 참조한 라인 암호화기를 통해 실행할 수 있으며이를 암호화 텍스트 저장소에 적용합니다. 암호문 저장소 변경 사항이 커미트되고 업로드됩니다.

위의 라인 암호 기는 SCM에 구애받지 않지만 일반 텍스트의 통합 된 diff 파일을 읽고 변경 사항을 암호화하여 암호 텍스트에 적용 할 수 있습니다. 따라서 Git과 같은 통합 diff를 생성하는 모든 SCM에서 사용할 수 있습니다.


이것을 위해 자식의 얼룩 청소 를 사용할 수 없습니까?
svick

@ svick : 당신은 할 수는 있지만 그렇게하면 전체 파일을 다시 암호화하지 않는 방법을 알 수 없습니다. 그러나 파일 크기가 작기 때문에 코드에는 중요하지 않습니다. 그러나 "라인 암호화 기"가 필요하지 않으므로 모든 암호화 도구를 사용할 수 있습니다.
야누스 트롤 슨

알려진 구조를 가진 많은 텍스트 샘플 이 키를 쉽게 공격 할 수있는 것이 아닐까요? 모든 빈 줄은 동일하게 암호화됩니다. javadoc의 모든 시작과 끝은 동일합니다. 이제 코드의 일부 세그먼트에 대한 일반 텍스트와 암호 텍스트를 알 수 있습니다. 이것은 아마도 취미 애호가들에게는 유용하지 않을 것입니다 (훈련 된 암호 유형이나 충분한 컴퓨팅 능력을 가진 사람은 충분한 노력으로 그것을 망칠 수 있습니다).

@MichaelT : 아니요. IV 때문입니다. 직접 사용해보십시오 :) 연결된 구현을 사용하여 행을로 암호화하십시오 <IV>,<ciphertext>.
야누스

1
@svick : 라인이 개별적으로 암호화됩니다. 회선을 변경하면 전체 회선 이 다시 암호화되지만 새 IV가 항상 표시됩니다. 그러나 파일의 나머지 부분은 건드리지 않습니다! 암호화는 결정 론적이지만 IV도 입력이며 의사 무작위로 선택됩니다.
야누스 트롤 슨

1

SVN을 고려할 때 장벽이 없다고 생각합니다 .SVN을 고려할 때 저장을 위해 서버로 전송되는 것은 이전 코드와 현재 버전의 코드 사이의 델타입니다. 따라서 한 줄을 변경하면 해당 줄이 서버로 전송됩니다. 그런 다음 서버는 데이터 자체를 검사하지 않고 '맹목적으로'저장합니다. 델타를 암호화하여 대신 전송 한 경우 서버에 영향을 미치지 않으며 실제로 서버를 수정하지 않아도됩니다.

mime 유형과 같이 쉽게 암호화 할 수없는 메타 데이터 속성과 같은 다른 비트가있을 수 있지만, 데이터를 해독해야한다는 것을 알고있는 한 다른 기록 (예 : 기록 로그의 주석) 볼 클라이언트. 디렉토리 구조가 표시되는지 확실하지 않습니다 .SVN이 디렉토리를 저장하는 방식으로 인해 표시되지 않을 것이라고 생각하지만 가능하지 않습니다. 그러나 내용이 안전한 경우에는 중요하지 않을 수 있습니다.

이것은 다양한 코드보기 기능을 갖춘 웹 사이트를 가질 수 없으며 서버 측 저장소 브라우저 또는 로그 뷰어가 없음을 의미합니다. 코드 차이, 온라인 코드 검토 도구가 없습니다.

Mozy는 이미 개인 키로 암호화 된 데이터를 저장하고 있습니다 (자체를 사용할 수 있으며 "키를 잃어버린 경우 너무 나쁘면 데이터를 복원 할 수 없음"). ""하지만 일반 사용자를 대상으로합니다.) Mozy는 파일 히스토리도 저장하므로 이전 버전을 검색 할 수 있습니다. 떨어질 곳은 업로드가 원하는 때에 체크인하지 않고 정기적으로 이루어지며 저장 공간이 부족하면 이전 버전을 버린다고 생각합니다. 그러나 개념은 기존 시스템을 사용하여 안전한 소스 제어를 제공하도록 수정할 수 있습니다.


"이것은 다양한 코드보기 기능, 서버 측 저장소 브라우저 또는 로그 뷰어가없는 웹 사이트를 가질 수 없다는 것을 의미합니다. 코드 차이, 온라인 코드 검토 도구가 없습니다." -애플리케이션 로직이 클라이언트 측 JS에 있고 비밀번호 / 키를 입력했지만 서버로 보내지 않은 경우에도 여전히 사용할 수 있습니까?
HC4-복원 Monica Monica

그렇습니다 .... 네트워크를 통해 암호화 된 데이터를 수신하고 있다는 것을 알고있는 한 무엇이든 가능합니다. 서버가 데이터를 해독 할 수 없다는 것은 명백한 한계입니다.
gbjbaanb

1

나는 '이것은 당신의 질문에 대답하지 않을 것입니다'라고 대답하는 것 중 하나를 싫어합니다.

이러한 걱정을 해결해야하는 두 가지 준비된 솔루션을 생각할 수 있습니다.

  1. 개인 Git 서버를 직접 호스팅하십시오. 그런 다음 해당 서버를 팀 구성원이 액세스 할 수있는 VPN에 배치하십시오. 서버와의 모든 통신은 암호화되며 물론 OS 수준에서 서버를 암호화 할 수 있습니다.

  2. BitSync도 트릭을 수행해야합니다. 모든 것이 암호화되어 있으며 어디서나 사용할 수있는 거대한 네트워크에 있습니다. 실제로이 모든 BitCoin / BitMessage / BitSync 기술을 실제로 적용 할 수 있습니다.

마지막으로 https://security.stackexchange.com/에 있는 사람들 은 더 많은 통찰력을 가질 수 있습니다.


BitSync 관련 : 버전 제어 시스템의 대체품으로 사용되거나 버전 제어 시스템과 함께 사용되도록 제안합니까? 전자라면 확실하지만 그다지 흥미롭지는 않습니다. SpiderOak을 통해 파일을 공유 할 수 있었고 중앙 집중화되었지만 여전히 지식이 없습니다. 후자라면 어떻게?
HC4-복원 Monica Monica

1
@ HighCommander4 시도하지 않았지만 작동하지 않는 이유는 없습니다. 초기화 된 git 폴더를 공유하도록 sync를 설정할 수 없었습니다 'git push ./syncedFolderActingAsServer/MyAwesomeProject/src/'. 자식 레벨 권한 등을 수행 할 수도 있습니다. 누군가 이것을 시도해야합니다!
Rubber Duck

1

내가 이해하는 것처럼 git pull작동 하는 방식 은 서버가 원하는 모든 객체가 포함되어 있지만 현재는없는 팩 파일을 보내는 것입니다. 그리고 그 반대의 경우도 마찬가지입니다 git push.

서버가 객체를 이해해야하기 때문에 직접 이렇게 할 수 없다고 생각합니다. 대신에 서버는 일련의 암호화 된 팩 파일을 사용하여 서버를 작동시킬 수 있습니다.

그렇게하려면 pull, 마지막 이후에 추가 된 모든 팩 파일을 다운로드하여 pull암호를 해독 한 후 git repo에 적용하십시오. 수행하려면 push먼저 pull서버의 상태를 알 수 있도록 수행해야 합니다. 충돌이없는 경우 변경 사항이 포함 된 팩 파일을 작성하고 암호화 한 후 업로드하십시오.

이 방법을 사용하면 많은 수의 작은 팩 파일이 생겨 상당히 비효율적입니다. 이 문제를 해결하기 위해 일련의 팩 파일을 다운로드하고, 해독하고,이를 하나의 팩 파일로 결합하고, 암호화 한 후 서버에 업로드하여 해당 시리즈의 대체 파일로 표시 할 수 있습니다.

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