암호호 기술과 보안 - 정답

Lumi·2021년 12월 5일
0
post-thumbnail

💡 Replay Attack 문제, Eclipse Attack 문제 각각 무엇인가요?

리플레이 공격은 일단 하드포크가 일어났을떄 주로 발생하는 공격입니다.

하드포크 이전에 승인된 트랜잭션으 하드포크 이후 다시 승인시킴으로써 하드포크 이후 거래를 직접 하지 않았음에도 거래가 처리된 것러럼 작동하는 것 입니다.

이클립스 공격은 공격이라기 보다는 일종의 공격 준비입니다.

이클립스 공격은 특정 노드들을 고립시켜서 다른 노드와 RPC통신을 막는 것을 말합니다.

블록체인의 경우에는 브로드캐스팅으로 데이터가 전달이 되기 떄문에 악의적인 노드들이 특정 노드를 고립시켜 작동을 하지 못하게 한뒤

자신의 트랜잭션만을 블록에 추가하기 시작함으로써 공격을 할 수가 있습니다.

이러한 공격의 모든 조건은 대부분 네트워크의 파워 일부분을 차지하고 있어야 합니다.

💡 Logjam 취약점이란?

우리가 TLS연결을 할 떄에 디피 헬만 키 교환을 사용하게 됩니다.

이떄 공격자가 임시 디피 헬만 키 교환을 사용하여 TLS연결을 다운그레이드 하여 공격을 하는 것을 말합니다.

간단하게 말해서 공격자도 디피 헬만 키 교환을 사용하요 버전을 낮추는 것으로 이해 하였습니다.

💡 HMAC / PKI / ECDSA / ECDH는 무엇인가요?

HMAC는 대칭키를 이용한 트랜잭션 검증을 말합니다.

보통은 비대칭키를 사용하지만 대칭키 또한 활용가능하며

원본 데이터와 해시값을 보낸뒤 수신자는 원본데이터를 공개키로 해쉬화 하여 해시값을 비교 합니다.

ECDSA는 타원곡선 알고리즘으로 비대칭키를 활용할떄 사용 됩니다.

PKI는 디지털 인증서와 공개키를 생성 인증에 관한 절차의 집합입니다.

데이터를 안전하게 전송하는 것을 목표로 하며 접근 권한, 기밀성등을 보장합니다.

공개 키 암호 방식을 사용합니다.

ECDH는 공개키 서명 방식에 사용되는 타원곡선 알고리즘 입니다.

💡 diffie-hellman 키 교환 알고리즘은 무엇인가요? 이더리움에서는 왜 사용하나요?

상대방의 공개키와 나의 공개키를 이용하면 비밀키가 나오는 것을 말합니다.

그후 상대방은 비밀키를 사용하여 데이터를 암호화 한후 사용하게 됩니다.

즉 암호화나 서명을 위해서 직접적으로 사용하는 것은 아니지만 이를 수행하기 위해서 먼저 수행하는 것을 말합니다.

이더리움에서는 서명을 할떄에 비대칭키 방식을 활용하게 되고 이러한 방식으로 비밀키를 만들어서 서명을 진행하게 됩니다.

💡 diffie-hellman 키 교환이 SSL (TLS) 에서는 어느 지점에서 사용 되나요?

TLS는 비대칭키과 대칭키를 같이 사용하는 것을 말합니다.

앞서 설명했듯이 이더리움 에서는 서로의 공개키를 통해서 통신에 사용한 비밀키를 만들어 내고 이 비밀키를 통해 서명을 진행하게 됩니다.

이보다는 좀더 이해가 편한 설명은 웹에서 통신이 이루어 질떄 입니다.

비대칭키는 대칭키보다 cpu를 더 많이 잡아먹는 방식입니다.

그러기 떄문에 자주 사용하는 것이 아닙니다.

웹에서는 앞서 설명한 diffie-hellman방식을 통해서 비밀키를 만들고 그 비대칭키를 활용하여 서로 통신에 활용할 대칭키를 교환하게 됩니다.

만약 바로 대칭키를 교환하게 되면 중간에 공격자가 탈취 할 수도 있기 때문에 이러한 과정을 거치게 됩니다.

이후 서로의 통신에서는 대칭키를 활용하게 됩니다.

💡 니모닉 월렛이란? BIP-39는? 니모닉 월렛의 작동 방법은?

니모닉 월렛은 제 언어로 설명을 하면 사용자 친화 비밀키 입니다.

BIP-39에서는 이러한 니모닉 단어로부터 HD지갑에 사용될 시드키를 생성하게 됩니다.

이후 이 시드키는 결정적 지갑을 만들고 비밀키를 생성해 내는데에 사용이 되게 됩니다.

