블록체인에서 해싱의 역할
- 해시값을 사용해 사용자 익명성을 보장
트랜잭션 기록에서 지갑 주소와 송금내역, 잔액을 확인할 수는 있지만 누구의 지갑인지는 알 수 없다
- 무결성 검증
이전 블록과 지금 블록이 연결되어 있기에 해싱값이 달라진 경우 블록 위변조가 일어났음을 알 수 있다
- 해시값을 사용해 채굴노드를 정할 수 있다
특정 조건의 해시값을 만족하기 위해 논스라는 입력값을 찾아야 하는 과정에서 해시를 사용하고, 이를 가장 먼저 찾는 노드에게 채굴에 대한 보상을 준다
암호 해시에서 함수의 안전함을 평가하는 요소
- 충돌 저항성: 서로 다룬 두 입력값이 동일한 출력값이 안되는 상태
- 역상 저항성: 특정한 값을 출력하는 입력값을 찾기 어려운 상태
- 제2 역상 저항성: 어떤 입력값을 사용한 해시값과 동일한 값을 출력하는 또 다른 입력값을 파악할 수 없는 상태
블록체인의 보안적 특징
이중 지불 문제?
동일한 하나의 자산이 이중으로 두 명의 수신자에게 동시에 전송되는 문제를 뜻하며 이 문제를 해결하지 못할 경우 자산에 대한 증명과 검증할 방법이 없어지기 때문에 시스템 자체가 파괴된다.
이중 지불 문제를 막는 방법 2가지
- 중앙화된 접근법: eCash
은행에 일정 금액을 입금하면 이를 특정 갯수의 숫자들로 변경하며, 이 숫자를 사용하여 서명의 유효성을 확인 한 후 소각시키는 방식
- 탈중앙화된 접근법: 블록체인
노드라 불리는 네트워크 참여자들의 동일한 데이터베이스 사본을 통해 트랜잭션을 기록하고 서로 감시하는 구조. 공개적으로 모든 트랜잭션 내역을 확인할 수 있기 때문에 이중 지불과 같은 나쁜 행동을 쉽게 감지할 수 있다. 물론 이는 트랜잭션이 체인에 올라가서 재구성이 불가능하다고 여겨질만큼 추가적인 블록생성이(합의된 노드의 수) 많아져야 가능하다는 특징이 있다
비트코인 이중 지불
- 51% 공격: 단일 주체나 조직이 네트워크 전체의 50% 이상의 해시레이트를 가질 경우 트랜잭션을 배제하거나 조작할 수 있다
- 레이스 공격: 동일한 자금에 여러개의 트랜잭션을 생성하여 이중 지불을 유도하고 원하는 트랜잭션만 처리하는 방식
- 핀니 공격: 공격자가 채굴에 성공할 때 그 블록에 본인의 자산을 다른 본인의 지갑으로 보내는 트랜잭션을 포함시키고, 이를 즉각적으로 네트워크에 전파시키지 않고 기다린 후 해당 트랜잭션에 사용된 자산을 다른 서비스에 사용해 서비스를 사용함과 동시에 미뤄뒀던 본인의 트랜잭션을 활성화시켜 서비스에 사용된 트랜잭션을 무효화 하는 방식
리플레이 공격
기존에 있는 코인과 하드포크로 새로 나오게 된 코인이 동일 인증키를 사용하게 될 경우 기존 코인의 출금정보를 가지고 다른 코인의 출금을 시도하는 이중 지불을 만드는 행위.
리플레이 공격 대안
- 세션 식별자 추가: 통신 당사자간 일회용 토큰을 해싱한 값을 공유해 중간 탈취를 피한다
- 일회용 비밀번호: 아주 짧은 세션시간을 가진 비밀번호를 두 통신 당사자간 공유하여 재사용이 어렵게 만든다
- 타임스탬프: 타임스탬프가 포함된 메시지를 사용하여 예상 시간 범위내에 있는 메시지만 수락한다
이클립스 공격
이클립스 공격은 한 개의 노드를 대상으로 하는 네트워크 공격으로 특정 노드가 정보를 수신받는 것을 막기 위해 다수의 노드가 악의적으로 네트워크를 독점하는 것이다. 이 다수의 노드는 허위 트랜잭션 내역이 담긴 블록을 공격할 특정 노드에 전파해 이중 지불 공격을 가능하게 한다
이클립스 공격 대안
- 무작위 랜덤 노드 선택: 공격자가 원하는 대상을 지정하기 위해 만들어야 하는 노드를 추측하기 어려워진다
- 정보 저장: 노드가 다른 노드에 대한 정보를 기억하도록 하면 해당 노드가 네트워크를 떠났다가 다시 접속했을때 이전에 연결된 노드와 다시 연결하여 정직한 피어 관계를 지속할 수 있다
- 연결 수 늘리기: 하나의 노드에 연결되는 피어의 갯수를 늘리면 정직한 노드에게 연결될 가능성 또한 높아지게 된다
인적문제로 발생하는 보안적 이슈
크립토 재킹
감염된 피해자의 장치를 사용해 암호화폐를 채굴하는 것을 의미하는데, 쉽게말해 악성코드나 특정 프로그램을 배포하여 그 프로그램이 사용자(피해자)모르게 해당 시스템 자원을 사용해 채굴을 시키고, 그 보상을 배포한 공격자가 받아가게 된다.
가장 많이 사용되는 방식은 웹기반 크립토 재킹으로 웹사이트에서 실행되는 스크립트를 사용해 악성 채굴 프로그램을 실행시키고, 해당 사이트에 머물러있는 동안 브라우저를 통해 자동으로 채굴을 하도록 한다.
더스팅 공격
해커들이 가치가 없을만큼 아주 작은 먼지(Dust)만큼의 코인을 사용자의 지갑에 전송하여 해당 사용자의 신원을 파악하는 악성 공격이다. 대부분 사용자들은 지갑 자체로 신원을 알 수는 없으나 입출금을 위해 거래소 지갑과 연결되어 있기 때문에 트랜잭션을 추적하다보면 지갑을 소유한 개인이 누구인지 알 수 있게 된다
시빌 공격
공격자가 실제로는 한 명이면서 마치 여러 명인 것처럼 속이는 방식으로 네트워크 상의 다수 노드를 제어함으로 의사결정에 좋지 않는 영향을 미치는 공격을 말한다. 시빌이라는 명칭은 다중 인격 장애를 겪었던 시빌 도르셋이라는 여성에 대한 사례 연구에서 유래되었다.