Common-mode fault: 두 계산이 같아도 둘 다 틀릴 수 있다
같은 계산을 두 번 하고 결과가 같으면 받아들이는 회로를 생각해 보자. 한쪽의 오류를 잡는 데 유용하지만, 두 결과가 같다는 사실이 두 결과가 모두 맞다는 뜻은 아니다. Common-mode fault는 중복된 계산에 같은 원인이나 공유된 경로가 영향을 주는 상황을 다룬다. 중복 개수보다 오류가 서로 독립적인지가 중요해진다.
두 결과가 함께 틀리는 확률을 나눈다
먼저 가상의 1비트 계산을 놓자. 정상 결과는 고정돼 있고, 각 계산기가 독립적으로 확률 p=0.01로 그 비트를 반전한다고 가정한다. 비교기가 정확하게 동작하면 한쪽만 틀린 경우는 불일치로 잡힌다. 그 확률은 2p(1−p)=0.0198, 즉 1.98%다.
둘 다 틀리면 같은 반전 결과를 내므로 비교를 통과한다. 그 확률은 p²=0.0001, 즉 전체 계산의 0.01%다. 1비트 반전이라는 조건 덕분에 두 오류 값이 같다는 것도 정해진다. 여러 비트의 다양한 오류를 다룰 때는 p²를 곧바로 ‘같은 잘못된 값’의 확률로 사용할 수 없다.
이제 확률 q=0.001로 두 계산기를 함께 반전시키는 공통 사건을 추가하자. 공통 사건이 없을 때만 앞의 독립 오류 모델을 적용한다고 정한다. 잘못된 값을 같다고 받아들이는 전체 확률은 q+(1−q)p²=0.0010999, 약 0.10999%다.
독립 오류만 가정한 0.01%보다 약 11배 커졌다. 불일치로 잡히는 확률은 (1−q)2p(1−p)=0.0197802다. 비교기는 여전히 자주 오류를 잡지만, 공통 사건이 만드는 같은 오류는 그 숫자 뒤에 남는다. 이 확률들은 실제 칩의 오류율이 아니라 독립성 가정의 영향을 보는 예제다.
공유된 입력은 중복 연산으로 복구되지 않는다
두 계산기가 서로 다른 저장소와 조합 회로를 써도 입력 값을 같은 레지스터에서 가져올 수 있다. 공유 입력이 이미 잘못돼 있다면 둘 다 그 값을 정확하게 계산할 수 있다. 결과 비교는 연산 중의 차이를 검사했지만 입력의 정확성은 확인하지 못한 것이다.
공통 클럭과 전원, 공유 제어 신호도 범위에 넣어야 한다. 두 연산을 시간상 분리하면 짧은 사건에 대한 독립성이 좋아질 수 있지만, 입력에 남은 오류나 지속적인 제어 오류까지 자동으로 없어지지는 않는다. 다른 구현을 쓰더라도 입력과 최종 결정 경로가 공유되면 그 부분은 따로 남는다.
OpenTitan의 보안 지침은 민감한 계산의 반복·비교와 중복 저장을 제시하면서, 검출과 최종 허용 판단도 오류의 영향을 고려하도록 설명한다. 단지 같은 회로를 두 개 그리는 것에서 끝나지 않는 관점이다. OpenTitan의 fault countermeasure 지침
비교기가 맞다는 가정도 검토한다
한쪽 출력이 다를 때 비교기가 불일치를 내는지 먼저 확인할 수 있다. 하지만 검출 신호를 받는 회로나 최종 허용 신호가 잘못되면 비교 결과가 정상이어도 조치가 실행되지 않을 수 있다. 값을 비교하는 경로와 그 결과로 민감한 동작을 막는 경로를 연결해서 확인해야 한다.
또한 순서가 다른 두 계산의 중간값을 같은 완료 결과처럼 비교하면 정상 회로에서도 차이가 날 수 있다. 비교 시점, 시작 입력의 동일성, reset과 재시작 이후의 상태를 맞춰야 한다. 서로 동기화하지 않은 중복 상태가 계속 돌아간다는 사실만으로 유용한 검출이 생기지는 않는다.
가상 확률 모델에서 독립 오류 p를 계속 줄여도 공통 사건 q가 그대로면 잘못된 수락 확률은 q에 가까워진다. 계산기 두 개의 개별 품질만 개선해서 해결할 수 없는 바닥이 생기는 것이다. 공통 경로를 줄이거나 그 경로를 별도로 검사하는 개선이 필요한 이유다.
Common-mode fault를 평가할 때는 무엇을 두 번 계산했는지보다 어떤 입력·제어·결정이 공유되는지 먼저 그려 보면 좋다. 독립 오류와 공통 사건, 비교기와 오류 대응을 따로 검증하면 중복 회로가 제공하는 보호의 범위를 정확히 설명할 수 있다.