주장하시는 바를 잘 모르겠습니다. Dapp들이 키를 소유하는 것이 더 안전하다는 것으로 해석하면 될까요? 처음에 스팀커넥트가 키를 네트워크로 전송해서 서버에 전송하기때문에 위험하다고 하시기에, 이해 부족으로 하시는 말씀이라 생각하고 아키텍쳐를 설명 드렸는데 다시 다른 이야기를 하시니 혼란스럽네요. 그리고 여전히 스팀커넥트에 대해 명확하시지 않은 듯 합니다.
스팀커넥트는 어디에도 키를 저장하지 않습니다. 심지어 스팀커넥트를 사용하는 디앱들은 키를 전혀 억세스하지못합니다. 이게 이용자들이 거부감없이 디앱을 사용할 수 있도록 하는 핵심이죠.
아시겠지만 스팀커넥트는 지갑과는 전혀 관계가 없고 지갑 없이도 블록체인의 인증이 필요한 서비스를 제공 할 수 있도록 해주는 서비스이죠. 스팀커넥트의 Oauth 과정은 키를 인증하는것이 아니라 위임을 인증하는것이며, 이 oauth 없이 서비스를 만들 방법 자체가 없습니다. 최악의상황에 유출될 수 있는 권한은 포스팅키 권한이며, 포스팅키는 steemit.com 사이트가 localstorage에 암호화 없이 저장하므로 최악의상황치고는 매우 안전하다고 할수 있습니다. 이걸 해서는 안되는거라고 말씀하시는 것은 제 관점에서는 잘못된 정보를 퍼뜨리시는것과 다름 없습니다. 스팀커넥트가 없으면 모든 디앱들이 지갑이 되어야 하고 직접 키를 관리해야 하며 이는 더 큰 위험을 초래합니다. 절대로 권장해서는 안되는 방식입니다. 개발하는 입장에서는 키를 가지고있는게 쉽습니다. 하지만 더 안전하다는것은 동의할수가 없습니다.
Compromized 단말은 모든 권한이든 일부 권한이든 말웨어에게 노출된 상태의 os를 말합니다. 이 상태는 어느 단말에서나 발생할 수 있습니다. 이부분은 부정할 수 없는 사실입니다. 그럼 답은 단순합니다. 당연히 앱 내부적으로 방어할 수 있어야 하죠. 방어 할 수 없다면 사용해서는 안됩니다. 모히또에서는 어떤 방식으로 방어하는지 알고싶습니다. 키 암호화는 얼마나 안전하며 로컬 스토리지 보안과 사용자 핀코드입력 후킹 관한 보안은 구현 되어 있는지를 설명하실 필요가 있습니다. 깃헙을 잠깐 봐서는 못찾겠더라구요.
단말이 Compromized 되면 웹은 뭐가 다르냐 하실텐데, 일단 메이저급 브라우저의 보안수준과 샌드박싱수준은 상상을 초월합니다. 크로미움의 보안수준은 거의 완벽에 가까운데도 불구하고 계속 생겨나는 시큐리티 홀때문에 최고수준의 엔지니어들이 추가적인 보안패치를 끊임없이 합니다. 이러한 수준의 앱 자체 보안을 일반 소규모 앱들이 자체적으로 구현 한다는것은 현실적으로 불가능 하다고 봅니다. 모이또는 실제로 키를 로컬에 저장하는 지갑 앱이므로 상당한 부분의 자체 보안이 요구 됩니다. 은행 앱처럼 말이지요. 혹시 구현되어 있다면 그부분의 깃헙 링크를 주시면 제가 한번 보도록 하겠습니다. 그리고 처음에 여쭤본 키암호화 로직 관련코드도 부탁드리구요.
지갑이 필요하면 지갑을 만들면 되는 것이며 그에 상응하는 수준의 보안 수준을 갖추면 됩니다. 이를 스팀커넥트의 보안이 좋지 않으니 키를 저장하는 지갑 방식이 더 안전하다고 하시는것은 문제의 소지가 있습니다. 액티브키를 넣는것이 불편한것때문에 오너키를 넣는다는것도 논란의 여지가 있습니다.
스팀잇에 계시는 수많은 다른 개발자분들과 아키텍트 분들의견도 들어보면 모두에게 도움이될듯 합니다. 모이또 프로젝트에도 장기적으로 자양분이 될것입니다. 관련 글을 곧 올리도록 하겠습니다. 감사합니다.
논점을 명확히 해야 할 것 같습니다.
스팀콘넥트 관련하여 제가 제기한 문제는 다음 두가지 입니다.
1번은 포스팅 키만 그런 위험이 있는 걸로 이해했습니다. 액티브 키의 위험까지 제기한 것은 제가 잘못 파악한 것으로 정리하겠습니다.
2번은 마이이더월렛 등의 웹페이지 기반 지갑에서 공통적으로 발생하는 문제입니다. [MEW] 마이이더월렛 해킹에 주의하세요 글을 참조하는 게 좋겠네요. 이 부분은 향후 웹페이지 기반의 지갑들에서 크게 골치를 썩을 주제입니다. 스팀컨넥트도 마찬가지구요.
사람들이 스팀컨넥트와 동일한 모양의 가짜 웹페이지를 진짜 스팀컨넥트 페이지와 잘 구별할 거라고 생각하는 건 나이브합니다. 그래서 웹페이지 기반의 지갑은 구조적 보안의 위험을 안고 있다고 제가 말씀드리는 겁니다. 스팀컨넥트가 지갑과는 관계없다고 하셨지만, 송금 등의 트랜잭션을 처리할 수 있는 능력을 가진 건 모두 지갑의 범주로 넣어도 됩니다.
모이또가 보안에서 완벽할 수는 없겠지만, 기존 지갑에서 발생하는 보안의 위협을 매우 신경쓰면서 개발하고 있습니다. 이 부분은 곧 공개될 모이또 백서에서도 주요하게 언급하고 있는 내용입니다. 저희는 적어도 웹페이지 기반의 지갑보다는 앱 기반의 지갑이 구조적으로 안전하다고 주장하고 있습니다.
깃헙에서 __load_key 부분을 왜 못찾으셨는지 모르겠지만, 모이또는 액티브 키를 사용자가 직접 입력한 PIN 번호 (토스에서 사용하는 방식)로 암호화한 뒤, 애플/구글에서 제공하는 키체인에 보관합니다. 지금 푸쉬되어 있는 코드에서는 PIN 번호로 암호화하는 부분에는 주석처리가 되어 있으니, 코드 리뷰시 참고해주시면 감사하겠습니다. 보안 관련 작업이 완료된 버전은 오늘/내일 중에 푸시될 예정입니다.
애플/구글은 일반 앱들에게 키체인이란 이름의 강력한 보안 기능을 제공합니다. 앱 개발을 해보신 적이 있으신지는 모르겠지만, 키체인을 사용하는 일반 앱은 보안에 취약하고 웹브라우저의 보안은 강력하다는 주장은 받아들이지 않겠습니다. 스팀컨넥트를 사용하여 웹브라우저에 저장된 액티브 키는 암호화 되어 있지 않은데 반해, 모이또는 사용자가 입력한 PIN 번호로 한번 더 암호화하여 저장한다는 점도 고려해주시기 바랍니다.
OAuth 프로토콜에 대해서는 저와 이해가 다른 부분이 있는 듯 하나, 곁가지일 뿐이니 논쟁하지는 않겠습니다. 제 일관된 주장은 웹페이지 형태로 지갑기능을 제공하는 서비스의 보안 위험성에 관한 것이니까요.
제가 모이또를 처음 언급한 글에 @absbear 님이 달았던 댓글에서 보안 문제가 언급되어 있어서, 모이또의 보안 수준에 대한 논의를 해봐야겠다고 생각했는데, 이번 논쟁으로 제 주장을 충분히 풀어낼 수 있어서 만족하고 있습니다.
원래 이 논쟁이 시작된 계기인 모이또의 결제 관련 기능에 대해서는 따로 글을 올리도록 하겠습니다.
답변 감사드립니다. 발전적인 논의는 늘 환영합니다.
여러 암호화폐를 보면 지갑 해킹 사건은 한두번 있는 일도 아니니 언제든 다시 발생할수있다고 생각합니다. 해킹당한 지갑들도 당시에는 보안적으로 월등하다고 "알려진" 지갑들이구요. 이경우에 있어서 모이또가 다른 지갑과 다르다고 생각하지 않습니다.
지갑을 사용하는 것은 전적으로 개개인의 자유이므로 피해도 개인들이 감수해야 하는것입니다. 그런데 모이또의경우 스팀시티 커뮤니티에서 밀고있는 지갑이기때문에 개개인의 자세한 조사없이, 대외적인 시큐리티 리뷰 없이 사람들이 많은 사람들이 단말에 설치하게 될것이라는점이 우려되는것입니다. 이것이 과도한 우려라고 생각하시지는 않으시리라 믿습니다.
우선 이부분은 정확히 해야할듯 합니다. 스팀커넥트 사용 과정에서 키는 서버, 클라이언트 그 어디에도 저장되지 않습니다. 포스팅키도 저장되지 않습니다.
스팀커넥트는 지갑이 아닙니다. 지갑 없이 DAPP을 구축할 수 있는 인증서비스죠. 그게 제가 혁신적이라고 생각하는 점이구요. 스팀커넥트가 없었으면 지금까지 믿고 사용할 Steem DAPP이 하나도 없었을겁니다.
그부분 코드를 찾지못했는데 키체인을 사용하신다면 키 스토리지 보안은 문제없을듯합니다. 나머지 보안 관련 코드 푸시되면 kr 개발자분들이 리뷰에 참여하시면 좋겠습니다. 그리고 유토피안등을 통해서 리뷰를 부탁해보는게 어떻까 싶습니다. 앱의 기본적인 샌드박싱에 대해서는 잘 모르는데 설명해주시면 제가 비교하는데 수월할듯 합니다. 어디까지 외부 후킹을 막아주고 어디까지 샌드박싱을 해주는지요?
스팀컨넥트가 지갑이 아니라서 믿을 수 있다는 건 사실이 아닙니다. 그 내용은 스팀페이 사용할 때 액티브 키 탈취하는 시연 영상으로 대신하겠습니다.
https://wowfashionclub.wooplr.com/s/CZedJfhTA?ref=ot.p.i.ic.a