Coder Social home page Coder Social logo

osamhack2022 / app_meerkat_iqdan Goto Github PK

View Code? Open in Web Editor NEW
7.0 7.0 6.0 108.35 MB

미어캣 - 빠르고 안전한 군용 채팅앱 (E2EE)

License: MIT License

JavaScript 0.69% TypeScript 99.26% Shell 0.05%
expo nodejs prisma react react-native socket-io typescript

app_meerkat_iqdan's Introduction

NOTICE-osamhack2022

codespace 사용과 관련하여 저장소가 이전되었습니다. (https://github.com/osamhack2022-v2)

'2022 군장병 온라인 해커톤' 공지사항

'2022년 군장병 온라인 해커톤'에 선발된 군장병 여러분 환영합니다.

군장병 온라인 해커톤은 과년도와 마찬가지로 온라인 과정에서 우수한 성적으로 수료한 장병들을 대상으로 진행합니다. 앞으로 교육기간동안 신청하신 참여 기술 분야에서 개발을 진행하시면 되겠습니다.

제출된 프로젝트 개발물은 1차, 2차 산출물 평가를 통해 총 11점의 우수한 결과물을 선정합니다. 선정된 우수작은 과기정통부장관상, 국방부장관상, 정보통신산업진흥원장상, 각군 참모총장상 등 권위있는 다양한 상격을 시상합니다.

그럼 참가자분들께서는 좋은 결과를 만들 수 있도록 최선을 다해 주시기 바랍니다.

감사합니다.

1. 일시/장소

  • 일시 : 2022년 9월 22일 ~ 10월 27일(약 1개월)
  • 장소 : 비대면 온라인 방식 참여 - 국방오픈소스아카데미(osam.kr), Github Codespace, MS Azure, TinkerCAD, Github 등

2. 주최/주관

  • 주최 : 과학기술정보통신부/국방부
  • 주관 : 정보통신산업진흥원

3. 참석대상

  • 국방오픈소스아카데미 온라인 교육 우수수료자 중 각군에서 최종 선정한 인원 총 200명

4. 지원내용

  • 해커톤 기간 동안 프로젝트 진행하여 산출물을 완료할 수 있도록 전문가 멘토 지원(필수 참여)
  • 개발환경의 형평성 차이의 최소화를 위해 해커톤 기간동안 웹 기반 IDE(통합개발환경)을 제공

5. 프로그램일정

진행일자 절차 항목
9. 7 온라인 우수자 선발 및 발표
9. 7 ∼ 9. 8 참가자 사전조사 *웹기반 통합개발환경(IDE) 희망운영체제(O/S)조사, 개발 선호 요일 및 시간, IDE 초대를 위한 정보 수집(Github계정 또는 이메일)
9. 13 ∼ 9. 18 보안서약서 서명
9.10 ∼ 9.18 사용자 개발환경 테스팅 및 세팅(피드백 접수 및 대응 상시운영)
9.8 ∼ 해커톤 가이드(웹IDE, 멘토, 멘티) & 영상가이드(결과물 제출 요령, IoT분야 시뮬레이터, 개발환경Setting) 제공
9.8 ∼ 9.18 팀 구성
9. 21 멘토 매칭 결과 발표
9. 22 ∼ 10. 27 해커톤 프로젝트 진행 및 멘토링 지원
10. 27 결과물 제출
11. 1 1차 심사 및 평가 (*2→1일로 변경)
11. 3 ~ 11. 7 라이선스 검증
11. 8 2차 심사 및 평가 (*9→8일로 변경)
11. 14 우수작 결과발표
12. 5 (예정) 시상

※ 운영상황에 따라 일부 일정 및 내용은 조정될 수 있습니다.

6. 프로젝트 결과물 제출 양식

항목 제출 방식
개발소스 지정된 Github 조직에 저장소를 생성하여 개발소스 저장 & 팀 블로그 내 링크 저장
라이선스 프로젝트에 맞는 라이선스를 설정하여 해당 license.md 파일 등록
프로젝트 소개 지정양식에 맞게 readme.md 파일 제작(마크다운 작성) & 팀 블로그 내 링크 저장
발표자료 자율 형식으로 PPT파일 또는 PDF파일로 작성하여 팀 블로그 내 저장 (지정 양식 준수, 20장 내외, 20MB 이하)
시연영상 지정된 규격에 맞춰 제작하여 팀 블로그 내 저장(지정된 내용 준수, 5분 내외, MP4-H.264 포멧, 500MB 이하)

7. 평가기준

● 1차 평가(18점 선정)

항목 점수 중점사항
코드 및 구조 적합성 30점 개발물의 소스코드의 안정성 및 합리성
참여 성실도 30점 프로젝트에 대한 기여 정도 및 참여율
활용 가능성 30점 산출물 활용성 정도 및 가능성
기대효과 10점 커뮤니티, 비즈니스 등에 대한 발전 가능성

● 2차 평가(11점 선정)

항목 점수 중점사항
개발문서의 구체성 20점 전반적인 개발문서의 양호도 및 구체적 표현성
독창성 20점 뚜렷한 독창성 유무 정도
발전 가능성 20점 커뮤니티, 비즈니스 등에 대한 발전 가능성
완성도(작품데모) 20점 데모 결과에 대한 시현 능숙도 및 원활한 작동
공개SW 개발방식 20점 팀 역할 분배와 수행에서 보여지는 팀워크/기여

8. 시상

시상내역 비 고 시상 수 시상금
장 관 상 과학기술정보통신부장관상 1팀(점) 300만
장 관 상 국방부장관상 1팀(점) 300만
최우수상 NIPA원장상 3팀(점) 각 100만
참모총장상 육군참모총장상 2팀(점) 각 50만
참모총장상 해군참모총장상 2팀(점) 각 50만
참모총장상 공군참모총장상 2팀(점) 각 50만

해커톤 참가자는 모두 만족도조사를 작성해 주시기 바랍니다.

app_meerkat_iqdan's People

Contributors

djlim98 avatar hyelie avatar seho0808 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

app_meerkat_iqdan's Issues

FE 친구목록 제작

UI 작성
skeleton component 작성
skeleton component animation 적용
TODO : 친구 이름 [계급 + 이름]으로 변경
TODO: 친구 정보 받아오기, 못 받아오면 Loading component 띄워주기
TODO: 목록 꾹 누르면 그 사용자 친구삭제 띄워주기
TODO: header + 누르면 친구 추가 창 뜨게 하기(사용자이름, 군번 입력, 검색 -> 그 사용자 프로필 띄움 + 그 사용자 프로필 띄움.)

FEBE/message 구현

세부사항
foreground의 경우 - socket 통신
background의 경우 - push notification만 줌
offline의 경우 - 아무것도 하지 않음. online으로 전환될 때 읽지 않은 메시지를 한 번에 보내주기.

GCM의 경우에 offline이라면 알아서 message queue에 넣고 발송해 준다고 한다.
또 socketio에 있는 volatile이라는 기능도 있는데.. 고민해 봐야 할 듯. [링크](https://socket.io/docs/v3/emitting-events/
volatile의 경우 메시지 유실 가능성이 커서 유기.

Socket 생성 관련 이슈 스터디 필요

현재 Socket init 부분이 복잡함.
깔끔하게 바꾸기 위한 공부 필요.

  1. useContext initialization이 왜 컴포넌트 단위가 아니라 global 단위만 되는지 확인.
  2. socket.disconnect가 socket 오브젝트 자체를 없애는지 확인.

FE E2EE

1:1의 경우

1:1 e2ee의 경우 비대칭키 암호화를 사용합니다.

먼저 사용자 A, B가 있을 때, 각각 public key, secret key를 생성한 후 public key를 교환합니다.

A가 B에게 메시지를 보낼 때는 B의 public key로 암호화해서 전송하고, B는 받은 암호문을 B의 private key로 복호화합니다.

(비대칭키 암호화 - public key로 암호화 된 것은 private key로 복호화 가능, 그 반대도 성립)

n명인 경우

n명인 경우 논의가 조금 필요합니다.

현재 생각하고 있는 방법은 다음과 같습니다.

방장 A가 shared key를 생성하고 참가하는 모든 사람들(B, C, ...)에 대해 1:1 비대칭키 암호화 방법로 shared secret key(암호화된 공유 키)를 전송합니다. (사람이 5명이라면 5번 전송해야 할 것입니다)

shared secret key를 받은 사람이 그 사람의 private key로 복호화하면, 이 shared key가 그룹 채팅의 key가 될 것입니다.

이후로 전송하는 모든 메시지는 shared key로 암호화하고, 받은 쪽에서도 shared key로 복호화하는 방식을 택할 수 있습니다.

그러나 이 방식은 처음 방을 생성할 때 overhead가 크다는 단점이 있고, 또 서버에서 public key를 잘 관리해야 하기도 합니다. 따라서 서버 DB에 public key를 저장할 때 암호화를 해야 할 것 같습니다.
-> 해당 방식으로 구현했습니다.

이외의 아이디어가 있다면 논의 부탁드립니다.

현재 논의사항

  1. private key / public key는 각각의 그룹마다 두는 게 맞을까? 아니면 기기마다?

그룹(채팅방마다 1개씩)마다 둔다면, 휴대폰이 꺼진 경우 public / private key를 받아오지 못함. 앱 초기 설정 시 기기마다 public key 1개씩을 할당하고, 서버 DB에서는 {사용자 ID, public key}로 관리할 것 같음.
-> 서버에 모든 사용자의 public key를 올려두고, 필요 시 받아오는 방식으로 결정.

참고자료

ios-security 60p에서 알 수 있듯 IOS에서는 public key를 서버에 올리고, 메시지를 보낼 때 보낼 대상의 public key로 암호화해서 전송합니다.

이 방법 이외에도 텔레그램에서 사용하고 있는 디피-헬만 알고리즘 (shared key를 안전하게 전달하는 방법)도 있습니다. 그러나 이 경우 man in the middle(간단하게 스니핑이라고 생각하면 됩니다)에 취약합니다.

whatsapp-security

diffie-hellman algorithm wikipedia

diffie-hellman algorithm for multiple people

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.