기존의 시드키는 굉장히 사용자 친화적이지 않았습니다.

  • 단순한 해시값을 출력값과 비슷하였습니다.

이러한 값을 통해 로그인 또는 계정 찾기를 진행하게 된다면 한글자라도 오타가 있을시에 꽤나 골치가 아팠고 이를 해결하기 위해 니모닉 월렛이 등장하게 되었습니다.

  • 니모닉 월렛은 일종의 영어 단어가 나열되어 있는 형태 입니다.

💡 HD Wallet과 니모닉 월렛의 차이점은?

제가 제대로 알고 있는게 맞다면 HD 지갑에서 좀더 사용자 친화적으로 변한것이 니모닉 월렛입니다.

HD지갑은 하나의 시드키에서 여러개의 계정을 만들어 냅니다.

  • 현재 우리가 메타마스크 같은 지갑에서 여러개의 계정을 만들어 낼 수가 있는 이유 입니다.

우리가 메타마스크에 회원가입을 하게 되면 일종의 영어 단어가 나열된 값들을 부여받게 되는데 이것이 바로 니모닉 월렛입니다.

시드키는 DRBG알고리즘을 사용하여 만들어 지게 되고 시드키를 통해서 니모닉 월렛은 일종의 체크섬을 만드는 과정을 통해서 만들어 지게 됩니다.

💡 지갑에서 여러 어드레스를 생성하는 방식은?

HD지갑이 아니여도 여러 계정을 만들어 낼 수가 있지만 HD지갑이 결정적 지갑이기 떄문에 HD지갑을 예로 대답을 해보겠습니다.

앞서 몇번 말했듯이 하나의 시드키로부터 여러개의 자식키가 만들어 지게 되고 이 자식키로부터 여러개의 손자키가 만들어 지게 됩니다.

  • 즉 트리 구조로 키가 만들어 지게 됩니다.

계정을 생성하면 이러한 트리구조로 키가 생성이 되고 계정이 생성이 된다는 의미 입니다.

또한 인덱스에 따라서 일반 자식, 단절 자식으로 나뉘게 됩니다.

💡 group signature vs aggregation signature vs threshold signature 의 차이점은?

이 부분에 대한 자료는 모두 논문이라서... ㅠㅠ 잘 모르겠습니다.

💡 블록체인에서 데이터 무결성이 보장되는 이유는? WAL(Write-ahead logging)은 무엇인가요?

무결성이 보장되는 이유는 간단합니다.

블록이 이전 블록의 해시값을 가지고 있기 떄문입니다.

그러기 떄문에 데이터가 변하게 된다면 해시값이 변하게 되고 이로 인해 바로 알아차릴수 있기 떄문에 무결성이 보장이 됩니다.

WAL은 일종의 중간 저장 입니다.

만약 작업중에 정전으로 인해 컴퓨터가 꺼지게 된다면 다시 컴퓨터를 실행 시켰을떄 내가 작업하던것이 성공했는지 실패했는지를 컴퓨터가 알고 있어야 합니다.

이떄 WAL즉 로그 선행 기입을 활용한다면 프로그램이 자체적으로 로그를 검사하여 진행 여부를 판단하게 됩니다.

💡 consistent hashing 이란 무엇인가요?

이 부분은 틀릴수도 있습니다.

좀 어려운 개념 같아서 간단하게만 알아보았습니다.

일종의 해시 링을 만드는 것으로 이해를 하였습니다.

A,B,C를 해싱한 값이 10, 20, 30 이라는 가정이 있다면

이를 통해서 링을 만들게 됩니다.

   10   

 20  30
  • 서로 원으로 이어져 있다고 가정을 하겠습니다.

이떄 만약 특정값을 해시한 값이 5라면

   10   
  5 
 20  30

이렇게 값이 저장이 되게 되고 이후 만약 5라는 값을 찾고자 한다면 10이라는 곳을 먼저 찾아보는 것으로 이해를 하였습니다.

즉 해싱한 값을 좀더 빠르게 찾아보기 위한?? 것으로 이해를 하였습니다.

💡 BIP 32, 39, 44가 무엇인가요?

모두 HD지갑을 개선하기 위한 제안을 말합니다.

BIP32에서 처음으로 HD지갑이 제안되었고

BIP39에서는 니모닉 코드가 제안이 되었고

BIP44에서는 여러개의 화폐를 보관하는 지갑이 제안 되었다.

💡 해시 알고리즘에 대해 설명할수 있나요?

이러한 질문은 굉장히 방대한 질문이라고 생각을 합니다..ㅠㅠ

가장 기본적이고 핵심으로 생각하는 부분에 대해서 답변을 해보자면

암호화 방식입니다.

입력값이 한글자만 달라도 완전하게 다른 출력값이 나오게 되고

