4

이 백서 (When the CRC and TCP checksum disagree)는 TCP 체크섬 알고리즘이 다소 약하기 때문에 TCP를 사용하여 1600 만 ~100 억 패킷마다 감지되지 않은 오류가 발생한다고 제안합니다.tcp 체크섬이 너무 약할 수 있으므로 응용 프로그램 수준 체크섬이 필요합니까?

응용 프로그램 수준에서 체크섬을 추가하여 이러한 종류의 오류로부터 데이터를 보호하는 응용 프로그램 개발자가 있습니까?

EJB 원격 메소드 호출 (Java EE 5)을 수행하는 동안 그러한 오류로부터 보호 할 수있는 패턴이 있습니까? 또는 Java는 이미 직렬화 된 객체를 자동으로 (기본 네트워크 프로토콜과 함께) 자동으로 체크섬합니까?

엔터프라이즈 ECC는 메모리 ECC뿐 아니라 레지스터 등에서 CPU 내에서 오류 검사 (SPARC 및 기타)를 수행하는 컴퓨터에서 실행되고 있습니다. 스토리지 시스템 (하드 드라이브, 케이블 등)의 비트 오류는 Solaris ZFS를 사용하여 방지 할 수 있습니다.

나는 TCP 때문에 네트워크 비트 오류를 ​​두려워하지 않았다. 나는 그 기사를 보았다.

몇 가지 매우 적은 클라이언트 서버 원격 인터페이스에 대해 응용 프로그램 수준 체크섬을 구현하는 것이 그리 많지 않을 수도 있습니다. 하지만 단일 데이터 센터의 여러 시스템에서 실행되는 분산 엔터프라이즈 소프트웨어는 어떻습니까? 정말 많은 수의 원격 인터페이스가있을 수 있습니다.

SAP, Oracle 등의 모든 엔터프라이즈 소프트웨어 공급 업체는 이러한 종류의 문제를 무시하고 있습니까? 은행은 어때? 증권 거래소 소프트웨어는 어떻습니까?

후속 : 답장을 보내 주셔서 감사합니다. 따라서 감지되지 않은 네트워크 데이터 손상을 확인하는 것은 매우 드문 것 같습니다.하지만 실제로 존재하는 것 같습니다.

MD5 또는 SHA1을 사용하도록 구성된 TLS와 함께 RMI over TLS를 사용하도록 Java EE 응용 프로그램 서버 (또는 EJB 배포 설명자)를 구성하고 동일한 작업을 수행하도록 Java SE 클라이언트를 구성하여이 문제를 해결할 수 없었습니다 ? 이것은 신뢰할 수있는 투명한 체크섬을 얻을 수있는 방법이 될 수 있습니까? (그래도 잔인 함으로 인해) 응용 프로그램 수준에서이를 구현하지 않아도 되겠습니까? 아니면 네트워크 스택을 완전히 혼란스럽게 생각합니까?

+0

문제에 대한 설명 : http://criticalindirection.com/2016/02/22/tcp-checksum-the-fault-in-the-stars/ – user31986

답변

2

나는 확신 데이터에 대한 관심 모든 응용 프로그램 무결성은 안전한 해시를 사용해야합니다. 그러나 대부분은 그렇지 않습니다. 사람들은 단순히 문제를 무시합니다.

나는 수십 년 동안 데이터 훼손을 자주 보았지만 (체크섬에 의한 것조차도) 실제로 가장 인상 깊었던 것은 주식 거래 시스템이었습니다. 잘못된 라우터로 인해 데이터가 손상되어 일반적으로 TCP 체크섬을 초과했습니다. 같은 비트를 껐다가 뒤집었다.물론 실제로 TCP 체크섬에 실패한 패킷에 대해서는 아무도 경고하지 않습니다. 응용 프로그램에는 데이터 무결성에 대한 추가 검사가 없었습니다.

메시지는 주식 주문 및 거래와 같은 것이 었습니다. 데이터 손상으로 인한 결과는 심각 할만큼 심각합니다.

