Android BLE 연결에 애플리케이션 수준 암호화를 추가하려면 어떻게해야합니까?

Aug 17 2020

안드로이드 블루투스 낮은 에너지의 문서는 교환 된 데이터가 민감한 경우 응용 프로그램 계층 암호화에 - 상단 BLE 연결을 추가 할 것을 권장합니다 :

주의 : 사용자가 BLE를 사용하여 자신의 기기를 다른 기기와 페어링하면 두 기기간에 전달되는 데이터에 사용자 기기의 모든 앱에 액세스 할 수 있습니다.

따라서 앱이 민감한 데이터를 캡처하는 경우 해당 데이터의 개인 정보를 보호하기 위해 앱 계층 보안을 구현해야합니다.

"내 자신의 암호화 롤링"을 피하고 싶기 때문에 패킷을 암호화하는 프로덕션 준비 방법을 찾고 있습니다.

한 참가자에서 다른 참가자 (QR 코드)로 하나의 메시지 (예 : 키)를 교환 할 수있는 대역 외 채널이 있습니다. 두 참가자 모두 Android 장치로, 하나는 서버 모드 (주변 장치)로 작동하고 다른 하나는 클라이언트 (중앙)로 작동합니다.

나는 보았다 소음 프로토콜 프레임 워크 TLS에 경량 대안으로,하지만 같은 느낀다는 많은 수작업에 아직 (?).

쉬운 해결책이 있습니까? 이것이 해결 된 문제인 것 같습니다.

답변

1 CBHacking Aug 18 2020 at 05:26

첫째, 조언 한마디 : StackExchange는 특정 제품을 추천하기위한 것이 아니므로 여기서는 상대적으로 일반적입니다. 미래에 이것을 읽는 사람은 새롭고 훨씬 더 나은 대안이있는 세상에있을 수도 있고, 심지어 오래된 가드가 부서진 것으로 밝혀진 세상에있을 수도 있습니다.

사전 공유 키가 주어지면 최소한의 노력으로 메시지 또는 스트림 암호화 (및 데이터 무결성과 같은 관련 보안 요구 사항)를 처리하는 몇 가지 고급 암호화 라이브러리가 있습니다. "쉬운 암호화 라이브러리"를 검색하면 몇 가지 후보를 찾을 수 있습니다. 많은 사람들이 자신의 암호 화폐 롤링에 대한 조언을 무시하고 일부는이를 게시하므로 선택한 라이브러리가 전문가의 검토를 잘 받았는지, 이상적으로는 개발과 관련이 없는지 확인하고 싶습니다.

또한 라이브러리에서 정확히 원하는 (필요한) 것이 무엇인지 고려하고 싶을 것입니다. 임의 길이의 암호화 된 스트림 (또는 메모리에 쉽게 맞지 않는 매우 큰 메시지)을 지원해야합니까? 아니면 간단한 메시지 기반 프로토콜이 작동합니까? 라이브러리는 설치 공간이나 RAM 사용량이 매우 작아야합니까? 특정 CPU에서 매우 빠르나요? 특정 다른 라이브러리와 호환됩니까? 규정 준수를 위해 특정 암호 또는 기타 기본 형식을 사용합니까? 특정 언어로 사용 가능합니까?


2020 년 중반 현재 잘 알려진 몇 가지 예를 보려면 LibSodium 또는 Monocypher를 고려 하십시오 . 둘 다 잘 알려져 있고 검토되었으며 사용 편의성에 중점을 둡니다. 다른 대안으로는 NaCl, LibHydrogen 등이 있습니다. 이들 모두가 보안, 속도 또는 편의성에 똑같이 초점을 맞추는 것은 아닙니다. 예를 들어 TweetNaCl은 원래 NaCl에 비해 최소한의 코드 크기를 강조하여 프로세스에서 많은 속도와 잠재적으로 보안을 희생합니다.