그 출력값들은 입력값의 길이에 무관하게 똑같은 길이를 가지고 있습니다.

현재 가장 안전한 암호화 방식이라고 생각을 하고 있으며 레인보우 테이블 같은 것을 활용해 해킹이 가능한 것으로 알고 있지만 현실적으로는 불가능 한 것으로 알고 있습니다.

하지만 서로 입력값이 다른 상태인데도 동일한 출력값이 나올수가 있는데 이러한 것을 충돌이라고 합니다.

💡 RSA 알고리즘을 설명해주세요. 이 알고리즘은 얼마나 안전한가요?

비대칭키 암호화 방식을 말합니다.

비밀키와 공개키를 통해서 인증이 진행이 되며 공개키는 공개되어 있지만 비밀키는 소유자만 가지고 있게 됩니다.

블록체인 기준으로 설명을 하자면

원본데이터를 해싱한 값과 해싱한 값을 비밀키로 암호화한 서명을 전송을 하게 됩니다.

그러면 수신자 = 노드 에서는 공개키를 활요하여 서명은 복호화 하고 해싱한 값을 비교를 하게 됩니다.

이러한 암호화 방식은 제가 알기로는 양자컴퓨터가 나오기 전까지는 안전한 것으로 알고 있습니다.

💡 Secret Sharing이 무엇인가요? 블록체인에서 secret sharing을 사용했을 때 어떤 장점이 있나요?

비밀키를 여러 사람들이 나눠서 저장을 하는 것을 말합니다.

비밀키는 잃어버리게 되면 자산을 찾을수 없게 됩니다.

기존의 중앙화된 시스템과 다르게 다시 아이디를 찾을수 없는 것과 같습니다.

그러기 떄문에 서로 비밀키를 공유하여 저장을 하면 잃어버리는 일이 적어지지만 그만큼 보안적으로 떨어지게 됩니다.

이러한 리스크를 보완하기 위해서 진행되는 연구입니다.

과정은 이와 같습니다.

[1] 하나의 비밀키를 여러 조각으로 나눠서 사용자가 분산 저장하게 된다.

[2] 원래의 비밀키를 복원하기 위해서는 반드시 일정수 이상의 사용자가 필요하다

즉 비밀키를 잘라서 여러사람에게 분산되어 저장을 할 수도 있고 과반수의 동의가 필요하기 떄문에 보안적으로도 안전한 보관 방법 입니다.

💡 블록체인에서 지켜야 하는 보안 위협 제거에 대한 핵심원칙은 무엇인가요?

흠.. 어떠한 질문을 하는지를 모르겠습닌다...

보안 위협을 제거하면 좋은것인데 이 부분에 대해서 원칙을 지켜야 한다니... 잘 모르겠습니다..ㅠㅠㅠ

단순하게 생각하면 뭐... 데이터의 무결성을 헤치면 안된다?? 이런것이 아닐까 싶습니다.

💡 블록체인에서 랜덤 함수를 구현하는 방법은 무엇인가요?

있습니다.

랜덤한 함수를 랜덤한 값이라고 생각을 하겠습니다.

일단 기본적으로 블록체인은 컴퓨터 입니다.

컴퓨터가 작동을 하는 이상 어느정도 예측가능한 난수값이 도출이 될 것입니다.

오라클문제와 같이 외부의 데이터를 난수로 활용을 하여서 중간에 공격자가 공격을 할수 있기 떄문에 기본적으로 안전성이 보장이 된다고는 할 수가 없습니다.

그러기 떄문에 블록체인에서는 2가지 방식을 사용하게 됩니다.

첫번쨰는 Commit Reveal Scheme입니다.

기존에는 서로의 값을 알고 있는 데이터를 암호화하여 전송을 하게 됩니다.

  • 이떄 사용자들은 서로의 값이 무엇인지는 알 수가 있습니다.

이후 일정 시간이 지난후에 기존 값을 재전송 하게 됩니다.

검증 과정에서 이 첫번쨰 암호화된 값과 두번쨰 값을 암호화한 값을 비교를 합니다.

즉 처음에는 어떤 값을 보낼꺼야 라는 값을 보내고 두번쨰에는 실제로 값을 보내는 것 입니다.

그후 검증이 통과가 되면 스마트 컨트랙트에서 해당 값들을 활용하여 난수를 생성하게 됩니다.

두번쨰는 BLS Scheme입니다.

일종의 투표와 비슷합니다.

N명의 사용자가 개인키를 쪼개어 가지고 있다가 난수를 생성해야 할 떄에 자시이 가지고 있는 개인키 조각을 제출을 하게 됩니다.

이떄 일정수 이상이 제출이 되면 난수를 생성하게 됩니다.

이러한 방법은 한명이라도 부정직 하다면 난수 생성이 불가능하게 됩니다.

profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글