운 좋게도, 손상으로 인해 거래 시스템이 완전히 충돌 할 정도로 메시지가 유효하지 않게되었습니다. 일부 비즈니스 손실의 결과는 가짜 트랜잭션을 실행할 때 발생할 수있는 결과만큼 심각하지 않았습니다.

우리는 행운과 관련된 문제를 확인했습니다. 관련된 두 서버 사이의 누군가의 SSH 세션이 이상한 오류 메시지와 함께 실패했습니다. 분명히 SSH는 데이터 무결성을 보장해야합니다.

이 사건 이후, 회사는 비행 중이거나 보관 중일 때 데이터 손상의 위험을 완화하지 않았습니다. 프로덕션 환경에 동일한 코드가 남아 있으며, 실제로 코드를 사용하면 주변 환경이 데이터를 손상시키지 않는다고 가정하는 추가 코드가 생산에 들어갔습니다.

실제로 이것은 관련된 모든 개인에 대한 올바른 결정입니다. 시스템의 다른 부분 (예 : 불량 메모리, 불량 하드 드라이브 컨트롤러, 불량 라우터)으로 인한 문제를 방지하는 개발자는 아무 것도 얻을 수 없습니다. 여분의 코드는 버그를 추가하거나 실제로 관련되지 않은 버그에 대한 비난을받을 위험이 있습니다. 나중에 문제가 발생하면 다른 사람의 잘못입니다.

관리를 위해 보안에 소요되는 시간과 같습니다. 사고의 확률은 낮지 만 "낭비 된"노력이 보입니다. 예를 들어, 여기에서 이미 완료된 데이터 무결성 검사와 엔드 투 엔드 무결성 검사가 비교 된 방법에 주목하십시오.

변경된 사항은 데이터 속도가 더 빨라지고 시스템이 더 복잡해지고 CPU 속도가 빨라져 암호화 해시가 저렴 해 졌기 때문입니다. 부패에 대한 더 많은 기회와 그것을 막는 데 드는 비용.

실제 문제는 문제를 감지/예방하거나 무시하는 것이 환경에서 더 나은지 여부입니다. 문제를 발견하면 귀하의 책임이 될 수 있음을 기억하십시오. 그리고 경영진이 인식하지 못하는 문제를 예방하는 데 시간을 투자하면 문제가되므로 시간 낭비와 같이 보이게 할 수 있습니다.

2

저는 IBs 거래 시스템에서 일해 왔으며 추가 체크섬이 없다는 것을 확신 할 수 있습니다. 대부분의 앱은 알몸 소켓을 사용합니다. 금융 부문의 현재 문제를 감안할 때 나쁜 TCP/IP 체크섬은 걱정할 필요가 없다고 생각합니다.

+0

@altCognito @altCognito 내 답변을 수정하지 마십시오. 그들의 의미. 고맙습니다. –

+0

이것은 미성숙 최적화 http://c2.com/cgi/wiki?PrematureOptimization의 사례입니다 (이전 답변 제거, 나는 겁에 질렸습니다) – cgp

1

글쎄, 저 종이는 2000 년 전 이었어. 그래서 오래전부터 (남자 야, 나는 나이가 많다.), 아주 제한된 흔적에있다. 따라서 거대한 소금물로 그들의 인물을 잡으십시오. 그것은 이것이 여전히 사실인지를 보는 것이 흥미로울 것이라고 말했다. 그러나 하드웨어 결함과 같은 몇 가지 오류 클래스가 여전히 존재할 수 있지만 상황이 바뀌 었다고 생각됩니다.

당신이 정말로 가 추가 응용 프로그램 수준의 확신이 등 SHA-N의 데이터의 해시, 또는 MD5가 될 것 필요한 경우 체크섬보다 유용

+1

문서는 2000 년이지만 체크섬이있는 TCP 프로토콜은 70 년대 이후입니다. 그리고 그곳에는 여전히 오류가 있습니다. 그래서, 나는 너무나 고대의 것이 됨으로써 그것이 사라지는 것을 기대하지 않을 것입니다. – Andrey

관련 문제