2014-12-07 6 views
4

인터뷰시 분산 컴퓨팅에서이 질문을 받았습니다.클라이언트 측 코드를 안전하게 실행하십시오.

는 면접관 :

는 "샘의 출력을 얻을 수있는 클라이언트의 컴퓨터에 특정 코드를 실행하지만 클라이언트 코드를 수정하고, 따라서 코드가 다른 출력을 반환

이제 샘 원한다.. 코드가 인지 변경되었는지 또는 반환 값이 수정되었는지 여부를 확인할 수 있는지 여부를 알고 있습니다. 가능합니까? "

나는 클라이언트가 컴퓨터에서 코드를 수정하지 못하도록하는 것이 불가능하다고 생각했습니다. 또는 나는 틀린가? 그렇지 않은 경우 코드가 변경되었는지 여부를 감지 할 수 있습니까? 아니면 클라이언트가 코드를 수정하고 출력하는 것을 어렵게 만들 수 있습니까?

+0

코드 수정을 방지하는 것은 불가능합니다. 그리고 내 경험에 비추어 볼 때, 컴퓨터에 접근 할 수있는 이벤트는 변경된 코드를 감지하기가 어려울 것입니다. 왜냐하면 변경된 코드가 파일로 변경되기 때문에 저장되지 않기 때문입니다. 나는 당신이 다르게 보길 바란다. 이것은 매우 시원 할 수있다. – rfornal

답변

2

클라이언트가 코드를 조작하는지 여부는 중요하지 않습니다. 실제로 중요한 것은 결과 서버가 수신 한 것입니다. 결국 클라이언트는 코드를 전혀 실행하지 않을 수도 있으며 하드 코딩 된 응답 만 반환 할 수 있습니다.

그래서 질문이됩니다 : 귀하의 서버가 대답 클라이언트가 보낸 신뢰할 수 있습니까?
일반적인 대답은 다음과 같습니다.

더 복잡한 답변은 : 원하는 작업에 따라 다릅니다. 아마도 당신이하고있는 것은 proof-of-work concept에 복종 할 수 있습니다. 클라이언트는 수학적으로 뭔가를했다고 증명해야합니다. 어쩌면 특정 데이터가 특정 데이터에서 파생되었으며 클라이언트의 데이터를 검증 가능하게한다는 것을 수학적으로 입증하는 서명 프로세스를 포함 할 수 있습니다. 어쩌면 서버는 동일한 작업을 수행하거나 서로 겹칠 수있는 작업 섹션을 수행하기 위해 서로 다른 두 개의 클라이언트를 요구할 수 있습니다. 공격자가 두 개 (또는 그 이상의) 클라이언트를 동시에 조작해야하기 때문에 각 클라이언트를 동시에 수행 할 수 없습니다 고객의 응답은 개별적으로 신뢰할 만합니다.

관련 문제