Merge branch 'main' into adb/integrated-videocalls

This commit is contained in:
adb 2025-08-18 14:53:03 +02:00 committed by GitHub
commit ca27be240e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
200 changed files with 6821 additions and 6987 deletions

View file

@ -2,11 +2,60 @@
## Unreleased ## Unreleased
* target Android 15
* improve readability of info messages in dark mode
* fix Direct Share shortcuts
## v2.11.0
2025-08
* add "After 1 year" option to disappearing messages
* improve image quality when setting group avatars
* add Estonian translation, update other translations
* allow to clone email chats
* fix some small bugs
* update to core 2.11.0
## v2.10.0
2025-08
* fix "Archived" item's layout in chat-list
* don't enlarge "Saved Messages" and "Devices Messages" avatars on click
* share email address for email contacts instead of vCard
* open existing encrypted chat when opening a mailto link or clicking an email address in a message bubble
* update to core 2.10.0
## v2.9.0
2025-07
* hide contact email addresses in search results
* disable non-functional message editing and ephemeral messages timer settings in classic email thread chat
* don't enlarge email chats avatar placeholder
* improve message date/status footer layout, also in RTL languages
* display correct text when receiving a "Disappearing messages enabled" system message
* Update to core 2.9.0
## v2.8.0
2025-07
* Profiles focus on recognizing contacts
* See the number of media directly in the profile, no need to tap around
* Clearer app lists by removing redundant "App" subtitle * Clearer app lists by removing redundant "App" subtitle
* New button for quick access to the apps sent in current chat * New button for quick access to the apps sent in current chat
* New icon for the in-chat apps button * New icon for the in-chat apps button
* Improve hint for app drafts * Improve hint for app drafts
* Add Text-To-Speech (TTS) support for in-chat apps * Add Text-To-Speech (TTS) support for in-chat apps
* New icon for the QR icon
* Start rebuilding the experimental broadcast lists
into proper channels - note that this is work-in-progress
* Improved separation between unencrypted chats/contacts and encrypted ones, avoiding mixing of encrypted and unencrypted messages in the same chat
* Removed padlocks, as encrypted is the default "normal" state. Instead, unencrypted email is marked with a small email / letter (✉️) icon
* Classic email chats/threads get a big email / letter icon making it easy to recognize
* After some time, add a device message asking to donate. Can't wait? Donate today at https://delta.chat/donate
* Allow to sort profiles up in the profile switcher
* Add new option to create unencrypted email thread
* Green checkmarks are removed where they mostly refer to guaranteed encryption, which is the default now. They are still used for profile's "Introduced by"
* Update to core 2.8.0
## v1.58.4 ## v1.58.4
2025-05 2025-05

View file

@ -1,5 +1,5 @@
plugins { plugins {
id 'com.android.application' version '8.5.2' id 'com.android.application' version '8.11.1'
id 'com.google.gms.google-services' version '4.4.1' id 'com.google.gms.google-services' version '4.4.1'
} }
@ -15,7 +15,7 @@ repositories {
android { android {
namespace "org.thoughtcrime.securesms" namespace "org.thoughtcrime.securesms"
flavorDimensions "none" flavorDimensions "none"
compileSdk 34 compileSdk 35
// Set NDK version to strip native libraries. // Set NDK version to strip native libraries.
// Even though we compile our libraries outside Gradle with `scripts/ndk-make.sh`, // Even though we compile our libraries outside Gradle with `scripts/ndk-make.sh`,
@ -27,14 +27,14 @@ android {
useLibrary 'org.apache.http.legacy' useLibrary 'org.apache.http.legacy'
defaultConfig { defaultConfig {
versionCode 722 versionCode 730
versionName "1.58.4" versionName "2.11.0"
applicationId "com.b44t.messenger" applicationId "com.b44t.messenger"
multiDexEnabled true multiDexEnabled true
minSdkVersion 21 minSdkVersion 21
targetSdkVersion 34 targetSdkVersion 35
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
@ -149,9 +149,9 @@ android {
dependencies { dependencies {
implementation 'androidx.sharetarget:sharetarget:1.2.0' implementation 'androidx.sharetarget:sharetarget:1.2.0'
implementation 'androidx.webkit:webkit:1.12.1' implementation 'androidx.webkit:webkit:1.14.0'
implementation 'androidx.multidex:multidex:2.0.1' implementation 'androidx.multidex:multidex:2.0.1'
implementation 'androidx.appcompat:appcompat:1.7.0' implementation 'androidx.appcompat:appcompat:1.7.1'
implementation 'com.google.android.material:material:1.12.0' implementation 'com.google.android.material:material:1.12.0'
implementation 'androidx.legacy:legacy-support-v13:1.0.0' implementation 'androidx.legacy:legacy-support-v13:1.0.0'
implementation ('androidx.preference:preference:1.2.1') { implementation ('androidx.preference:preference:1.2.1') {
@ -159,7 +159,7 @@ dependencies {
exclude group: 'androidx.lifecycle', module:'lifecycle-viewmodel-ktx' exclude group: 'androidx.lifecycle', module:'lifecycle-viewmodel-ktx'
} }
implementation 'androidx.legacy:legacy-preference-v14:1.0.0' implementation 'androidx.legacy:legacy-preference-v14:1.0.0'
implementation 'androidx.exifinterface:exifinterface:1.3.7' implementation 'androidx.exifinterface:exifinterface:1.4.1'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
implementation 'androidx.lifecycle:lifecycle-common-java8:2.6.2' implementation 'androidx.lifecycle:lifecycle-common-java8:2.6.2'
implementation 'androidx.lifecycle:lifecycle-viewmodel:2.6.2' implementation 'androidx.lifecycle:lifecycle-viewmodel:2.6.2'
@ -174,51 +174,47 @@ dependencies {
implementation ('com.journeyapps:zxing-android-embedded:4.3.0') { transitive = false } // QR Code scanner implementation ('com.journeyapps:zxing-android-embedded:4.3.0') { transitive = false } // QR Code scanner
implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.1' // used as JSON library implementation 'com.fasterxml.jackson.core:jackson-databind:2.11.1' // used as JSON library
implementation 'com.google.code.gson:gson:2.12.1' // used as JSON library. implementation 'com.google.code.gson:gson:2.12.1' // used as JSON library.
implementation "me.leolin:ShortcutBadger:1.1.16" // display messagecount on the home screen icon.
implementation 'com.jpardogo.materialtabstrip:library:1.0.9' // used in the emoji selector for the tab selection.
implementation 'com.github.Baseflow:PhotoView:2.3.0' // does the zooming on photos / media implementation 'com.github.Baseflow:PhotoView:2.3.0' // does the zooming on photos / media
implementation 'com.github.penfeizhou.android.animation:awebp:3.0.2' // animated webp support. implementation 'com.github.penfeizhou.android.animation:awebp:3.0.5' // animated webp support.
implementation 'com.caverock:androidsvg-aar:1.4' // SVG support. implementation 'com.caverock:androidsvg-aar:1.4' // SVG support.
implementation 'com.github.bumptech.glide:glide:4.12.0' implementation 'com.github.bumptech.glide:glide:4.16.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.16.0'
annotationProcessor 'androidx.annotation:annotation:1.9.1' annotationProcessor 'androidx.annotation:annotation:1.9.1'
implementation 'com.makeramen:roundedimageview:2.1.0' // crops the avatars to circles implementation 'com.makeramen:roundedimageview:2.3.0' // crops the avatars to circles
implementation 'com.pnikosis:materialish-progress:1.5' // used only in the "Progress Wheel" in Share Activity.
implementation 'com.github.amulyakhare:TextDrawable:558677ea31' // number of unread messages, implementation 'com.github.amulyakhare:TextDrawable:558677ea31' // number of unread messages,
// the one-letter circle for the contacts (when there is not avatar) and a white background. // the one-letter circle for the contacts (when there is not avatar) and a white background.
implementation 'com.googlecode.mp4parser:isoparser:1.0.6' // MP4 recoding; upgrading eg. to 1.1.22 breaks recoding, however, i have not investigated further, just reset to 1.0.6 implementation 'com.googlecode.mp4parser:isoparser:1.0.6' // MP4 recoding; upgrading eg. to 1.1.22 breaks recoding, however, i have not investigated further, just reset to 1.0.6
implementation ('com.davemorrissey.labs:subsampling-scale-image-view:3.6.0') { // for the zooming on photos / media implementation ('com.davemorrissey.labs:subsampling-scale-image-view:3.10.0') { // for the zooming on photos / media
exclude group: 'com.android.support', module: 'support-annotations' exclude group: 'com.android.support', module: 'support-annotations'
} }
implementation 'com.annimon:stream:1.1.8' // brings future java streams api to SDK Version < 24
// Replacement for ContentResolver // Replacement for ContentResolver
// that protects against the Surreptitious Sharing attack. // that protects against the Surreptitious Sharing attack.
// <https://github.com/cketti/SafeContentResolver> // <https://github.com/cketti/SafeContentResolver>
implementation 'de.cketti.safecontentresolver:safe-content-resolver-v21:1.0.0' implementation 'de.cketti.safecontentresolver:safe-content-resolver-v21:1.0.0'
gplayImplementation('com.google.firebase:firebase-messaging:24.1.0') { // for PUSH notifications gplayImplementation('com.google.firebase:firebase-messaging:24.1.2') { // for PUSH notifications, don't upgrade: v25.0.0 requires minSdk>=23
exclude group: 'com.google.firebase', module: 'firebase-core' exclude group: 'com.google.firebase', module: 'firebase-core'
exclude group: 'com.google.firebase', module: 'firebase-analytics' exclude group: 'com.google.firebase', module: 'firebase-analytics'
exclude group: 'com.google.firebase', module: 'firebase-measurement-connector' exclude group: 'com.google.firebase', module: 'firebase-measurement-connector'
} }
testImplementation 'junit:junit:4.13.2' testImplementation 'junit:junit:4.13.2'
testImplementation 'org.assertj:assertj-core:1.7.1' testImplementation 'org.assertj:assertj-core:3.27.3'
testImplementation 'org.mockito:mockito-core:1.9.5' testImplementation 'org.mockito:mockito-core:5.18.0'
testImplementation 'org.powermock:powermock-api-mockito:1.6.1' testImplementation 'org.powermock:powermock-api-mockito:1.7.4'
testImplementation 'org.powermock:powermock-module-junit4:1.6.1' testImplementation 'org.powermock:powermock-module-junit4:2.0.9'
testImplementation 'org.powermock:powermock-module-junit4-rule:1.6.1' testImplementation 'org.powermock:powermock-module-junit4-rule:2.0.9'
testImplementation 'org.powermock:powermock-classloading-xstream:1.6.1' testImplementation 'org.powermock:powermock-classloading-xstream:2.0.9'
androidTestImplementation 'androidx.test:runner:1.6.2' androidTestImplementation 'androidx.test:runner:1.7.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.7.0'
androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.6.1' androidTestImplementation 'androidx.test.espresso:espresso-contrib:3.7.0'
androidTestImplementation 'androidx.test:rules:1.6.1' androidTestImplementation 'androidx.test:rules:1.7.0'
androidTestImplementation 'androidx.test.ext:junit:1.2.1' androidTestImplementation 'androidx.test.ext:junit:1.3.0'
androidTestImplementation 'com.android.support:support-annotations:28.0.0' androidTestImplementation 'com.android.support:support-annotations:28.0.0'
androidTestImplementation ('org.assertj:assertj-core:1.7.1') { androidTestImplementation ('org.assertj:assertj-core:3.27.3') {
exclude group: 'org.hamcrest', module: 'hamcrest-core' exclude group: 'org.hamcrest', module: 'hamcrest-core'
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 292 KiB

After

Width:  |  Height:  |  Size: 350 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 818 KiB

After

Width:  |  Height:  |  Size: 751 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 118 KiB

After

Width:  |  Height:  |  Size: 657 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 272 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 287 KiB

After

Width:  |  Height:  |  Size: 916 KiB

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 648 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 494 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 556 KiB

View file

@ -15,7 +15,7 @@
pkgs = import nixpkgs { inherit system overlays; }; pkgs = import nixpkgs { inherit system overlays; };
android-sdk = android.sdk.${system} (sdkPkgs: android-sdk = android.sdk.${system} (sdkPkgs:
with sdkPkgs; [ with sdkPkgs; [
build-tools-34-0-0 build-tools-35-0-0
cmdline-tools-latest cmdline-tools-latest
platform-tools platform-tools
platforms-android-34 platforms-android-34

View file

@ -1,7 +1,7 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionSha256Sum=544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d distributionSha256Sum=20f1b1176237254a6fc204d8434196fa11a4cfb387567519c61556e8710aed78
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
networkTimeout=10000 networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View file

@ -31,5 +31,6 @@ LOCAL_CFLAGS += -Drestrict='' -D__EMX__ -DFIXED_POINT -DUSE_ALLOCA -DHAVE_LRINT
LOCAL_CFLAGS += -DANDROID_NDK -DDISABLE_IMPORTGL -fno-strict-aliasing -DAVOID_TABLES -DANDROID_TILE_BASED_DECODE -DANDROID_ARMV6_IDCT -ffast-math -D__STDC_CONSTANT_MACROS LOCAL_CFLAGS += -DANDROID_NDK -DDISABLE_IMPORTGL -fno-strict-aliasing -DAVOID_TABLES -DANDROID_TILE_BASED_DECODE -DANDROID_ARMV6_IDCT -ffast-math -D__STDC_CONSTANT_MACROS
LOCAL_SRC_FILES := dc_wrapper.c LOCAL_SRC_FILES := dc_wrapper.c
LOCAL_LDFLAGS += -Wl,--build-id=none
include $(BUILD_SHARED_LIBRARY) include $(BUILD_SHARED_LIBRARY)

View file

@ -1261,6 +1261,12 @@ JNIEXPORT jint Java_com_b44t_messenger_DcChat_getColor(JNIEnv *env, jobject obj)
} }
JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isEncrypted(JNIEnv *env, jobject obj)
{
return dc_chat_is_encrypted(get_dc_chat(env, obj))!=0;
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isUnpromoted(JNIEnv *env, jobject obj) JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isUnpromoted(JNIEnv *env, jobject obj)
{ {
return dc_chat_is_unpromoted(get_dc_chat(env, obj))!=0; return dc_chat_is_unpromoted(get_dc_chat(env, obj))!=0;
@ -1290,11 +1296,6 @@ JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isProtected(JNIEnv *env, jobje
return dc_chat_is_protected(get_dc_chat(env, obj))!=0; return dc_chat_is_protected(get_dc_chat(env, obj))!=0;
} }
JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isProtectionBroken(JNIEnv *env, jobject obj)
{
return dc_chat_is_protection_broken(get_dc_chat(env, obj))!=0;
}
JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isSendingLocations(JNIEnv *env, jobject obj) JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isSendingLocations(JNIEnv *env, jobject obj)
{ {
@ -1850,6 +1851,12 @@ JNIEXPORT jboolean Java_com_b44t_messenger_DcContact_isVerified(JNIEnv *env, job
} }
JNIEXPORT jboolean Java_com_b44t_messenger_DcContact_isKeyContact(JNIEnv *env, jobject obj)
{
return dc_contact_is_key_contact(get_dc_contact(env, obj))==1;
}
JNIEXPORT jint Java_com_b44t_messenger_DcContact_getVerifierId(JNIEnv *env, jobject obj) JNIEXPORT jint Java_com_b44t_messenger_DcContact_getVerifierId(JNIEnv *env, jobject obj)
{ {
return dc_contact_get_verifier_id(get_dc_contact(env, obj)); return dc_contact_get_verifier_id(get_dc_contact(env, obj));

View file

@ -50,6 +50,14 @@ if test -z "$ANDROID_NDK_ROOT"; then
exit 1 exit 1
fi fi
# for reproducible build:
export RUSTFLAGS="-C link-args=-Wl,--build-id=none --remap-path-prefix=$HOME/.cargo= --remap-path-prefix=$(realpath $(dirname $(dirname "$0")))="
export SOURCE_DATE_EPOCH=1
# always use the same path to NDK:
rm -f /tmp/android-ndk-root
ln -s "$ANDROID_NDK_ROOT" /tmp/android-ndk-root
ANDROID_NDK_ROOT=/tmp/android-ndk-root
echo Setting CARGO_TARGET environment variables. echo Setting CARGO_TARGET environment variables.
if test -z "$NDK_HOST_TAG"; then if test -z "$NDK_HOST_TAG"; then
@ -66,11 +74,9 @@ if test -z "$NDK_HOST_TAG"; then
fi fi
if test -z "$CARGO_TARGET_DIR"; then if test -z "$CARGO_TARGET_DIR"; then
CARGO_TARGET_DIR=target export CARGO_TARGET_DIR=/tmp/deltachat-build
fi fi
unset RUSTFLAGS
TOOLCHAIN="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$NDK_HOST_TAG" TOOLCHAIN="$ANDROID_NDK_ROOT/toolchains/llvm/prebuilt/$NDK_HOST_TAG"
export CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang" export CARGO_TARGET_ARMV7_LINUX_ANDROIDEABI_LINKER="$TOOLCHAIN/bin/armv7a-linux-androideabi21-clang"
export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="$TOOLCHAIN/bin/aarch64-linux-android21-clang" export CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER="$TOOLCHAIN/bin/aarch64-linux-android21-clang"
@ -154,8 +160,6 @@ if test -z $1 || test $1 = x86_64; then
cp "$CARGO_TARGET_DIR/x86_64-linux-android/$RELEASE/libdeltachat.a" "$jnidir/x86_64" cp "$CARGO_TARGET_DIR/x86_64-linux-android/$RELEASE/libdeltachat.a" "$jnidir/x86_64"
fi fi
rm -fr "$TMPLIB"
echo -- ndk-build -- echo -- ndk-build --
cd ../.. cd ../..

View file

@ -288,6 +288,10 @@
android:theme="@style/TextSecure.LightNoActionBar" android:theme="@style/TextSecure.LightNoActionBar"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/> android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
<activity android:name=".AllMediaActivity"
android:theme="@style/TextSecure.LightNoActionBar"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize"/>
<activity android:name=".DummyActivity" <activity android:name=".DummyActivity"
android:theme="@android:style/Theme.NoDisplay" android:theme="@android:style/Theme.NoDisplay"
android:enabled="true" android:enabled="true"

View file

@ -36,27 +36,24 @@
<li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li> <li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li>
</ul> </ul>
</li> </li>
<li><a href="#encryption-and-security">Encryption and Security</a> <li><a href="#e2ee">Encryption and Security</a>
<ul> <ul>
<li><a href="#which-standards-are-used-for-end-to-end-encryption">Which standards are used for end-to-end encryption?</a></li> <li><a href="#which-standards-are-used-for-end-to-end-encryption">Which standards are used for end-to-end encryption?</a></li>
<li><a href="#whene2e">How can i know if messages are end-to-end encrypted?</a></li> <li><a href="#whene2e">How can i know if messages are end-to-end encrypted?</a></li>
<li><a href="#howtoe2ee">How can I get guaranteed end-to-end encryption and green checkmarks?</a></li> <li><a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption">Can i still receive or send mails without end-to-end encryption?</a></li>
<li><a href="#e2eeguarantee">What does the green checkmark and “guaranteed end-to-end encryption” mean?</a></li> <li><a href="#howtoe2ee">How can I establish a chat with a new contact?</a></li>
<li><a href="#nocryptanymore">A contact “sent a message from another device”, what can i do?</a></li> <li><a href="#e2eeguarantee">What does the green checkmark in a contact profile mean?</a></li>
<li><a href="#are-attachments-pictures-files-audio-etc-end-to-end-encrypted">Are attachments (pictures, files, audio etc.) end-to-end encrypted?</a></li> <li><a href="#are-attachments-pictures-files-audio-etc-end-to-end-encrypted">Are attachments (pictures, files, audio etc.) end-to-end encrypted?</a></li>
<li><a href="#openpgp-secure">Is OpenPGP secure?</a></li> <li><a href="#openpgp-secure">Is OpenPGP secure?</a></li>
<li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end -encryption?</a></li> <li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end-encryption?</a></li>
<li><a href="#is-delta-chat-vulnerable-to-efail">Is Delta Chat vulnerable to EFAIL?</a></li> <li><a href="#is-delta-chat-vulnerable-to-efail">Is Delta Chat vulnerable to EFAIL?</a></li>
<li><a href="#tls">Is a message exposed in cleartext if end-to-end encryption is not available?</a></li> <li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
<li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li> <li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li>
<li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li> <li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li>
<li><a href="#how-can-i-check-encryption-information">How can i check encryption information?</a></li> <li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
<li><a href="#how-can-i-check-the-encryption-status-of-messages">How can I check the encryption status of messages?</a></li>
<li><a href="#why-do-i-see-unencrypted-messages">Why do I see unencrypted messages?</a></li>
<li><a href="#how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app">How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app?</a></li>
<li><a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion">How can I ensure message end-to-end encryption and deletion?</a></li>
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li> <li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of Delta Chat as safe as Signal?</a></li> <li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
<li><a href="#how-can-i-manually-check-encryption-information">How can I manually check encryption information?</a></li>
<li><a href="#importkey">Lze znovu použít můj stávající soukromý klíč?</a></li> <li><a href="#importkey">Lze znovu použít můj stávající soukromý klíč?</a></li>
<li><a href="#security-audits">Was Delta Chat independently audited for security vulnerabilities?</a></li> <li><a href="#security-audits">Was Delta Chat independently audited for security vulnerabilities?</a></li>
</ul> </ul>
@ -90,7 +87,7 @@
<ul> <ul>
<li><a href="#jaká-oprávnění-delta-chat-potřebuje">Jaká oprávnění Delta Chat potřebuje?</a></li> <li><a href="#jaká-oprávnění-delta-chat-potřebuje">Jaká oprávnění Delta Chat potřebuje?</a></li>
<li><a href="#pracuje-delta-chat-s-mým-poskytovatelem-e-mailu">Pracuje Delta Chat s <em>mým</em> poskytovatelem e-mailu?</a></li> <li><a href="#pracuje-delta-chat-s-mým-poskytovatelem-e-mailu">Pracuje Delta Chat s <em>mým</em> poskytovatelem e-mailu?</a></li>
<li><a href="#i-want-to-manage-my-own-e-mail-server-for-delta-chat-what-do-you-recommend">I want to manage my own e-mail server for Delta Chat. What do you recommend?</a></li> <li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
<li><a href="#proč-musím-delta-chatu-zadat-mé-e-mailové-heslo-je-to-bezpečné">Proč musím Delta Chatu zadat mé e-mailové heslo? Je to bezpečné?</a></li> <li><a href="#proč-musím-delta-chatu-zadat-mé-e-mailové-heslo-je-to-bezpečné">Proč musím Delta Chatu zadat mé e-mailové heslo? Je to bezpečné?</a></li>
<li><a href="#jaké-zprávy-delta-chat-zobrazuje">Jaké zprávy Delta Chat zobrazuje?</a></li> <li><a href="#jaké-zprávy-delta-chat-zobrazuje">Jaké zprávy Delta Chat zobrazuje?</a></li>
<li><a href="#umí-delta-chat-pracovat-s-e-maily-v-html">Umí Delta Chat pracovat s e-maily v HTML?</a></li> <li><a href="#umí-delta-chat-pracovat-s-e-maily-v-html">Umí Delta Chat pracovat s e-maily v HTML?</a></li>
@ -722,10 +719,10 @@ that achieves “instant delivery” of messages for all chatmail servers
including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>. including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>.
Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p> Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p>
<h2 id="encryption-and-security"> <h2 id="e2ee">
Encryption and Security <a href="#encryption-and-security" class="anchor"></a> Encryption and Security <a href="#e2ee" class="anchor"></a>
</h2> </h2>
@ -738,18 +735,26 @@ Welcome to the power of the interoperable and massive chatmail and e-mail system
</h3> </h3>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically <p>Delta Chat uses a <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>
establishing end-to-end encryption with contacts and group chats. to provide automatic end-to-end encryption using these protocols:</p>
Autocrypt uses a limited and <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>.
End-to-End encrypted messages are marked with a padlock
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../lock-icon.png" alt="padlock" />.</p>
<p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a> <ul>
are used for establishing chats with guaranteed end-to-end encryption <li>
which protects against network attacks and compromised servers. <p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join</a>
Chats marked with a green checkmark to exchange encryption setup information through QR-code scanning or “invite links”.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> </li>
guarantee end-to-end encrypted messages.</p> <li>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically
establishing end-to-end encryption between contacts and all members of a group chat.</p>
</li>
<li>
<p><a href="https://github.com/chatmail/core/blob/main/spec.md#attaching-a-contact-to-a-message">Sharing a contact to a
chat</a>
enables receivers to use end-to-end encryption with the contact.</p>
</li>
</ul>
<p>Delta Chat does not query, publish or interact with any OpenPGP key servers.</p>
<h3 id="whene2e"> <h3 id="whene2e">
@ -759,28 +764,37 @@ guarantee end-to-end encrypted messages.</p>
</h3> </h3>
<p>All end-to-end encrypted messages carry a padlock:</p> <p>All messages in Delta Chat are <strong>end-to-end encrypted by default</strong>.
Since the Delta Chat Version 2 release series (July 2025)
there are no lock or similar markers on end-to-end encrypted messages, anymore.</p>
<p><img style="width:160px; margin:1px" src="../lock-screenshot.png" alt="padlock in bubble" /></p> <h3 id="can-i-still-receive-or-send-mails-without-end-to-end-encryption">
<p>End-to-end encryption is guaranteed if there is a green checkmark next to the chat title:</p>
<p><img style="width:211px; margin:1px" src="../green-checkmark-screenshot.png" alt="green checkmark in title" /></p>
<h3 id="howtoe2ee">
How can I get guaranteed end-to-end encryption and green checkmarks? <a href="#howtoe2ee" class="anchor"></a> Can i still receive or send mails without end-to-end encryption? <a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption" class="anchor"></a>
</h3> </h3>
<p>If you have a second communication channel with your chat partner, <p>If you use default <a href="https://chatmail.at/relays">chatmail relays</a>,
like a video chat or a different messenger, it is impossible to receive or send messages without end-to-end encryption.</p>
you can generate an invite link.</p>
<p>If you are together in person, <p>If you instead create a profile using a classic e-mail server,
you can show a QR code to your chat partner.</p> you can send and receive messages without end-to-end encryption.
Such messages lacking end-to-end encryption are marked with an e-mail icon
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
<h3 id="howtoe2ee">
How can I establish a chat with a new contact? <a href="#howtoe2ee" class="anchor"></a>
</h3>
<p>You can send an invite link through another private chat,
show an invitation QR code when next to each other or in a video call,
or click on a “contact” that was shared in a chat.</p>
<ul> <ul>
<li> <li>
@ -795,135 +809,54 @@ on the Delta Chat app main screen.</p>
</li> </li>
</ul> </ul>
<p>Let your chat partner scan the QR image <p>Ask your chat partner to scan the QR image
with their Delta Chat app, with their Delta Chat app,
or click “Copy” or “Share” to create an invite link or click “Copy” or “Share” to create an invite link
and share it with your chat partner.</p> and share it with your chat partner.</p>
<p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">Secure-Join network messages are exchanged</a> between both devices.</p> <p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">end-to-end encryption is getting established</a>.</p>
<ul> <ul>
<li> <li>
<p>If both devices are online, <p>If both sides are online, they will soon see a (group or direct) chat
both sides will eventually see a (group or direct) chat with a green checkmark and can start messaging securely.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
next to the title.</p>
</li> </li>
<li> <li>
<p>If one of the devices is offline, the green checkmarks will only <p>If one side is offline or in bad network,
appear later when the device is internet-connected again the ability to chat is delayed until connectivity is restored.</p>
and the Secure-Join network protocol completed.</p>
</li> </li>
</ul> </ul>
<p>Congratulations! <p>Congratulations!
You now will automatically use guaranteed end-to-end encryption You now will automatically use end-to-end encryption
with this contact and both of you can add each other to green-checkmarked groups with this contact.
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />, If you add each other to chat groups,
thereby automatically spreading guaranteed end-to-end encryption among its members.</p> end-to-end encryption will be established among all members.</p>
<h3 id="e2eeguarantee"> <h3 id="e2eeguarantee">
What does the green checkmark and “guaranteed end-to-end encryption” mean? <a href="#e2eeguarantee" class="anchor"></a> What does the green checkmark in a contact profile mean? <a href="#e2eeguarantee" class="anchor"></a>
</h3> </h3>
<p>Chat titles with green checkmarks <p>A contact profile might show a green checkmark
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
mean that all messages in the chat will be end-to-end encrypted and an “Introduced by” line.
and can not be read or altered by compromised e-mail servers or Internet providers.
Joining green-checkmarked group chats
safely spreads everybodys encryption information (and green checkmarks)
in a manner that guarantees end-to-end encryption in the group and among members.</p>
<p>Contact profiles with green checkmarks
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
mean that messaging a contact is currently guaranteed to be end-to-end encrypted.
Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you
or was introduced by a another green-checkmarked contact. or was introduced by a another green-checkmarked contact.
Introductions happen automatically when adding members to groups. Introductions happen automatically when adding members to groups.
Whoever adds a contact to a green-checkmarked group becomes an introducer Whoever adds a green-checkmarked contact to a group with only green-checkmarked members
to those members who didnt yet know about the added contact. becomes an introducer.
In a contact profile you can tap on the “Introduced by …” text repeatedly In a contact profile you can tap on the “Introduced by …” text repeatedly
until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p> until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p>
<p>Note that in a contact profile you may see and tap introducers
but there is no green checkmark in the profile title.
This usually means that the contact <a href="#nocryptanymore">“sent a message from another device”</a>.</p>
<p>For more in-depth discussion of “guaranteed end-to-end encryption” <p>For more in-depth discussion of “guaranteed end-to-end encryption”
please see <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a> please see <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a>
and specifically read about “Verified Groups”, the technical term and specifically read about “Verified Groups”, the technical term
of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.</p> of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.</p>
<h3 id="nocryptanymore">
A contact “sent a message from another device”, what can i do? <a href="#nocryptanymore" class="anchor"></a>
</h3>
<p>Your chat with a contact lost guaranteed end-to-end encryption.
The green checkmark was removed for this chat and contact when you see this warning.
<strong>If you find the sudden drop of guaranteed end-to-end encryption
surprising for this contact then dont accept the warning!</strong>
Instead check with your contact through a second channel
like a video call, other messenger or a phone call,
to find out what happened.</p>
<p>If your contact actually caused the drop of guaranteed end-to-end encryption
please see the next paragraphs for common reasons and their mitigations.
Regardless, all other green-checkmarked chats remain guaranteed end-to-end encrypted
even if the contact is a member there.</p>
<p><strong>Your contact is using Delta Chat on a second device (phone or laptop)</strong></p>
<p>If they have another device with a Delta Chat app running,
they should remove the profile from the new device
and add it <a href="#multiclient">as a second device as described here</a>.
As soon as they message you afterwards, the warning will be gone
and guaranteed encryption is established with both devices of your contact.</p>
<p><strong>Your contact reinstalled Delta Chat using their old account login</strong></p>
<p>If they have <a href="#backup">a backup file</a>,
they should remove the profile from the new device
and rather import the backup file to re-create their profile.
As soon as they message you afterwards, the warning will be gone
and guaranteed encryption is re-established for this contact.</p>
<p>If they dont have a backup file, its best to perform a <a href="#howtoe2ee">QR scan</a>
with your chat partner to re-establish guaranteed end-to-end encryption.</p>
<p><strong>Your contact sent a mail through a webmail interface or another e-mail app
and will get back to using Delta Chat soon again.</strong></p>
<p>If you are sure that the contact sometimes uses webmail,
or another mail app lacking end-to-end encryption,
then you may accept the warning.
As soon as your contact uses Delta Chat again,
guaranteed end-to-end encryption will be automatically re-established.</p>
<p><strong>Your contact stopped using Delta Chat entirely</strong></p>
<p>Sometimes remaining in contact is more important than end-to-end encryption.
<a href="#tls">“Transport Layer Encryption” (TLS)</a> may still meaningfully protect
the confidentiality of your messages between your device and the e-mail server.
But without end-to-end encryption you and your contact are trusting your e-mail server
to not read or manipulate your messages, and to not hand them to third parties.</p>
<p>In any case, you can not do much else than accept the warning.
Please also remove the contact from any active green-checkmarked group
which you can find in “Shared chats” in the Contact profile.
This spares your contact from getting “unreadable” messages.</p>
<p>If the contact removed Delta Chat because of buggy or undesirable behaviour,
please consider posting to our <a href="https://support.delta.chat">support forum</a>
to help us identify and address common problems. Thanks!</p>
<h3 id="are-attachments-pictures-files-audio-etc-end-to-end-encrypted"> <h3 id="are-attachments-pictures-files-audio-etc-end-to-end-encrypted">
@ -948,8 +881,7 @@ and attachment metadata such as filenames.</p>
</h3> </h3>
<p>Yes, Delta Chat uses a secure subset of OpenPGP <p>Yes, Delta Chat uses a secure subset of OpenPGP
and only displays a padlock security indicator on a message requiring the whole message to be properly encrypted and signed.
if the whole message is properly encrypted and signed.
For example, “Detached signatures” are not treated as secure.</p> For example, “Detached signatures” are not treated as secure.</p>
<p>OpenPGP is not insecure by itself. <p>OpenPGP is not insecure by itself.
@ -970,7 +902,7 @@ which was thankfully adopted in summer 2023.</p>
<h3 id="openpgp-alternatives"> <h3 id="openpgp-alternatives">
Did you consider using alternatives to OpenPGP for end-to-end -encryption? <a href="#openpgp-alternatives" class="anchor"></a> Did you consider using alternatives to OpenPGP for end-to-end-encryption? <a href="#openpgp-alternatives" class="anchor"></a>
</h3> </h3>
@ -1013,17 +945,15 @@ as defined by the Autocrypt Level 1 specification.</p>
<h3 id="tls"> <h3 id="tls">
Is a message exposed in cleartext if end-to-end encryption is not available? <a href="#tls" class="anchor"></a> Are messages marked with the mail icon exposed on the Internet? <a href="#tls" class="anchor"></a>
</h3> </h3>
<p>Even if your messages are not guaranteed to be end-to-end encrypted, <p>If you are sending or receiving e-mail messages without end-to-end encryption (using a classic e-mail server),
they are still protected from Internet providers like cell or cable companies. they are still protected from cell or cable companies who can not read or modify your e-mail messages.
However, your and your recipients e-mail providers But both your and your recipients e-mail providers
may read, analyze or even modify your messages, may read, analyze or modify your messages, including any attachments.</p>
including any attachments,
if they are not end-to-end encrypted.</p>
<p>Delta Chat by default uses strict <p>Delta Chat by default uses strict
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a> <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a>
@ -1036,10 +966,6 @@ then transport encryption will be enforced between e-mail providers
in which case Delta Chat communications will never be exposed in cleartext to the Internet in which case Delta Chat communications will never be exposed in cleartext to the Internet
even if the message was not end-to-end encrypted.</p> even if the message was not end-to-end encrypted.</p>
<p>Note that <a href="#howtoe2ee">maintaining guaranteed end-to-end encryption</a> on top of TLS encryption
provides pervasive safety between your and the recipients devices.
Not even your e-mail or Internet provider will be able to read or modify your messages.</p>
<h3 id="message-metadata"> <h3 id="message-metadata">
@ -1048,25 +974,25 @@ Not even your e-mail or Internet provider will be able to read or modify your me
</h3> </h3>
<p>Delta Chat protects most message metadata by putting the following information <p>Unlike most other messengers,
into the end-to-end encrypted part of messages:</p> Delta Chat apps do not store any metadata about contacts or groups on servers, also not in encrypted form.
Instead, all group metadata is end-to-end encrypted and stored on end-user devices, only.</p>
<p>E-mail Servers can therefore only see</p>
<ul> <ul>
<li>Subject line</li> <li>
<li>Group avatar and name</li> <p>the message date,</p>
<li>MDN (read receipt) requests (<code class="language-plaintext highlighter-rouge">Chat-Disposition-Notification-To</code>)</li> </li>
<li>Disappearing message timer (<code class="language-plaintext highlighter-rouge">Ephemeral-Timer</code>)</li> <li>
<li><code class="language-plaintext highlighter-rouge">Chat-Group-Member-Removed</code>, <code class="language-plaintext highlighter-rouge">Chat-Group-Member-Added</code></li> <p>sender and receiver addresses</p>
<li><code class="language-plaintext highlighter-rouge">Secure-Join</code> header containing secure join commands</li> </li>
<li>Notification about enabling location streaming</li> <li>
<li>WebRTC room URL</li> <p>and message size.</p>
</li>
</ul> </ul>
<p>E-Mail servers do not get access to this protected metadata <p>All other message, contact and group metadata resides in the end-to-end encrypted part of messages.</p>
but they do see the message date as well as the message size,
and, more importantly, the sender and receiver addresses.
E-mail servers need receiver addresses to route and
deliver messages to recipients devices.</p>
<h3 id="device-seizure"> <h3 id="device-seizure">
@ -1078,96 +1004,34 @@ deliver messages to recipients devices.</p>
<p>Both for protecting against metadata-collecting e-mail servers <p>Both for protecting against metadata-collecting e-mail servers
as well as against the threat of device seizure as well as against the threat of device seizure
we recommend to use a <a href="https://delta.chat/chatmail">chatmail server</a> we recommend to use a <a href="https://chatmail.at/relays">chatmail relay</a>
to create pseudonymous temporary profiles through QR-code scans. to create chat profiles using random e-mail addresses for transport.
Note that Delta Chat apps on all platforms support multiple profiles Note that Delta Chat apps on all platforms support multiple profiles
so you can easily use situation-specific profiles next to your “main” profile so you can easily use situation-specific profiles next to your “main” profile
with the knowledge that all their data, along with all metadata, will be deleted. with the knowledge that all their data, along with all metadata, will be deleted.
Moreover, if a device is seized then contacts using temporary profiles Moreover, if a device is seized then chat contacts using short-lived profiles
can not be identified easily, as compared to messengers which reveal can not be identified easily.</p>
phone numbers in chat groups which in turn are often associated with legal identities.</p>
<h3 id="how-can-i-check-encryption-information"> <h3 id="sealedsender">
How can i check encryption information? <a href="#how-can-i-check-encryption-information" class="anchor"></a> Does Delta Chat support “Sealed Sender”? <a href="#sealedsender" class="anchor"></a>
</h3> </h3>
<p>You may check the end-to-end encryption status manually in the “Encryption” dialog <p>No, not yet.</p>
(user profile on Android/iOS or right-click a users chat-list item on desktop).
Delta Chat shows two fingerprints there.
If the same fingerprints appear on your own and your contacts device,
the connection is safe.</p>
<h3 id="how-can-i-check-the-encryption-status-of-messages"> <p>The Signal messenger introduced <a href="https://signal.org/blog/sealed-sender/">“Sealed Sender” in 2018</a>
to keep their server infrastructure ignorant of who is sending a message to a set of recipients.
It is particularly important because the Signal server knows the mobile number of each account,
which is usually associated with a passport identity.</p>
<p>Even if <a href="https://chatmail.at/relays">chatmail relays</a>
How can I check the encryption status of messages? <a href="#how-can-i-check-the-encryption-status-of-messages" class="anchor"></a> do not ask for any private data (including no phone numbers),
it might still be worthwhile to protect relational metadata between addresses.
We dont foresee bigger problems in using random throw-away e-mail addresses for sealed sending
</h3> but an implementation has not been agreed as a priority yet.</p>
<p>A little <strong>padlock</strong> in a message bubble denotes
that the message was properly end-to-end encrypted from the given sender.
If there is <strong>no padlock</strong>, the message was not properly end-to-end encrypted
most likely because the sender uses an app or webmail interface
without support for end-to-endencryption.</p>
<h3 id="why-do-i-see-unencrypted-messages">
Why do I see unencrypted messages? <a href="#why-do-i-see-unencrypted-messages" class="anchor"></a>
</h3>
<p>If a contact uses a non-Autocrypt e-mail app,
all messages involving this contact (in a group or 1:1 chat)
will not be end-to-end encrypted, and thus not show a “padlock” with messages.
Note that even if your contacts use Delta Chat on their account,
they might also use a non-Autocrypt e-mail app on that account
which then may cause intermittently unencrypted messages.
Replying unencrypted to unencrypted messages is mandated by Autocrypt
to prevent unreadable messages on the side of your contacts
and their non-Autocrypt e-mail app.</p>
<h3 id="how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app">
How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app? <a href="#how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app" class="anchor"></a>
</h3>
<p>If you need a safely end-to-end encrypted chat with a contact
who is using their e-mail account both with Delta Chat and non-Autocrypt apps (e.g. webmail),
its best to setup <a href="#howtoe2ee">guaranteed end-to-end encryption with them</a>
and then create a guaranteed end-to-end encrypted group chat with you two as members.
In this group chat all messages will be end-to-end encrypted
even if the direct chat between you two has a
<a href="#nocryptanymore">“… sent a message from another device”</a> warning.</p>
<h3 id="how-can-i-ensure-message-end-to-end-encryption-and-deletion">
How can I ensure message end-to-end encryption and deletion? <a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion" class="anchor"></a>
</h3>
<p>The best way to ensure every message is end-to-end encrypted,
and metadata deleted as quickly as possible
is <a href="#howtoe2ee">using chats with guaranteed end-to-end encryption</a>
and turning on <a href="#ephemeralmsgs">disappearing messages</a>.</p>
<p>Guaranteed end-to-end encrypted chats protect against <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM attacks</a>
and turning on disappearing messages deletes the messages
on the server after a user-configured time.</p>
<p>If you dont need a longer-lived copy of your messages on the server,
you can also turn on <a href="#delold">“delete messages from server automatically”</a>.</p>
<h3 id="pfs"> <h3 id="pfs">
@ -1177,45 +1041,52 @@ you can also turn on <a href="#delold">“delete messages from server automatica
</h3> </h3>
<p>No, Delta Chat doesnt support Perfect Forward Secrecy (PFS). <p>No, not yet.</p>
This means that if your Delta Chat private decryption key is leaked,
<p>Delta Chat today doesnt support Perfect Forward Secrecy (PFS).
This means that if your private decryption key is leaked,
and someone has collected your prior in-transit messages, and someone has collected your prior in-transit messages,
they will be able to decrypt and read them using the leaked decryption key.</p> they will be able to decrypt and read them using the leaked decryption key.
Note that Forward Secrecy only increases security if you delete messages.
Otherwise, someone obtaining your decryption keys
is typically also able to get all your non-deleted messages
and doesnt even need to decrypt any previously collected messages.</p>
<p>Note, however, that if anyone obtains to your decryption keys, <p>We designed a Forward Secrecy approach that withstood
they will typically also be able to obtain your messages, initial examination from some cryptographers and implementation experts
irrespective if Perfect Forward Secrecy is in place or not. but is pending a more formal write up
The typical real-world situation for leaked decryption keys is device seizure to ascertain it reliably works in federated messaging and with multi-device usage,
which we discuss in our answer <a href="#device-seizure">on metadata and device seizure</a>.</p> before it could be implemented in <a href="https://github.com/chatmail/core">chatmail core</a>,
which would make it available in all <a href="https://chatmail.at/clients">chatmail clients</a>.</p>
<p>It is possible that Delta Chat evolves to support Perfect Forward Secrecy, <h3 id="pqc">
because OpenPGP is just a container for encrypted messages
but encryption key management (and thus key rotation or key “ratcheting”)
could be organized in flexible ways.
See <a href="https://gitlab.com/sequoia-pgp/openpgp-dr">Seqouias PFS prototype</a>
for existing experiments in the OpenPGP implementor community.</p>
<h3 id="is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">
Is end-to-end encryption of Delta Chat as safe as Signal? <a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal" class="anchor"></a> Does Delta Chat support Post-Quantum-Cryptography? <a href="#pqc" class="anchor"></a>
</h3> </h3>
<p>It depends on what is important to you. <p>No, not yet.</p>
Delta Chat <a href="#pfs">does not support PFS</a> like Signal does
but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</a>
that are safe against compromised servers or corrupted networks.
Signal and most other PFS-supporting messengers do not provide
a practical scheme for protecting chat groups from network attacks
which are arguably more worrisome
than a potential attacker who seizes your phone and private encryption setup
but somehow not your messages, yet has a full record of all
past encrypted messages.</p>
<p>In any case, Delta Chats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a> <p>Delta Chat uses the Rust OpenPGP library <a href="https://github.com/rpgp/rpgp">rPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p> which supports the latest <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/">IETF Post-Quantum-Cryptography OpenPGP draft</a>.
We aim to add PQC support in <a href="https://github.com/chatmail/core">chatmail core</a> after the draft is finalized at the IETF
in collaboration with other OpenPGP implementers.</p>
<h3 id="how-can-i-manually-check-encryption-information">
How can I manually check encryption information? <a href="#how-can-i-manually-check-encryption-information" class="anchor"></a>
</h3>
<p>You may check the end-to-end encryption status manually in the “Encryption” dialog
(user profile on Android/iOS or right-click a users chat-list item on desktop).
Delta Chat shows two fingerprints there.
If the same fingerprints appear on your own and your contacts device,
the connection is safe.</p>
<h3 id="importkey"> <h3 id="importkey">
@ -1250,7 +1121,7 @@ from most recent to older:</p>
<li> <li>
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of <p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place. rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat. rPGP serves as the end-to-end encryption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
Two advisories were released related to the findings of this audit:</p> Two advisories were released related to the findings of this audit:</p>
<ul> <ul>
@ -1496,9 +1367,10 @@ copies on the devices of your chat partners. Other than that, its completely
isolated from the Internet.</li> isolated from the Internet.</li>
<li>The privacy a webxdc app offers is the privacy of your chat - as long as you <li>The privacy a webxdc app offers is the privacy of your chat - as long as you
trust the people you chat with, you can trust the webxdc app as well.</li> trust the people you chat with, you can trust the webxdc app as well.</li>
<li>This also means: it can be a privacy risk to open webxdc apps in chats where <li>This also means: it can be a privacy risk to open apps in chats with untrusted members.
you dont trust the members - as you know it from e-mail attachments, where Just like with e-mail attachments, video calls or plain links:
you only open attachments from senders you trust, and not from spammers.</li> open them only from senders you trust, and not from spammers.
Spammers can get to know any data you send to them, as well as your IP address.</li>
</ul> </ul>
<h3 id="where-can-i-get-webxdc-apps"> <h3 id="where-can-i-get-webxdc-apps">
@ -1582,21 +1454,10 @@ this way, you will have a new random Jitsi room every time you call someone.</li
</h3> </h3>
<ul> <p>With a Broadcast List you can send a message to many recipients at once;
<li>With a Broadcast List you can send a message to many recipients at once; when the recipients cannot reply in that list.
they reply to you, you get the reply in your direct 1:1 chat with them. The Broadcast lists are still highly experimental
recipients cant see each other.</li> and will very probably be replaced by something else, stay tuned :)</p>
<li>Technically, it is an E-Mail with many recipients in BCC.</li>
<li>You can turn on the feature in the “experimental features” section in the
advanced settings. Then you can create a Broadcast List from the “New Chat”
dialog.</li>
<li>In case you are using more than one device, Broadcast Lists are currently not
synced between them.</li>
<li>Messages sent to broadcast lists are not encrypted. Encryption would break
anonymity, because then all recipients would know who else received it
(Sending individual mails to everyone would be worse for rate limit and network
consumption reason).</li>
</ul>
<h3 id="how-can-i-share-my-location-with-my-chat-partners"> <h3 id="how-can-i-share-my-location-with-my-chat-partners">
@ -1653,6 +1514,11 @@ DeltaChat. To je něco co za běžných okolností dělá Delta Chat sám.</p>
</h3> </h3>
<p>Note:
Changing email addresses is temporarily disabled
because of ongoing changes to the DeltaChat core.
It should be available again in a few months.</p>
<ol> <ol>
<li> <li>
<p>Change your address in “Settings → Advanced → Password and Account” and <p>Change your address in “Settings → Advanced → Password and Account” and
@ -1755,19 +1621,19 @@ Nicméně, někteří poskytovatelé vyžadují ke správnému chodu speciální
podrobnější popis je na <a href="https://providers.delta.chat">Provider Overview</a></li> podrobnější popis je na <a href="https://providers.delta.chat">Provider Overview</a></li>
</ul> </ul>
<h3 id="i-want-to-manage-my-own-e-mail-server-for-delta-chat-what-do-you-recommend"> <h3 id="i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">
I want to manage my own e-mail server for Delta Chat. What do you recommend? <a href="#i-want-to-manage-my-own-e-mail-server-for-delta-chat-what-do-you-recommend" class="anchor"></a> I want to manage my own server for Delta Chat. What do you recommend? <a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend" class="anchor"></a>
</h3> </h3>
<ul> <ul>
<li>Most mail servers will work well. But what we personally recommend is a <li>Most mail servers will work well. But what we personally recommend is a
combination of mailcow and mailadm, as described <a href="https://delta.chat/en/2023-01-27-upcoming-mail-server-workshops">in this chatmail relay server, as described <a href="https://delta.chat/en/2023-12-13-chatmail">in this
blogpost</a>.</li> blogpost</a>.</li>
<li>You can find an <a href="https://delta.chat/cs/serverguide">installation guide on our website</a>.</li> <li>You can find an <a href="https://github.com/chatmail/relay">installation guide on GitHub</a>.</li>
</ul> </ul>
<h3 id="proč-musím-delta-chatu-zadat-mé-e-mailové-heslo-je-to-bezpečné"> <h3 id="proč-musím-delta-chatu-zadat-mé-e-mailové-heslo-je-to-bezpečné">

View file

@ -36,27 +36,24 @@
<li><a href="#warum-integriert-sich-delta-chat-in-zentralisierte-proprietäre-applegoogle-push-dienste">Warum integriert sich Delta Chat in zentralisierte, proprietäre Apple/Google-Push-Dienste?</a></li> <li><a href="#warum-integriert-sich-delta-chat-in-zentralisierte-proprietäre-applegoogle-push-dienste">Warum integriert sich Delta Chat in zentralisierte, proprietäre Apple/Google-Push-Dienste?</a></li>
</ul> </ul>
</li> </li>
<li><a href="#verschlüsselung-und-sicherheit">Verschlüsselung und Sicherheit</a> <li><a href="#e2ee">Verschlüsselung und Sicherheit</a>
<ul> <ul>
<li><a href="#welche-standards-werden-für-die-ende-zu-ende-verschlüsselung-verwendet">Welche Standards werden für die Ende-zu-Ende-Verschlüsselung verwendet?</a></li> <li><a href="#welche-standards-werden-für-die-ende-zu-ende-verschlüsselung-verwendet">Welche Standards werden für die Ende-zu-Ende-Verschlüsselung verwendet?</a></li>
<li><a href="#whene2e">Wie kann ich wissen, ob Nachrichten Ende-zu-Ende-verschlüsselt sind?</a></li> <li><a href="#whene2e">Wie kann ich wissen, ob Nachrichten Ende-zu-Ende-verschlüsselt sind?</a></li>
<li><a href="#howtoe2ee">Wie kann ich garantierte Ende-zu-Ende-Verschlüsselung und grüne Häkchen erhalten?</a></li> <li><a href="#kann-ich-e-mails-ohne-ende-zu-ende-verschlüsselung-empfangen-oder-senden">Kann ich E-Mails ohne Ende-zu-Ende-Verschlüsselung empfangen oder senden?</a></li>
<li><a href="#e2eeguarantee">Was bedeuten das “Grüne Häkchen” und die “garantierte Ende-zu-Ende-Verschlüsselung”?</a></li> <li><a href="#howtoe2ee">Wie kann ich einen Chat mit einem neuen Kontakt erstellen?</a></li>
<li><a href="#nocryptanymore">Ein Kontakt hat eine Nachricht von einem anderen Gerät gesendet”, was kann ich tun?</a></li> <li><a href="#e2eeguarantee">Was bedeutet das grüne Häkchen in einem Kontaktprofil?</a></li>
<li><a href="#sind-anhänge-bilder-dateien-audio-usw-ende-zu-ende-verschlüsselt">Sind Anhänge (Bilder, Dateien, Audio usw.) Ende-zu-Ende-verschlüsselt?</a></li> <li><a href="#sind-anhänge-bilder-dateien-audio-usw-ende-zu-ende-verschlüsselt">Sind Anhänge (Bilder, Dateien, Audio usw.) Ende-zu-Ende-verschlüsselt?</a></li>
<li><a href="#openpgp-secure">Ist OpenPGP sicher?</a></li> <li><a href="#openpgp-secure">Ist OpenPGP sicher?</a></li>
<li><a href="#openpgp-alternatives">Wurden Alternativen zu OpenPGP für die Ende-zu-Ende-Verschlüsselung in Betracht gezogen?</a></li> <li><a href="#openpgp-alternatives">Wurden Alternativen zu OpenPGP für die Ende-zu-Ende-Verschlüsselung in Betracht gezogen?</a></li>
<li><a href="#ist-delta-chat-anfällig-für-efail">Ist Delta Chat anfällig für EFAIL?</a></li> <li><a href="#ist-delta-chat-anfällig-für-efail">Ist Delta Chat anfällig für EFAIL?</a></li>
<li><a href="#tls">Wird eine Nachricht im Klartext gesendet, wenn keine Ende-zu-Ende-Verschlüsselung verfügbar ist?</a></li> <li><a href="#tls">Sind mit dem Mail-Symbol markierte Nachrichten im Internet sichtbar?</a></li>
<li><a href="#message-metadata">Wie schützt Delta Chat Metadaten in Nachrichten?</a></li> <li><a href="#message-metadata">Wie schützt Delta Chat Metadaten in Nachrichten?</a></li>
<li><a href="#device-seizure">Wie schützt man Metadaten und Kontakte, wenn ein Gerät beschlagnahmt wird?</a></li> <li><a href="#device-seizure">Wie schützt man Metadaten und Kontakte, wenn ein Gerät beschlagnahmt wird?</a></li>
<li><a href="#wie-kann-ich-die-verschlüsselungsinformationen-überprüfen">Wie kann ich die Verschlüsselungsinformationen überprüfen?</a></li> <li><a href="#sealedsender">Unterstützt Delta Chat „Sealed Sender“?</a></li>
<li><a href="#wie-kann-ich-den-verschlüsselungsstatus-von-nachrichten-überprüfen">Wie kann ich den Verschlüsselungsstatus von Nachrichten überprüfen?</a></li>
<li><a href="#warum-sehe-ich-unverschlüsselte-nachrichten">Warum sehe ich unverschlüsselte Nachrichten?</a></li>
<li><a href="#wie-kann-ich-einen-ende-zu-ende-verschlüsselten-chat-mit-einem-delta-chat-kontakt-führen-der-manchmal-webmail-oder-eine-andere-e-mail-anwendung-ohne-autocrypt-verwendet">Wie kann ich einen Ende-zu-Ende-verschlüsselten Chat mit einem Delta-Chat-Kontakt führen, der manchmal Webmail oder eine andere E-Mail-Anwendung ohne Autocrypt verwendet?</a></li>
<li><a href="#wie-kann-ich-ende-zu-ende-verschlüsselung-und-löschen-von-nachrichten-sicherstellen">Wie kann ich Ende-zu-Ende-Verschlüsselung und Löschen von Nachrichten sicherstellen?</a></li>
<li><a href="#pfs">Unterstützt Delta Chat “Perfect Forward Secrecy”?</a></li> <li><a href="#pfs">Unterstützt Delta Chat “Perfect Forward Secrecy”?</a></li>
<li><a href="#ist-die-ende-zu-ende-verschlüsselung-von-delta-chat-genauso-sicher-wie-die-von-signal">Ist die Ende-zu-Ende-Verschlüsselung von Delta Chat genauso sicher wie die von Signal?</a></li> <li><a href="#pqc">Unterstützt Delta Chat Post-Quantum-Verschlüsselung?</a></li>
<li><a href="#wie-kann-ich-die-verschlüsselung-manuell-überprüfen">Wie kann ich die Verschlüsselung manuell überprüfen?</a></li>
<li><a href="#importkey">Kann ich meinen existierenden privaten Schlüssel weiter verwenden?</a></li> <li><a href="#importkey">Kann ich meinen existierenden privaten Schlüssel weiter verwenden?</a></li>
<li><a href="#security-audits">Wurde Delta Chat unabhängig auf Sicherheitslücken geprüft?</a></li> <li><a href="#security-audits">Wurde Delta Chat unabhängig auf Sicherheitslücken geprüft?</a></li>
</ul> </ul>
@ -90,7 +87,7 @@
<ul> <ul>
<li><a href="#welche-app-berechtigungen-benötigt-delta-chat">Welche App-Berechtigungen benötigt Delta Chat?</a></li> <li><a href="#welche-app-berechtigungen-benötigt-delta-chat">Welche App-Berechtigungen benötigt Delta Chat?</a></li>
<li><a href="#funktioniert-delta-chat-mit-meinem-e-mail-anbieter">Funktioniert Delta Chat mit <em>meinem</em> E-Mail-Anbieter?</a></li> <li><a href="#funktioniert-delta-chat-mit-meinem-e-mail-anbieter">Funktioniert Delta Chat mit <em>meinem</em> E-Mail-Anbieter?</a></li>
<li><a href="#ich-möchte-meinen-eigenen-e-mail-server-für-delta-chat-verwalten-gibt-es-empfehlungen">Ich möchte meinen eigenen E-Mail-Server für Delta Chat verwalten. Gibt es Empfehlungen?</a></li> <li><a href="#ich-möchte-meinen-eigenen-server-für-delta-chat-verwalten-gibt-es-empfehlungen">Ich möchte meinen eigenen Server für Delta Chat verwalten. Gibt es Empfehlungen?</a></li>
<li><a href="#weshalb-muss-ich-mein-e-mail-kennwort-in-delta-chat-eingeben-ist-das-sicher">Weshalb muss ich mein E-Mail-Kennwort in Delta Chat eingeben? Ist das sicher?</a></li> <li><a href="#weshalb-muss-ich-mein-e-mail-kennwort-in-delta-chat-eingeben-ist-das-sicher">Weshalb muss ich mein E-Mail-Kennwort in Delta Chat eingeben? Ist das sicher?</a></li>
<li><a href="#welche-nachrichten-erscheinen-in-delta-chat">Welche Nachrichten erscheinen in Delta Chat?</a></li> <li><a href="#welche-nachrichten-erscheinen-in-delta-chat">Welche Nachrichten erscheinen in Delta Chat?</a></li>
<li><a href="#unterstützt-delta-chat-html-e-mails">Unterstützt Delta Chat HTML-E-Mails?</a></li> <li><a href="#unterstützt-delta-chat-html-e-mails">Unterstützt Delta Chat HTML-E-Mails?</a></li>
@ -681,10 +678,10 @@ hat, das eine „sofortige Zustellung“ von Nachrichten für alle Chatmail-Serv
Einschließlich dem Chatmail-Server, <a href="https://delta.chat/chatmail#selfhosted">den Sie selbst ohne unsere Erlaubnis einrichten könnten</a>. Einschließlich dem Chatmail-Server, <a href="https://delta.chat/chatmail#selfhosted">den Sie selbst ohne unsere Erlaubnis einrichten könnten</a>.
Willkommen bei der Macht des interoperablen und massiven Chatmail- und E-Mail-Systems :)</p> Willkommen bei der Macht des interoperablen und massiven Chatmail- und E-Mail-Systems :)</p>
<h2 id="verschlüsselung-und-sicherheit"> <h2 id="e2ee">
Verschlüsselung und Sicherheit <a href="#verschlüsselung-und-sicherheit" class="anchor"></a> Verschlüsselung und Sicherheit <a href="#e2ee" class="anchor"></a>
</h2> </h2>
@ -697,17 +694,23 @@ Willkommen bei der Macht des interoperablen und massiven Chatmail- und E-Mail-Sy
</h3> </h3>
<p><a href="https://autocrypt.org">Autocrypt</a> wird verwendet, um automatisch <p>Delta Chat verwendet eine <a href="#openpgp-secure">sichere Teilmenge des OpenPGP-Standards</a>, um eine automatische End-to-End-Verschlüsselung mit folgenden Protokollen bereitzustellen:</p>
eine Ende-zu-Ende-Verschlüsselung mit Kontakten und Gruppenchats herzustellen.
Autocrypt verwendet eine begrenzte und <a href="#openpgp-secure">sichere Untermenge des OpenPGP-Standards</a>.
Ende-zu-Ende-verschlüsselte Nachrichten sind mit einem Vorhängeschloss gekennzeichnet <img style="vertical-align:middle; width:1.2em; margin:1px" src="../lock-icon.png" alt="padlock" /></p>
<p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join-Protokolle</a> <ul>
werden für Chats mit garantierter Ende-zu-Ende-Verschlüsselung verwendet, <li>
die vor Netzwerkangriffen und kompromittierten Servern schützt. <p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join</a>
Chats, die mit einem grünen Häkchen markiert sind zum Austausch von Verschlüsselungsinformationen durch Scannen von QR-Codes oder „Einladungslinks“.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> </li>
garantieren Ende-zu-Ende-verschlüsselte Nachrichten.</p> <li>
<p><a href="https://autocrypt.org">Autocrypt</a> wird verwendet, um automatisch eine Ende-zu-Ende-Verschlüsselung zwischen Kontakten und allen Mitgliedern einer Gruppe herzustellen.</p>
</li>
<li>
<p><a href="https://github.com/chatmail/core/blob/main/spec.md#attaching-a-contact-to-a-message">Teilen eines Kontakts im Chat</a>
ermöglicht es den Empfängern, eine Ende-zu-Ende-Verschlüsselung mit dem Kontakt zu verwenden.</p>
</li>
</ul>
<p>Delta Chat fragt keine OpenPGP-Keyserver ab, veröffentlicht dort keine Daten und interagiert auch sonst nicht mit diesen.</p>
<h3 id="whene2e"> <h3 id="whene2e">
@ -717,28 +720,36 @@ garantieren Ende-zu-Ende-verschlüsselte Nachrichten.</p>
</h3> </h3>
<p>Ende-zu-Ende-verschlüsselten Nachrichten sind mit einem Vorhängeschloss versehen:</p> <p>All messages in Delta Chat are <strong>end-to-end encrypted by default</strong>.
Since the Delta Chat Version 2 release series (July 2025)
there are no lock or similar markers on end-to-end encrypted messages, anymore.</p>
<p><img style="width:160px; margin:1px" src="../lock-screenshot.png" alt="padlock in bubble" /></p> <h3 id="kann-ich-e-mails-ohne-ende-zu-ende-verschlüsselung-empfangen-oder-senden">
<p>Die Ende-zu-Ende-Verschlüsselung ist garantiert, wenn neben dem Chat-Titel ein grünes Häkchen zu sehen ist:</p>
<p><img style="width:211px; margin:1px" src="../green-checkmark-screenshot.png" alt="green checkmark in title" /></p>
<h3 id="howtoe2ee">
Wie kann ich garantierte Ende-zu-Ende-Verschlüsselung und grüne Häkchen erhalten? <a href="#howtoe2ee" class="anchor"></a> Kann ich E-Mails ohne Ende-zu-Ende-Verschlüsselung empfangen oder senden? <a href="#kann-ich-e-mails-ohne-ende-zu-ende-verschlüsselung-empfangen-oder-senden" class="anchor"></a>
</h3> </h3>
<p>Wenn Sie einen zweiten Kommunikationskanal mit Ihrem Chatpartner haben, <p>Wenn Sie die Standard-<a href="https://chatmail.at/relays">Chatmail-Relays</a> verwenden, ist es unmöglich, Nachrichten ohne End-to-End-Verschlüsselung zu empfangen oder zu senden.</p>
wie einen Video-Chat oder einen anderen Messenger,
können Sie einen Einladungslink erstellen.</p>
<p>Wenn Sie persönlich zusammen sind, <p>Wenn Sie stattdessen ein Profil mit einem klassischen E-Mail-Server erstellen,
können Sie Ihrem Chat-Partner einen QR-Code zeigen.</p> können Sie Nachrichten ohne End-to-End-Verschlüsselung senden und empfangen.
Solche Nachrichten werden mit einem E-Mail-Symbol gekennzeichnet
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
<h3 id="howtoe2ee">
Wie kann ich einen Chat mit einem neuen Kontakt erstellen? <a href="#howtoe2ee" class="anchor"></a>
</h3>
<p>You can send an invite link through another private chat,
show an invitation QR code when next to each other or in a video call,
or click on a “contact” that was shared in a chat.</p>
<ul> <ul>
<li> <li>
@ -747,133 +758,60 @@ tippen Sie auf den Titel der Gruppe, um die Mitgliederliste anzuzeigen,
und wählen Sie „QR-Einladungscode“.</p> und wählen Sie „QR-Einladungscode“.</p>
</li> </li>
<li> <li>
<p>Für <strong>Direktchat-Einladungen</strong>, <p>For <strong>direct 1:1 chat invitations</strong>,
tippen Sie auf das QR-Code-Symbol <img style="vertical-align:middle; width:1.8em; margin:1px" src="../qr-icon.png" /> tap the QR Code icon <img style="vertical-align:middle; width:1.8em; margin:1px" src="../qr-icon.png" />
auf dem Hauptbildschirm der Delta-Chat-App.</p> on the Delta Chat app main screen.</p>
</li> </li>
</ul> </ul>
<p>Lassen Sie Ihren Chat-Partner den QR-Code mit der Delta-Chat-App scannen. <p>Ask your chat partner to scan the QR image
Oder Sie klicken auf „Kopieren“ oder „Teilen“, um einen Einladungslink zu erstellen und diesen mit Ihrem Chat-Partner zu teilen.</p> with their Delta Chat app,
or click “Copy” or “Share” to create an invite link
and share it with your chat partner.</p>
<p>Warten Sie nun, während das <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">Secure-Join-Protokoll</a> zwischen beiden Geräten abläuft.</p> <p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">end-to-end encryption is getting established</a>.</p>
<ul> <ul>
<li> <li>
<p>Wenn beide Geräte online sind, <p>If both sides are online, they will soon see a (group or direct) chat
sehen beide Seiten schließlich einen Gruppen- oder Direkt-Chat mit einem grünen Häkchen and can start messaging securely.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
neben dem Titel.</p>
</li> </li>
<li> <li>
<p>Wenn eines der Geräte offline ist, erscheinen die grünen Häkchen erst <p>If one side is offline or in bad network,
später, wenn das Gerät wieder mit dem Internet verbunden ist the ability to chat is delayed until connectivity is restored.</p>
und das Secure-Join-Protokoll abgeschlossen werden kann.</p>
</li> </li>
</ul> </ul>
<p>Herzlichen Glückwunsch! 🎉 <p>Congratulations!
Sie verwenden nun eine garantierte Ende-zu-Ende-Verschlüsselung You now will automatically use end-to-end encryption
mit diesem Kontakt und Sie beide können sich gegenseitig zu grün markierten Gruppen hinzufügen with this contact.
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />, If you add each other to chat groups,
Dadurch wird die garantierte Ende-zu-Ende-Verschlüsselung automatisch unter den Mitgliedern dieser Gruppe verbreitet.</p> end-to-end encryption will be established among all members.</p>
<h3 id="e2eeguarantee"> <h3 id="e2eeguarantee">
Was bedeuten das “Grüne Häkchen” und die “garantierte Ende-zu-Ende-Verschlüsselung”? <a href="#e2eeguarantee" class="anchor"></a> Was bedeutet das grüne Häkchen in einem Kontaktprofil? <a href="#e2eeguarantee" class="anchor"></a>
</h3> </h3>
<p><strong>Chat-Titel mit grünen Häkchen</strong> <p>A contact profile might show a green checkmark
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
bedeuten, dass alle Nachrichten im Chat Ende-zu-Ende-verschlüsselt werden and an “Introduced by” line.
und nicht von kompromittierten E-Mail-Servern oder Internet-Providern gelesen oder verändert werden können. Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you
Beim Beitritt zu Gruppenchats mit grünen Häkchen or was introduced by a another green-checkmarked contact.
werden Verschlüsselungsinformationen (und die grünen Häkchen) aller Teilnehmer sicher so weitergegeben, Introductions happen automatically when adding members to groups.
dass die Ende-zu-Ende-Verschlüsselung in der Gruppe und zwischen den Mitgliedern garantiert werden kann.</p> Whoever adds a green-checkmarked contact to a group with only green-checkmarked members
becomes an introducer.
<p><strong>Kontaktprofile mit grünen Häkchen</strong> In a contact profile you can tap on the “Introduced by …” text repeatedly
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p>
bedeuten, dass die Nachrichtenübermittlung an einen Kontakt derzeit garantiert Ende-zu-Ende-verschlüsselt ist.
Jeder grün markierte Kontakt hat entweder einen direkten <a href="#howtoe2ee">QR-Scan</a> mit Ihnen durchgeführt
oder wurde von einem anderen Kontakt mit grünem Häkchen eingeführt.
Das Einführen geschieht automatisch, wenn Sie Mitglieder zu Gruppen hinzufügen.
Wer einen Kontakt zu einer Gruppe mit grünem Häkchen hinzufügt, wird zum Einführenden
für die Mitglieder, die noch nichts von dem hinzugefügten Kontakt wussten.
In einem Kontaktprofil können Sie wiederholt auf den Text “Eingeführt von …” tippen
bis Sie zu demjenigen gelangen, mit dem Sie einen direkten <a href="#howtoe2ee">QR-Scan</a> gemacht haben.</p>
<p>Beachten Sie, dass Sie in einem Kontaktprofil unter Umständen Einführende sehen und antippen können, aber kein grünes Häkchen im Profiltitel vorhanden ist.
Dies bedeutet normalerweise, dass der Kontakt <a href="#nocryptanymore">“eine Nachricht von einem anderen Gerät gesendet hat”</a>.</p>
<p>Für eine ausführlichere Diskussion der “Garantierten Ende-zu-Ende-Verschlüsselung”, <p>Für eine ausführlichere Diskussion der “Garantierten Ende-zu-Ende-Verschlüsselung”,
siehe <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join-Protokolle</a> siehe <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join-Protokolle</a>
und dort speziell den Abschnitt zu “Verified Groups”, dem technischen Begriff und dort speziell den Abschnitt zu “Verified Groups”, dem technischen Begriff
für “Chats mit grünem Häkchen” oder “Garantierter Ende-zu-Ende-Verschlüsselung”.</p> für “Chats mit grünem Häkchen” oder “Garantierter Ende-zu-Ende-Verschlüsselung”.</p>
<h3 id="nocryptanymore">
Ein Kontakt hat eine Nachricht von einem anderen Gerät gesendet”, was kann ich tun? <a href="#nocryptanymore" class="anchor"></a>
</h3>
<p>Wenn Sie diese Warnung sehen, wurde das grüne Häkchen entfernt, da für den Kontakt die Ende-zu-Ende-Verschlüsselung nicht mehr garantiert werden kann.
<strong>Wenn Sie den Wegfall der garantierten Ende-zu-Ende-Verschlüsselung
für diesen Kontakt überraschend finden, akzeptieren Sie die Warnung nicht!</strong>
Versuchen Sie stattdessen mit Ihrem Kontakt über einen zweiten Kanal (z.B. Videoanruf, Telefon oder ein anderer Messenger) herauszufinden, was passiert ist.</p>
<p>Wenn Ihr Kontakt tatsächlich den Ausfall der garantierten Ende-zu-Ende-Verschlüsselung verursacht hat,
finden Sie in den nächsten Abschnitten häufige Gründe und Abhilfe.
Unabhängig davon bleiben alle anderen Chats mit einem grünen Häkchen garantiert Ende-zu-Ende-verschlüsselt,
auch wenn der Kontakt dort Mitglied ist.</p>
<p><strong>Ihr Kontakt verwendet Delta Chat auf einem zweiten Gerät (Smartphone oder Laptop)</strong></p>
<p>Wenn Ihr Kontakt ein weiteres Gerät mit Delta Chat eingerichtet hat,
sollte das Konto von dem neuen Gerät entfernen werden und <a href="#multiclient">als zweites Gerät, wie hier beschrieben</a>, erneut hinzugefügt werden.
Sobald sie sich danach schreiben, wird die Warnung verschwinden
und die Verschlüsselung ist mit beiden Geräten Ihres Kontakts garantiert.</p>
<p><strong>Ihr Kontakt hat Delta Chat mit seinem alten Login neu installiert</strong></p>
<p>Wenn Ihr Kontakt <a href="#backup">ein Backup</a> hat,
sollte das Profil auf dem neuen Gerät
entfernt werden und stattdessen das Backup importiert werden, um das Konto neu zu erstellen.
Sobald sie sich danach schreiben, wird die Warnung verschwinden
und die garantierte Verschlüsselung wird für diesen Kontakt wiederhergestellt.</p>
<p>Wenn Ihr Kontakt kein Backup hat, ist es am besten, einen <a href="#howtoe2ee">QR-Code-Scan</a>
mit Ihrem Chat-Partner durchzuführen, um die garantierte Ende-zu-Ende-Verschlüsselung wiederherzustellen.</p>
<p><strong>Ihr Kontakt hat eine E-Mail über Webmail oder eine andere E-Mail-Anwendung gesendet,
wird Delta Chat aber bald wieder benutzen.</strong></p>
<p>Wenn Sie wissen, dass der Kontakt manchmal Webmail,
oder andere E-Mail-Anwendungen ohne Ende-zu-Ende-Verschlüsselung verwendet,
dann können Sie die Warnung akzeptieren.
Sobald Ihr Kontakt Delta Chat wieder benutzt,
wird die garantierte Ende-zu-Ende-Verschlüsselung automatisch wiederhergestellt.</p>
<p><strong>Ihr Kontakt hat die Nutzung von Delta Chat komplett eingestellt</strong></p>
<p>Manchmal ist es wichtiger, in Kontakt zu bleiben als eine Ende-zu-Ende-Verschlüsselung zu haben;
die <a href="#tls">“Transport Layer Encryption” (TLS)</a> kann die Vertraulichkeit
Ihrer Nachrichten zwischen Ihrem Gerät und dem E-Mail-Server dennoch schützen.
Ohne Ende-zu-Ende-Verschlüsselung vertrauen Sie und Ihr Chat-Partner jedoch darauf, dass Ihr E-Mail-Server Nachrichten nicht liest oder manipuliert und sie nicht an Dritte weitergibt.</p>
<p>In jedem Fall können Sie nicht viel mehr tun, als die Warnung zu akzeptieren.
Bitte entfernen Sie den Kontakt auch aus allen aktiven, grün markierten Gruppen
die Sie unter “Gemeinsame Chats” im Profil des Kontakts finden können.
So vermeiden Sie, dass Ihr Kontakt “unlesbare” Nachrichten erhält.</p>
<p>Wenn der Kontakt Delta Chat aufgrund von Fehlern oder Bugs nicht mehr verwendet,
können Sie diese in unser <a href="https://support.delta.chat">Support-Forum</a> schreiben,
und uns so dabei helfen, häufige Probleme zu identifizieren und zu lösen. Vielen Dank!</p>
<h3 id="sind-anhänge-bilder-dateien-audio-usw-ende-zu-ende-verschlüsselt"> <h3 id="sind-anhänge-bilder-dateien-audio-usw-ende-zu-ende-verschlüsselt">
@ -897,10 +835,9 @@ und Anhang-Metadaten wie Dateinamen.</p>
</h3> </h3>
<p>Ja, Delta Chat verwendet eine sichere Untermenge von OpenPGP <p>Yes, Delta Chat uses a secure subset of OpenPGP
und zeigt nur dann ein Vorhängeschloss auf einer Nachricht an, requiring the whole message to be properly encrypted and signed.
wenn die gesamte Nachricht ordnungsgemäß verschlüsselt und signiert ist. For example, “Detached signatures” are not treated as secure.</p>
Zum Beispiel werden “Detached Signatures” nicht als sicher betrachtet.</p>
<p>Die meisten öffentlich diskutierten OpenPGP-Probleme <p>Die meisten öffentlich diskutierten OpenPGP-Probleme
resultieren in Wirklichkeit aus schlechter Usability oder schlechter Implementierung von Tools oder Anwendungen - oder beidem. resultieren in Wirklichkeit aus schlechter Usability oder schlechter Implementierung von Tools oder Anwendungen - oder beidem.
@ -961,16 +898,15 @@ so wie in der Autocrypt-Level-1-Spezifikation definiert.</p>
<h3 id="tls"> <h3 id="tls">
Wird eine Nachricht im Klartext gesendet, wenn keine Ende-zu-Ende-Verschlüsselung verfügbar ist? <a href="#tls" class="anchor"></a> Sind mit dem Mail-Symbol markierte Nachrichten im Internet sichtbar? <a href="#tls" class="anchor"></a>
</h3> </h3>
<p>Auch wenn Ihre Nachrichten nicht Ende-zu-Ende-verschlüsselt sind, <p>If you are sending or receiving e-mail messages without end-to-end encryption (using a classic e-mail server),
sind sie dennoch vor Internetanbietern wie Mobilfunk- oder Telefongesellschaften geschützt. they are still protected from cell or cable companies who can not read or modify your e-mail messages.
Allerdings können Ihr E-Mail-Provider und der des Empfängers But both your and your recipients e-mail providers
Ihre Nachrichten lesen, analysieren oder sogar verändern, may read, analyze or modify your messages, including any attachments.</p>
wenn sie nicht Ende-zu-Ende-verschlüsselt sind.</p>
<p>Delta Chat verwendet standardmäßig strikte <p>Delta Chat verwendet standardmäßig strikte
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS-Verschlüsselung</a>, <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS-Verschlüsselung</a>,
@ -983,10 +919,6 @@ wird TLS zwischen den E-Mail-Anbietern durchgesetzt.
In diesem Fall wird die Delta-Chat-Kommunikation niemals im Klartext ins Internet gelangen In diesem Fall wird die Delta-Chat-Kommunikation niemals im Klartext ins Internet gelangen
selbst wenn die Nachricht nicht Ende-zu-Ende-verschlüsselt war.</p> selbst wenn die Nachricht nicht Ende-zu-Ende-verschlüsselt war.</p>
<p>Beachten Sie, dass die <a href="#howtoe2ee">Beibehaltung der garantierten Ende-zu-Ende-Verschlüsselung</a> zusätzlich zur TLS-Verschlüsselung
eine allumfassende Sicherheit zwischen Ihrem Gerät und dem des Empfängers bietet.
Nicht einmal Ihr E-Mail- oder Internet-Provider wird in der Lage sein, Ihre Nachrichten zu lesen oder zu verändern.</p>
<h3 id="message-metadata"> <h3 id="message-metadata">
@ -995,24 +927,25 @@ Nicht einmal Ihr E-Mail- oder Internet-Provider wird in der Lage sein, Ihre Nach
</h3> </h3>
<p>Delta Chat schützt die meisten Metadaten von Nachrichten, indem es die folgenden Informationen <p>Anders als die meisten anderen Messenger
in den Ende-zu-Ende-verschlüsselten Teil der Nachrichten verschiebt:</p> speichern Delta-Chat-Apps keine Metadaten über Kontakte oder Gruppen auf Servern. Auch nicht in verschlüsselter Form.
Stattdessen werden alle Gruppen-Metadaten durchgängig verschlüsselt und ausschließlich auf den Endgeräten der Nutzer gespeichert.</p>
<p>E-Mail-Server können deshalb nur das Folgende sehen:</p>
<ul> <ul>
<li>Betreffzeile</li> <li>
<li>Avatar und Name der Gruppe</li> <p>Uhrzeit und Datum der Nachricht</p>
<li>Lesebestätigungen (<code class="language-plaintext highlighter-rouge">Chat-Disposition-Notification-To</code>)</li> </li>
<li>Timer für verschwindende Nachrichten (<code class="language-plaintext highlighter-rouge">Ephemeral-Timer</code>)</li> <li>
<li><code class="language-plaintext highlighter-rouge">Chat-Group-Member-Removed</code>, <code class="language-plaintext highlighter-rouge">Chat-Group-Member-Added</code></li> <p>Absende- und Empfangsadresse</p>
<li><code class="language-plaintext highlighter-rouge">Secure-Join</code>-Header</li> </li>
<li>Aktivierung des Standort-Streamings</li> <li>
<li>WebRTC-Raum-URL</li> <p>Größe der Nachricht</p>
</li>
</ul> </ul>
<p>E-Mail-Server erhalten keinen Zugriff auf diese geschützten Metadaten, <p>All other message, contact and group metadata resides in the end-to-end encrypted part of messages.</p>
sehen aber Datum und Größe der Nachricht sowie die Absender- und Empfängeradressen.
E-Mail-Server benötigen Empfängeradressen, um Nachrichten
Nachrichten an die Geräte der Empfänger weiterzuleiten und zuzustellen.</p>
<h3 id="device-seizure"> <h3 id="device-seizure">
@ -1022,93 +955,36 @@ Nachrichten an die Geräte der Empfänger weiterzuleiten und zuzustellen.</p>
</h3> </h3>
<p>Sowohl zum Schutz vor E-Mail-Servern, die Metadaten sammeln, <p>Both for protecting against metadata-collecting e-mail servers
als auch gegen die Gefahr der Beschlagnahmung von Geräten as well as against the threat of device seizure
empfehlen wir die Verwendung einer für Delta Chat optimierten <a href="https://delta.chat/serverguide">E-Mail-Server-Instanz</a>, um pseudonym-temporäre Konten durch Scannen von QR-Codes zu erstellen. we recommend to use a <a href="https://chatmail.at/relays">chatmail relay</a>
Beachten Sie, dass Delta-Chat-Apps auf allen Plattformen mehrere Konten unterstützen. to create chat profiles using random e-mail addresses for transport.
Sie können also problemlos aktionsspezifische “1-Wochen-“ oder “1-Monats-Konten” neben Ihrem “Hauptkonto” verwenden, Note that Delta Chat apps on all platforms support multiple profiles
mit dem Wissen, dass alle temporären Kontodaten zusammen mit allen Metadaten gelöscht werden. so you can easily use situation-specific profiles next to your “main” profile
Wenn ein Gerät beschlagnahmt wird, können Kontakte mit temporären E-Mail-Konten with the knowledge that all their data, along with all metadata, will be deleted.
Konten nicht so leicht identifiziert werden, wie dies bei Messengern der Fall ist, die die Moreover, if a device is seized then chat contacts using short-lived profiles
Telefonnummern in Chatgruppen preisgeben, die wiederum oft mit legalen Identitäten verbunden sind.</p> can not be identified easily.</p>
<h3 id="wie-kann-ich-die-verschlüsselungsinformationen-überprüfen"> <h3 id="sealedsender">
Wie kann ich die Verschlüsselungsinformationen überprüfen? <a href="#wie-kann-ich-die-verschlüsselungsinformationen-überprüfen" class="anchor"></a> Unterstützt Delta Chat „Sealed Sender“? <a href="#sealedsender" class="anchor"></a>
</h3> </h3>
<p>Sie können den Status der Ende-zu-Ende-Verschlüsselung manuell im Dialog “Verschlüsselung” <p>No, not yet.</p>
(Android/iOS: Benutzerprofil, Desktop: Rechtsklick auf den Chat eines Benutzers) überprüfen.
Delta Chat zeigt dort zwei Fingerabdrücke an.
Wenn die gleichen Fingerabdrücke auf Ihrem eigenen Gerät und auf dem Gerät Ihres Kontakts erscheinen,
ist die Verbindung sicher.</p>
<h3 id="wie-kann-ich-den-verschlüsselungsstatus-von-nachrichten-überprüfen"> <p>The Signal messenger introduced <a href="https://signal.org/blog/sealed-sender/">“Sealed Sender” in 2018</a>
to keep their server infrastructure ignorant of who is sending a message to a set of recipients.
It is particularly important because the Signal server knows the mobile number of each account,
which is usually associated with a passport identity.</p>
<p>Even if <a href="https://chatmail.at/relays">chatmail relays</a>
Wie kann ich den Verschlüsselungsstatus von Nachrichten überprüfen? <a href="#wie-kann-ich-den-verschlüsselungsstatus-von-nachrichten-überprüfen" class="anchor"></a> do not ask for any private data (including no phone numbers),
it might still be worthwhile to protect relational metadata between addresses.
We dont foresee bigger problems in using random throw-away e-mail addresses for sealed sending
</h3> but an implementation has not been agreed as a priority yet.</p>
<p>Ein kleines <strong>Vorhängeschloss</strong> in einer Nachrichten zeigt an,
dass die Nachricht vom Absender korrekt Ende-zu-Ende-verschlüsselt wurde.
Wenn <strong>kein Vorhängeschloss</strong> vorhanden ist, wurde die Nachricht nicht oder nicht korrekt Ende-zu-Ende-verschlüsselt.
Höchstwahrscheinlich, weil der Absender ein Webmail-Interface oder eine App
ohne Ende-zu-Ende-Unterstützung verwendet.</p>
<h3 id="warum-sehe-ich-unverschlüsselte-nachrichten">
Warum sehe ich unverschlüsselte Nachrichten? <a href="#warum-sehe-ich-unverschlüsselte-nachrichten" class="anchor"></a>
</h3>
<p>Wenn ein Kontakt keine Autocrypt-fähige App verwendet,
werden alle Nachrichten, die diesen Kontakt betreffen (in Gruppen- oder Direkt-Chats),
nicht Ende-zu-Ende-verschlüsselt und zeigen daher kein “Vorhängeschloss”.
Beachten Sie, auch Kontakte, die primär Delta Chat verwenden,
können gleichzeitig auch nicht-Autocrypt-fähige Apps verwenden.
Das unverschlüsselte Antworten auf unverschlüsselte Nachrichten wird von Autocrypt vorgeschrieben
um zu verhindern, dass unlesbare Nachrichten auf der Seite Ihrer Kontakte ankommen.</p>
<h3 id="wie-kann-ich-einen-ende-zu-ende-verschlüsselten-chat-mit-einem-delta-chat-kontakt-führen-der-manchmal-webmail-oder-eine-andere-e-mail-anwendung-ohne-autocrypt-verwendet">
Wie kann ich einen Ende-zu-Ende-verschlüsselten Chat mit einem Delta-Chat-Kontakt führen, der manchmal Webmail oder eine andere E-Mail-Anwendung ohne Autocrypt verwendet? <a href="#wie-kann-ich-einen-ende-zu-ende-verschlüsselten-chat-mit-einem-delta-chat-kontakt-führen-der-manchmal-webmail-oder-eine-andere-e-mail-anwendung-ohne-autocrypt-verwendet" class="anchor"></a>
</h3>
<p>Wenn Sie einen sicheren Ende-zu-Ende-verschlüsselten Chat mit einem Kontakt benötigen,
der sowohl Delta Chat als auch Nicht-Autocrypt-Anwendungen nutzt,
können Sie eine <a href="#howtoe2ee">garantierte Ende-zu-Ende-Verschlüsselung</a> einrichten, mit einer Gruppe mit Ihnen beiden als Mitgliedern.
In diesem Gruppenchat werden alle Nachrichten Ende-zu-Ende verschlüsselt werdejn,
auch wenn im Direkt-Chat eine
<a href="#nocryptanymore">“Nachricht von einem anderen Gerät gesendet”</a> wurde.</p>
<h3 id="wie-kann-ich-ende-zu-ende-verschlüsselung-und-löschen-von-nachrichten-sicherstellen">
Wie kann ich Ende-zu-Ende-Verschlüsselung und Löschen von Nachrichten sicherstellen? <a href="#wie-kann-ich-ende-zu-ende-verschlüsselung-und-löschen-von-nachrichten-sicherstellen" class="anchor"></a>
</h3>
<p>Der beste Weg, um sicherzustellen, dass alle Nachrichten Ende-zu-Ende-verschlüsselt sind
und Metadaten so schnell wie möglich gelöscht werden,
ist <a href="#howtoe2ee">die Verwendung von Chats mit garantierter Ende-zu-Ende-Verschlüsselung</a>
und die Aktivierung von <a href="#ephemeralmsgs">verschwindenden Nachrichten</a>.</p>
<p>Garantierte Ende-zu-Ende-Verschlüsselung schützt vor <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM-Angriffen</a>
und das Aktivieren von “Verschwindende Nachrichten” löscht die Nachrichten
auf dem Server und Lokal nach einer vom Benutzer eingestellten Zeit.</p>
<p>Wenn Sie die Nachrichten auf Ihrem Gerät, aber nicht auf dem Server benötigen, können Sie auch in der Gruppe vereinbaren, <a href="#delold">“Nachrichten automatisch vom Server löschen”</a> einzuschalten.</p>
<h3 id="pfs"> <h3 id="pfs">
@ -1118,42 +994,52 @@ auf dem Server und Lokal nach einer vom Benutzer eingestellten Zeit.</p>
</h3> </h3>
<p>Nein, Delta Chat unterstützt kein “Perfect Forward Secrecy” (PFS). <p>No, not yet.</p>
Das bedeutet, wenn Ihr privater Delta-Chat-Schlüssel durchgesickert ist
und jemand Ihre vorherigen In-Transit-Nachrichten gesammelt hat,
können diese mit dem veröffentlichtem Schlüssel entschlüsselt werden.</p>
<p>Beachten Sie jedoch, dass jemand, der in den Besitz Ihrer privaten Schlüssel gelangt, in der Regel auch in der Lage sein wird, Ihre Nachrichten zu lesen - unabhängig davon, ob Perfect Forward Secrecy nun verwendet wird oder nicht. <p>Delta Chat today doesnt support Perfect Forward Secrecy (PFS).
Die typische, reale Situation für durchgesickerte private Schlüssel, ist die <a href="#device-seizure">Beschlagnahme von Geräten</a>.</p> This means that if your private decryption key is leaked,
and someone has collected your prior in-transit messages,
they will be able to decrypt and read them using the leaked decryption key.
Note that Forward Secrecy only increases security if you delete messages.
Otherwise, someone obtaining your decryption keys
is typically also able to get all your non-deleted messages
and doesnt even need to decrypt any previously collected messages.</p>
<p>Es ist möglich, dass Delta Chat eine Tages “Perfect Forward Secrecy” unterstützt - <p>We designed a Forward Secrecy approach that withstood
OpenPGP ist nur ein Container für verschlüsselte Nachrichten mit dem initial examination from some cryptographers and implementation experts
die Verwaltung der Schlüssel (und damit die Schlüsselrotation oder das Schlüssel-“Ratcheting”) but is pending a more formal write up
auf flexible Weise organisiert werden kann. to ascertain it reliably works in federated messaging and with multi-device usage,
Siehe <a href="https://gitlab.com/sequoia-pgp/openpgp-dr">Seqouias PFS-Prototyp</a> before it could be implemented in <a href="https://github.com/chatmail/core">chatmail core</a>,
für bestehende Experimente in der OpenPGP-Community.</p> which would make it available in all <a href="https://chatmail.at/clients">chatmail clients</a>.</p>
<h3 id="ist-die-ende-zu-ende-verschlüsselung-von-delta-chat-genauso-sicher-wie-die-von-signal"> <h3 id="pqc">
Ist die Ende-zu-Ende-Verschlüsselung von Delta Chat genauso sicher wie die von Signal? <a href="#ist-die-ende-zu-ende-verschlüsselung-von-delta-chat-genauso-sicher-wie-die-von-signal" class="anchor"></a> Unterstützt Delta Chat Post-Quantum-Verschlüsselung? <a href="#pqc" class="anchor"></a>
</h3> </h3>
<p>Das hängt davon ab, was für Sie wichtig ist. <p>No, not yet.</p>
Delta Chat <a href="#pfs">unterstützt kein PFS</a>,
bietet aber <a href="#e2eeguarantee">garantierte Ende-zu-Ende-Verschlüsselung</a>,
die vor kompromittierten Servern oder korrupten Netzwerken schützt.
Signal und die meisten anderen PFS-unterstützenden Messenger bieten kein
praktisches System zum Schutz von Chatgruppen vor Netzwerkangriffen.
Diese sind besorgniserregender und realer
als ein potenzieller Angreifer, der zwar Ihr Telefon und Ihre privaten Schlüssel beschlagnahmt,
aber irgendwie nicht Ihre Nachrichten - gleichzeitig aber eine vollständige Aufzeichnung aller
vergangenen verschlüsselten Nachrichten hat.</p>
<p>In jedem Fall verwendet die Ende-zu-Ende-Verschlüsselung von Delta Chat eine <a href="#openpgp-secure">sichere Untermenge von OpenPGP</a> <p>Delta Chat uses the Rust OpenPGP library <a href="https://github.com/rpgp/rpgp">rPGP</a>
das <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">unabhängig sicherheitsgeprüft</a> wurde.</p> which supports the latest <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/">IETF Post-Quantum-Cryptography OpenPGP draft</a>.
We aim to add PQC support in <a href="https://github.com/chatmail/core">chatmail core</a> after the draft is finalized at the IETF
in collaboration with other OpenPGP implementers.</p>
<h3 id="wie-kann-ich-die-verschlüsselung-manuell-überprüfen">
Wie kann ich die Verschlüsselung manuell überprüfen? <a href="#wie-kann-ich-die-verschlüsselung-manuell-überprüfen" class="anchor"></a>
</h3>
<p>Sie können den Status der Ende-zu-Ende-Verschlüsselung manuell im Dialog “Verschlüsselung”
(Android/iOS: Benutzerprofil, Desktop: Rechtsklick auf den Chat eines Benutzers) überprüfen.
Delta Chat zeigt dort zwei Fingerabdrücke an.
Wenn die gleichen Fingerabdrücke auf Ihrem eigenen Gerät und auf dem Gerät Ihres Kontakts erscheinen,
ist die Verbindung sicher.</p>
<h3 id="importkey"> <h3 id="importkey">
@ -1374,7 +1260,7 @@ und systemspezifische Einstellungen wie Benachrichtigungstöne.</p>
<li>Webxdc Apps können keine Daten ins Internet senden oder etwas herunterladen.</li> <li>Webxdc Apps können keine Daten ins Internet senden oder etwas herunterladen.</li>
<li>Eine Webxdc App kann Daten nur innerhalb eines Delta-Chat-Chats mit ihren Kopien auf den Geräten Ihrer Chat-Partner austauschen. Ansonsten ist sie komplett vom Internet isoliert.</li> <li>Eine Webxdc App kann Daten nur innerhalb eines Delta-Chat-Chats mit ihren Kopien auf den Geräten Ihrer Chat-Partner austauschen. Ansonsten ist sie komplett vom Internet isoliert.</li>
<li>Die Privatsphäre, die eine Webxdc App bietet, ist die Privatsphäre Ihres Chats - solange Sie den Personen vertrauen, mit denen Sie chatten, können Sie auch der Webxdc App vertrauen.</li> <li>Die Privatsphäre, die eine Webxdc App bietet, ist die Privatsphäre Ihres Chats - solange Sie den Personen vertrauen, mit denen Sie chatten, können Sie auch der Webxdc App vertrauen.</li>
<li>Das bedeutet auch: Es kann ein Datenschutzrisiko darstellen, Webxdc Apps in Chats zu öffnen, in denen man den Mitgliedern nicht vertraut - so wie man es von E-Mail-Anhängen kennt, wo man nur Anhänge von Absendern öffnet, denen man vertraut, und nicht von Spammern.</li> <li>Das bedeutet auch: Es kann ein Datenschutzrisiko darstellen, Webxdc Apps in Chats zu öffnen, in denen man den Mitgliedern nicht vertraut - so wie man es von E-Mail-Anhängen kennt, wo man nur Anhänge von Absendern öffnet, denen man vertraut, und nicht von Spammern. Spammer erhalten alle Daten, die Sie Ihnen senden zusammen mit Ihrer IP-Adresse.</li>
</ul> </ul>
<h3 id="wo-bekomme-ich-webxdc-apps"> <h3 id="wo-bekomme-ich-webxdc-apps">
@ -1444,13 +1330,7 @@ forum</a> veröffentlicht und diskutiert.</li>
</h3> </h3>
<ul> <p>Mit einer Broadcast-Liste können Sie eine Nachricht an viele Empfänger auf einmal senden; die Empfänger können in dieser Liste nicht antworten. Broadcast-Listen sind experimentell und werden sehr wahrscheinlich durch etwas anderes ersetzt werden, bleiben Sie dran :)</p>
<li>Mit einer Broadcast-Liste können Sie eine Nachricht an viele Empfänger gleichzeitig senden; wenn sie Ihnen antworten, erhalten Sie die Antwort im Direktchat mit ihnen. Die Empfänger können einander nicht sehen.</li>
<li>Technisch gesehen handelt es sich um eine E-Mail mit vielen Empfängern in BCC.</li>
<li>Sie können die Funktion im Abschnitt “Experimentelle Features” in den erweiterten Einstellungen aktivieren. Dann können Sie im Dialogfeld “Neuer Chat” eine Broadcast-Liste erstellen.</li>
<li>Falls Sie mehr als ein Gerät verwenden, werden Broadcast-Listen derzeit nicht zwischen ihnen synchronisiert.</li>
<li>An Broadcast-Listen gesendete Nachrichten werden nicht verschlüsselt. Eine Verschlüsselung würde die Anonymität brechen, denn dann wüssten alle Empfänger, wer sie sonst noch erhalten hat. (Das Senden einzelner E-Mails an alle wäre aus Gründen der Ratenbegrenzung und des Netzwerkverbrauchs schlechter.)</li>
</ul>
<h3 id="wie-kann-ich-meinen-standort-mit-meinen-chat-partnern-teilen"> <h3 id="wie-kann-ich-meinen-standort-mit-meinen-chat-partnern-teilen">
@ -1496,6 +1376,11 @@ forum</a> veröffentlicht und diskutiert.</li>
</h3> </h3>
<p>Note:
Changing email addresses is temporarily disabled
because of ongoing changes to the DeltaChat core.
It should be available again in a few months.</p>
<ol> <ol>
<li> <li>
<p>Ändern Sie Ihre E-Mail-Adresse unter “Einstellungen → Erweitert → Passwort und E-Mail-Konto” und <p>Ändern Sie Ihre E-Mail-Adresse unter “Einstellungen → Erweitert → Passwort und E-Mail-Konto” und
@ -1594,17 +1479,19 @@ gesendet haben, Nachrichten an Ihre neue Adresse senden.</p>
Allerdings benötigen einige Anbieter besondere Einstellungen, um ordnungsgemäß zu funktionieren; eine von NutzerInnen erstellte Sammlung zu einigen Optionen findet sich unter <a href="https://providers.delta.chat">Provider Overview</a>.</li> Allerdings benötigen einige Anbieter besondere Einstellungen, um ordnungsgemäß zu funktionieren; eine von NutzerInnen erstellte Sammlung zu einigen Optionen findet sich unter <a href="https://providers.delta.chat">Provider Overview</a>.</li>
</ul> </ul>
<h3 id="ich-möchte-meinen-eigenen-e-mail-server-für-delta-chat-verwalten-gibt-es-empfehlungen"> <h3 id="ich-möchte-meinen-eigenen-server-für-delta-chat-verwalten-gibt-es-empfehlungen">
Ich möchte meinen eigenen E-Mail-Server für Delta Chat verwalten. Gibt es Empfehlungen? <a href="#ich-möchte-meinen-eigenen-e-mail-server-für-delta-chat-verwalten-gibt-es-empfehlungen" class="anchor"></a> Ich möchte meinen eigenen Server für Delta Chat verwalten. Gibt es Empfehlungen? <a href="#ich-möchte-meinen-eigenen-server-für-delta-chat-verwalten-gibt-es-empfehlungen" class="anchor"></a>
</h3> </h3>
<ul> <ul>
<li>Die meisten Mailserver werden gut funktionieren. Was wir persönlich jedoch empfehlen, ist eine Kombination aus mailcow und mailadm, wie <a href="https://delta.chat/en/2023-01-27-upcoming-mail-server-workshops">in diesem Blogpost</a> beschrieben.</li> <li>Most mail servers will work well. But what we personally recommend is a
<li>Auf unserer Webseite finden Sie eine <a href="https://delta.chat/de/serverguide">Installationsanleitung</a>.</li> chatmail relay server, as described <a href="https://delta.chat/en/2023-12-13-chatmail">in this
blogpost</a>.</li>
<li>You can find an <a href="https://github.com/chatmail/relay">installation guide on GitHub</a>.</li>
</ul> </ul>
<h3 id="weshalb-muss-ich-mein-e-mail-kennwort-in-delta-chat-eingeben-ist-das-sicher"> <h3 id="weshalb-muss-ich-mein-e-mail-kennwort-in-delta-chat-eingeben-ist-das-sicher">

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 B

View file

@ -36,27 +36,24 @@
<li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li> <li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li>
</ul> </ul>
</li> </li>
<li><a href="#encryption-and-security">Encryption and Security</a> <li><a href="#e2ee">Encryption and Security</a>
<ul> <ul>
<li><a href="#which-standards-are-used-for-end-to-end-encryption">Which standards are used for end-to-end encryption?</a></li> <li><a href="#which-standards-are-used-for-end-to-end-encryption">Which standards are used for end-to-end encryption?</a></li>
<li><a href="#whene2e">How can i know if messages are end-to-end encrypted?</a></li> <li><a href="#whene2e">How can i know if messages are end-to-end encrypted?</a></li>
<li><a href="#howtoe2ee">How can I get guaranteed end-to-end encryption and green checkmarks?</a></li> <li><a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption">Can i still receive or send mails without end-to-end encryption?</a></li>
<li><a href="#e2eeguarantee">What does the green checkmark and “guaranteed end-to-end encryption” mean?</a></li> <li><a href="#howtoe2ee">How can I establish a chat with a new contact?</a></li>
<li><a href="#nocryptanymore">A contact “sent a message from another device”, what can i do?</a></li> <li><a href="#e2eeguarantee">What does the green checkmark in a contact profile mean?</a></li>
<li><a href="#are-attachments-pictures-files-audio-etc-end-to-end-encrypted">Are attachments (pictures, files, audio etc.) end-to-end encrypted?</a></li> <li><a href="#are-attachments-pictures-files-audio-etc-end-to-end-encrypted">Are attachments (pictures, files, audio etc.) end-to-end encrypted?</a></li>
<li><a href="#openpgp-secure">Is OpenPGP secure?</a></li> <li><a href="#openpgp-secure">Is OpenPGP secure?</a></li>
<li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end -encryption?</a></li> <li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end-encryption?</a></li>
<li><a href="#is-delta-chat-vulnerable-to-efail">Is Delta Chat vulnerable to EFAIL?</a></li> <li><a href="#is-delta-chat-vulnerable-to-efail">Is Delta Chat vulnerable to EFAIL?</a></li>
<li><a href="#tls">Is a message exposed in cleartext if end-to-end encryption is not available?</a></li> <li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
<li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li> <li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li>
<li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li> <li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li>
<li><a href="#how-can-i-check-encryption-information">How can i check encryption information?</a></li> <li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
<li><a href="#how-can-i-check-the-encryption-status-of-messages">How can I check the encryption status of messages?</a></li>
<li><a href="#why-do-i-see-unencrypted-messages">Why do I see unencrypted messages?</a></li>
<li><a href="#how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app">How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app?</a></li>
<li><a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion">How can I ensure message end-to-end encryption and deletion?</a></li>
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li> <li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of Delta Chat as safe as Signal?</a></li> <li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
<li><a href="#how-can-i-manually-check-encryption-information">How can I manually check encryption information?</a></li>
<li><a href="#importkey">Can I reuse my existing private key?</a></li> <li><a href="#importkey">Can I reuse my existing private key?</a></li>
<li><a href="#security-audits">Was Delta Chat independently audited for security vulnerabilities?</a></li> <li><a href="#security-audits">Was Delta Chat independently audited for security vulnerabilities?</a></li>
</ul> </ul>
@ -90,7 +87,7 @@
<ul> <ul>
<li><a href="#which-permissions-does-delta-chat-need">Which permissions does Delta Chat need?</a></li> <li><a href="#which-permissions-does-delta-chat-need">Which permissions does Delta Chat need?</a></li>
<li><a href="#does-delta-chat-work-with-my-e-mail-provider">Does Delta Chat work with <em>my</em> e-mail-provider?</a></li> <li><a href="#does-delta-chat-work-with-my-e-mail-provider">Does Delta Chat work with <em>my</em> e-mail-provider?</a></li>
<li><a href="#i-want-to-manage-my-own-e-mail-server-for-delta-chat-what-do-you-recommend">I want to manage my own e-mail server for Delta Chat. What do you recommend?</a></li> <li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
<li><a href="#why-do-i-have-to-enter-my-e-mail-password-into-delta-chat-is-this-secure">Why do I have to enter my E-Mail password into Delta Chat? Is this secure?</a></li> <li><a href="#why-do-i-have-to-enter-my-e-mail-password-into-delta-chat-is-this-secure">Why do I have to enter my E-Mail password into Delta Chat? Is this secure?</a></li>
<li><a href="#which-messages-do-appear-in-delta-chat">Which messages do appear in Delta Chat?</a></li> <li><a href="#which-messages-do-appear-in-delta-chat">Which messages do appear in Delta Chat?</a></li>
<li><a href="#does-delta-chat-support-html-e-mails">Does Delta Chat support HTML e-mails?</a></li> <li><a href="#does-delta-chat-support-html-e-mails">Does Delta Chat support HTML e-mails?</a></li>
@ -726,10 +723,10 @@ that achieves “instant delivery” of messages for all chatmail servers
including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>. including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>.
Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p> Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p>
<h2 id="encryption-and-security"> <h2 id="e2ee">
Encryption and Security <a href="#encryption-and-security" class="anchor"></a> Encryption and Security <a href="#e2ee" class="anchor"></a>
</h2> </h2>
@ -742,18 +739,26 @@ Welcome to the power of the interoperable and massive chatmail and e-mail system
</h3> </h3>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically <p>Delta Chat uses a <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>
establishing end-to-end encryption with contacts and group chats. to provide automatic end-to-end encryption using these protocols:</p>
Autocrypt uses a limited and <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>.
End-to-End encrypted messages are marked with a padlock
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../lock-icon.png" alt="padlock" />.</p>
<p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a> <ul>
are used for establishing chats with guaranteed end-to-end encryption <li>
which protects against network attacks and compromised servers. <p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join</a>
Chats marked with a green checkmark to exchange encryption setup information through QR-code scanning or “invite links”.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> </li>
guarantee end-to-end encrypted messages.</p> <li>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically
establishing end-to-end encryption between contacts and all members of a group chat.</p>
</li>
<li>
<p><a href="https://github.com/chatmail/core/blob/main/spec.md#attaching-a-contact-to-a-message">Sharing a contact to a
chat</a>
enables receivers to use end-to-end encryption with the contact.</p>
</li>
</ul>
<p>Delta Chat does not query, publish or interact with any OpenPGP key servers.</p>
<h3 id="whene2e"> <h3 id="whene2e">
@ -763,28 +768,37 @@ guarantee end-to-end encrypted messages.</p>
</h3> </h3>
<p>All end-to-end encrypted messages carry a padlock:</p> <p>All messages in Delta Chat are <strong>end-to-end encrypted by default</strong>.
Since the Delta Chat Version 2 release series (July 2025)
there are no lock or similar markers on end-to-end encrypted messages, anymore.</p>
<p><img style="width:160px; margin:1px" src="../lock-screenshot.png" alt="padlock in bubble" /></p> <h3 id="can-i-still-receive-or-send-mails-without-end-to-end-encryption">
<p>End-to-end encryption is guaranteed if there is a green checkmark next to the chat title:</p>
<p><img style="width:211px; margin:1px" src="../green-checkmark-screenshot.png" alt="green checkmark in title" /></p>
<h3 id="howtoe2ee">
How can I get guaranteed end-to-end encryption and green checkmarks? <a href="#howtoe2ee" class="anchor"></a> Can i still receive or send mails without end-to-end encryption? <a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption" class="anchor"></a>
</h3> </h3>
<p>If you have a second communication channel with your chat partner, <p>If you use default <a href="https://chatmail.at/relays">chatmail relays</a>,
like a video chat or a different messenger, it is impossible to receive or send messages without end-to-end encryption.</p>
you can generate an invite link.</p>
<p>If you are together in person, <p>If you instead create a profile using a classic e-mail server,
you can show a QR code to your chat partner.</p> you can send and receive messages without end-to-end encryption.
Such messages lacking end-to-end encryption are marked with an e-mail icon
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
<h3 id="howtoe2ee">
How can I establish a chat with a new contact? <a href="#howtoe2ee" class="anchor"></a>
</h3>
<p>You can send an invite link through another private chat,
show an invitation QR code when next to each other or in a video call,
or click on a “contact” that was shared in a chat.</p>
<ul> <ul>
<li> <li>
@ -799,135 +813,54 @@ on the Delta Chat app main screen.</p>
</li> </li>
</ul> </ul>
<p>Let your chat partner scan the QR image <p>Ask your chat partner to scan the QR image
with their Delta Chat app, with their Delta Chat app,
or click “Copy” or “Share” to create an invite link or click “Copy” or “Share” to create an invite link
and share it with your chat partner.</p> and share it with your chat partner.</p>
<p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">Secure-Join network messages are exchanged</a> between both devices.</p> <p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">end-to-end encryption is getting established</a>.</p>
<ul> <ul>
<li> <li>
<p>If both devices are online, <p>If both sides are online, they will soon see a (group or direct) chat
both sides will eventually see a (group or direct) chat with a green checkmark and can start messaging securely.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
next to the title.</p>
</li> </li>
<li> <li>
<p>If one of the devices is offline, the green checkmarks will only <p>If one side is offline or in bad network,
appear later when the device is internet-connected again the ability to chat is delayed until connectivity is restored.</p>
and the Secure-Join network protocol completed.</p>
</li> </li>
</ul> </ul>
<p>Congratulations! <p>Congratulations!
You now will automatically use guaranteed end-to-end encryption You now will automatically use end-to-end encryption
with this contact and both of you can add each other to green-checkmarked groups with this contact.
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />, If you add each other to chat groups,
thereby automatically spreading guaranteed end-to-end encryption among its members.</p> end-to-end encryption will be established among all members.</p>
<h3 id="e2eeguarantee"> <h3 id="e2eeguarantee">
What does the green checkmark and “guaranteed end-to-end encryption” mean? <a href="#e2eeguarantee" class="anchor"></a> What does the green checkmark in a contact profile mean? <a href="#e2eeguarantee" class="anchor"></a>
</h3> </h3>
<p>Chat titles with green checkmarks <p>A contact profile might show a green checkmark
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
mean that all messages in the chat will be end-to-end encrypted and an “Introduced by” line.
and can not be read or altered by compromised e-mail servers or Internet providers.
Joining green-checkmarked group chats
safely spreads everybodys encryption information (and green checkmarks)
in a manner that guarantees end-to-end encryption in the group and among members.</p>
<p>Contact profiles with green checkmarks
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
mean that messaging a contact is currently guaranteed to be end-to-end encrypted.
Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you
or was introduced by a another green-checkmarked contact. or was introduced by a another green-checkmarked contact.
Introductions happen automatically when adding members to groups. Introductions happen automatically when adding members to groups.
Whoever adds a contact to a green-checkmarked group becomes an introducer Whoever adds a green-checkmarked contact to a group with only green-checkmarked members
to those members who didnt yet know about the added contact. becomes an introducer.
In a contact profile you can tap on the “Introduced by …” text repeatedly In a contact profile you can tap on the “Introduced by …” text repeatedly
until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p> until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p>
<p>Note that in a contact profile you may see and tap introducers
but there is no green checkmark in the profile title.
This usually means that the contact <a href="#nocryptanymore">“sent a message from another device”</a>.</p>
<p>For more in-depth discussion of “guaranteed end-to-end encryption” <p>For more in-depth discussion of “guaranteed end-to-end encryption”
please see <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a> please see <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a>
and specifically read about “Verified Groups”, the technical term and specifically read about “Verified Groups”, the technical term
of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.</p> of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.</p>
<h3 id="nocryptanymore">
A contact “sent a message from another device”, what can i do? <a href="#nocryptanymore" class="anchor"></a>
</h3>
<p>Your chat with a contact lost guaranteed end-to-end encryption.
The green checkmark was removed for this chat and contact when you see this warning.
<strong>If you find the sudden drop of guaranteed end-to-end encryption
surprising for this contact then dont accept the warning!</strong>
Instead check with your contact through a second channel
like a video call, other messenger or a phone call,
to find out what happened.</p>
<p>If your contact actually caused the drop of guaranteed end-to-end encryption
please see the next paragraphs for common reasons and their mitigations.
Regardless, all other green-checkmarked chats remain guaranteed end-to-end encrypted
even if the contact is a member there.</p>
<p><strong>Your contact is using Delta Chat on a second device (phone or laptop)</strong></p>
<p>If they have another device with a Delta Chat app running,
they should remove the profile from the new device
and add it <a href="#multiclient">as a second device as described here</a>.
As soon as they message you afterwards, the warning will be gone
and guaranteed encryption is established with both devices of your contact.</p>
<p><strong>Your contact reinstalled Delta Chat using their old account login</strong></p>
<p>If they have <a href="#backup">a backup file</a>,
they should remove the profile from the new device
and rather import the backup file to re-create their profile.
As soon as they message you afterwards, the warning will be gone
and guaranteed encryption is re-established for this contact.</p>
<p>If they dont have a backup file, its best to perform a <a href="#howtoe2ee">QR scan</a>
with your chat partner to re-establish guaranteed end-to-end encryption.</p>
<p><strong>Your contact sent a mail through a webmail interface or another e-mail app
and will get back to using Delta Chat soon again.</strong></p>
<p>If you are sure that the contact sometimes uses webmail,
or another mail app lacking end-to-end encryption,
then you may accept the warning.
As soon as your contact uses Delta Chat again,
guaranteed end-to-end encryption will be automatically re-established.</p>
<p><strong>Your contact stopped using Delta Chat entirely</strong></p>
<p>Sometimes remaining in contact is more important than end-to-end encryption.
<a href="#tls">“Transport Layer Encryption” (TLS)</a> may still meaningfully protect
the confidentiality of your messages between your device and the e-mail server.
But without end-to-end encryption you and your contact are trusting your e-mail server
to not read or manipulate your messages, and to not hand them to third parties.</p>
<p>In any case, you can not do much else than accept the warning.
Please also remove the contact from any active green-checkmarked group
which you can find in “Shared chats” in the Contact profile.
This spares your contact from getting “unreadable” messages.</p>
<p>If the contact removed Delta Chat because of buggy or undesirable behaviour,
please consider posting to our <a href="https://support.delta.chat">support forum</a>
to help us identify and address common problems. Thanks!</p>
<h3 id="are-attachments-pictures-files-audio-etc-end-to-end-encrypted"> <h3 id="are-attachments-pictures-files-audio-etc-end-to-end-encrypted">
@ -952,8 +885,7 @@ and attachment metadata such as filenames.</p>
</h3> </h3>
<p>Yes, Delta Chat uses a secure subset of OpenPGP <p>Yes, Delta Chat uses a secure subset of OpenPGP
and only displays a padlock security indicator on a message requiring the whole message to be properly encrypted and signed.
if the whole message is properly encrypted and signed.
For example, “Detached signatures” are not treated as secure.</p> For example, “Detached signatures” are not treated as secure.</p>
<p>OpenPGP is not insecure by itself. <p>OpenPGP is not insecure by itself.
@ -974,7 +906,7 @@ which was thankfully adopted in summer 2023.</p>
<h3 id="openpgp-alternatives"> <h3 id="openpgp-alternatives">
Did you consider using alternatives to OpenPGP for end-to-end -encryption? <a href="#openpgp-alternatives" class="anchor"></a> Did you consider using alternatives to OpenPGP for end-to-end-encryption? <a href="#openpgp-alternatives" class="anchor"></a>
</h3> </h3>
@ -1017,17 +949,15 @@ as defined by the Autocrypt Level 1 specification.</p>
<h3 id="tls"> <h3 id="tls">
Is a message exposed in cleartext if end-to-end encryption is not available? <a href="#tls" class="anchor"></a> Are messages marked with the mail icon exposed on the Internet? <a href="#tls" class="anchor"></a>
</h3> </h3>
<p>Even if your messages are not guaranteed to be end-to-end encrypted, <p>If you are sending or receiving e-mail messages without end-to-end encryption (using a classic e-mail server),
they are still protected from Internet providers like cell or cable companies. they are still protected from cell or cable companies who can not read or modify your e-mail messages.
However, your and your recipients e-mail providers But both your and your recipients e-mail providers
may read, analyze or even modify your messages, may read, analyze or modify your messages, including any attachments.</p>
including any attachments,
if they are not end-to-end encrypted.</p>
<p>Delta Chat by default uses strict <p>Delta Chat by default uses strict
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a> <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a>
@ -1040,10 +970,6 @@ then transport encryption will be enforced between e-mail providers
in which case Delta Chat communications will never be exposed in cleartext to the Internet in which case Delta Chat communications will never be exposed in cleartext to the Internet
even if the message was not end-to-end encrypted.</p> even if the message was not end-to-end encrypted.</p>
<p>Note that <a href="#howtoe2ee">maintaining guaranteed end-to-end encryption</a> on top of TLS encryption
provides pervasive safety between your and the recipients devices.
Not even your e-mail or Internet provider will be able to read or modify your messages.</p>
<h3 id="message-metadata"> <h3 id="message-metadata">
@ -1052,25 +978,25 @@ Not even your e-mail or Internet provider will be able to read or modify your me
</h3> </h3>
<p>Delta Chat protects most message metadata by putting the following information <p>Unlike most other messengers,
into the end-to-end encrypted part of messages:</p> Delta Chat apps do not store any metadata about contacts or groups on servers, also not in encrypted form.
Instead, all group metadata is end-to-end encrypted and stored on end-user devices, only.</p>
<p>E-mail Servers can therefore only see</p>
<ul> <ul>
<li>Subject line</li> <li>
<li>Group avatar and name</li> <p>the message date,</p>
<li>MDN (read receipt) requests (<code class="language-plaintext highlighter-rouge">Chat-Disposition-Notification-To</code>)</li> </li>
<li>Disappearing message timer (<code class="language-plaintext highlighter-rouge">Ephemeral-Timer</code>)</li> <li>
<li><code class="language-plaintext highlighter-rouge">Chat-Group-Member-Removed</code>, <code class="language-plaintext highlighter-rouge">Chat-Group-Member-Added</code></li> <p>sender and receiver addresses</p>
<li><code class="language-plaintext highlighter-rouge">Secure-Join</code> header containing secure join commands</li> </li>
<li>Notification about enabling location streaming</li> <li>
<li>WebRTC room URL</li> <p>and message size.</p>
</li>
</ul> </ul>
<p>E-Mail servers do not get access to this protected metadata <p>All other message, contact and group metadata resides in the end-to-end encrypted part of messages.</p>
but they do see the message date as well as the message size,
and, more importantly, the sender and receiver addresses.
E-mail servers need receiver addresses to route and
deliver messages to recipients devices.</p>
<h3 id="device-seizure"> <h3 id="device-seizure">
@ -1082,96 +1008,34 @@ deliver messages to recipients devices.</p>
<p>Both for protecting against metadata-collecting e-mail servers <p>Both for protecting against metadata-collecting e-mail servers
as well as against the threat of device seizure as well as against the threat of device seizure
we recommend to use a <a href="https://delta.chat/chatmail">chatmail server</a> we recommend to use a <a href="https://chatmail.at/relays">chatmail relay</a>
to create pseudonymous temporary profiles through QR-code scans. to create chat profiles using random e-mail addresses for transport.
Note that Delta Chat apps on all platforms support multiple profiles Note that Delta Chat apps on all platforms support multiple profiles
so you can easily use situation-specific profiles next to your “main” profile so you can easily use situation-specific profiles next to your “main” profile
with the knowledge that all their data, along with all metadata, will be deleted. with the knowledge that all their data, along with all metadata, will be deleted.
Moreover, if a device is seized then contacts using temporary profiles Moreover, if a device is seized then chat contacts using short-lived profiles
can not be identified easily, as compared to messengers which reveal can not be identified easily.</p>
phone numbers in chat groups which in turn are often associated with legal identities.</p>
<h3 id="how-can-i-check-encryption-information"> <h3 id="sealedsender">
How can i check encryption information? <a href="#how-can-i-check-encryption-information" class="anchor"></a> Does Delta Chat support “Sealed Sender”? <a href="#sealedsender" class="anchor"></a>
</h3> </h3>
<p>You may check the end-to-end encryption status manually in the “Encryption” dialog <p>No, not yet.</p>
(user profile on Android/iOS or right-click a users chat-list item on desktop).
Delta Chat shows two fingerprints there.
If the same fingerprints appear on your own and your contacts device,
the connection is safe.</p>
<h3 id="how-can-i-check-the-encryption-status-of-messages"> <p>The Signal messenger introduced <a href="https://signal.org/blog/sealed-sender/">“Sealed Sender” in 2018</a>
to keep their server infrastructure ignorant of who is sending a message to a set of recipients.
It is particularly important because the Signal server knows the mobile number of each account,
which is usually associated with a passport identity.</p>
<p>Even if <a href="https://chatmail.at/relays">chatmail relays</a>
How can I check the encryption status of messages? <a href="#how-can-i-check-the-encryption-status-of-messages" class="anchor"></a> do not ask for any private data (including no phone numbers),
it might still be worthwhile to protect relational metadata between addresses.
We dont foresee bigger problems in using random throw-away e-mail addresses for sealed sending
</h3> but an implementation has not been agreed as a priority yet.</p>
<p>A little <strong>padlock</strong> in a message bubble denotes
that the message was properly end-to-end encrypted from the given sender.
If there is <strong>no padlock</strong>, the message was not properly end-to-end encrypted
most likely because the sender uses an app or webmail interface
without support for end-to-endencryption.</p>
<h3 id="why-do-i-see-unencrypted-messages">
Why do I see unencrypted messages? <a href="#why-do-i-see-unencrypted-messages" class="anchor"></a>
</h3>
<p>If a contact uses a non-Autocrypt e-mail app,
all messages involving this contact (in a group or 1:1 chat)
will not be end-to-end encrypted, and thus not show a “padlock” with messages.
Note that even if your contacts use Delta Chat on their account,
they might also use a non-Autocrypt e-mail app on that account
which then may cause intermittently unencrypted messages.
Replying unencrypted to unencrypted messages is mandated by Autocrypt
to prevent unreadable messages on the side of your contacts
and their non-Autocrypt e-mail app.</p>
<h3 id="how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app">
How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app? <a href="#how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app" class="anchor"></a>
</h3>
<p>If you need a safely end-to-end encrypted chat with a contact
who is using their e-mail account both with Delta Chat and non-Autocrypt apps (e.g. webmail),
its best to setup <a href="#howtoe2ee">guaranteed end-to-end encryption with them</a>
and then create a guaranteed end-to-end encrypted group chat with you two as members.
In this group chat all messages will be end-to-end encrypted
even if the direct chat between you two has a
<a href="#nocryptanymore">“… sent a message from another device”</a> warning.</p>
<h3 id="how-can-i-ensure-message-end-to-end-encryption-and-deletion">
How can I ensure message end-to-end encryption and deletion? <a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion" class="anchor"></a>
</h3>
<p>The best way to ensure every message is end-to-end encrypted,
and metadata deleted as quickly as possible
is <a href="#howtoe2ee">using chats with guaranteed end-to-end encryption</a>
and turning on <a href="#ephemeralmsgs">disappearing messages</a>.</p>
<p>Guaranteed end-to-end encrypted chats protect against <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM attacks</a>
and turning on disappearing messages deletes the messages
on the server after a user-configured time.</p>
<p>If you dont need a longer-lived copy of your messages on the server,
you can also turn on <a href="#delold">“delete messages from server automatically”</a>.</p>
<h3 id="pfs"> <h3 id="pfs">
@ -1181,45 +1045,52 @@ you can also turn on <a href="#delold">“delete messages from server automatica
</h3> </h3>
<p>No, Delta Chat doesnt support Perfect Forward Secrecy (PFS). <p>No, not yet.</p>
This means that if your Delta Chat private decryption key is leaked,
<p>Delta Chat today doesnt support Perfect Forward Secrecy (PFS).
This means that if your private decryption key is leaked,
and someone has collected your prior in-transit messages, and someone has collected your prior in-transit messages,
they will be able to decrypt and read them using the leaked decryption key.</p> they will be able to decrypt and read them using the leaked decryption key.
Note that Forward Secrecy only increases security if you delete messages.
Otherwise, someone obtaining your decryption keys
is typically also able to get all your non-deleted messages
and doesnt even need to decrypt any previously collected messages.</p>
<p>Note, however, that if anyone obtains to your decryption keys, <p>We designed a Forward Secrecy approach that withstood
they will typically also be able to obtain your messages, initial examination from some cryptographers and implementation experts
irrespective if Perfect Forward Secrecy is in place or not. but is pending a more formal write up
The typical real-world situation for leaked decryption keys is device seizure to ascertain it reliably works in federated messaging and with multi-device usage,
which we discuss in our answer <a href="#device-seizure">on metadata and device seizure</a>.</p> before it could be implemented in <a href="https://github.com/chatmail/core">chatmail core</a>,
which would make it available in all <a href="https://chatmail.at/clients">chatmail clients</a>.</p>
<p>It is possible that Delta Chat evolves to support Perfect Forward Secrecy, <h3 id="pqc">
because OpenPGP is just a container for encrypted messages
but encryption key management (and thus key rotation or key “ratcheting”)
could be organized in flexible ways.
See <a href="https://gitlab.com/sequoia-pgp/openpgp-dr">Seqouias PFS prototype</a>
for existing experiments in the OpenPGP implementor community.</p>
<h3 id="is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">
Is end-to-end encryption of Delta Chat as safe as Signal? <a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal" class="anchor"></a> Does Delta Chat support Post-Quantum-Cryptography? <a href="#pqc" class="anchor"></a>
</h3> </h3>
<p>It depends on what is important to you. <p>No, not yet.</p>
Delta Chat <a href="#pfs">does not support PFS</a> like Signal does
but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</a>
that are safe against compromised servers or corrupted networks.
Signal and most other PFS-supporting messengers do not provide
a practical scheme for protecting chat groups from network attacks
which are arguably more worrisome
than a potential attacker who seizes your phone and private encryption setup
but somehow not your messages, yet has a full record of all
past encrypted messages.</p>
<p>In any case, Delta Chats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a> <p>Delta Chat uses the Rust OpenPGP library <a href="https://github.com/rpgp/rpgp">rPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p> which supports the latest <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/">IETF Post-Quantum-Cryptography OpenPGP draft</a>.
We aim to add PQC support in <a href="https://github.com/chatmail/core">chatmail core</a> after the draft is finalized at the IETF
in collaboration with other OpenPGP implementers.</p>
<h3 id="how-can-i-manually-check-encryption-information">
How can I manually check encryption information? <a href="#how-can-i-manually-check-encryption-information" class="anchor"></a>
</h3>
<p>You may check the end-to-end encryption status manually in the “Encryption” dialog
(user profile on Android/iOS or right-click a users chat-list item on desktop).
Delta Chat shows two fingerprints there.
If the same fingerprints appear on your own and your contacts device,
the connection is safe.</p>
<h3 id="importkey"> <h3 id="importkey">
@ -1254,7 +1125,7 @@ from most recent to older:</p>
<li> <li>
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of <p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place. rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat. rPGP serves as the end-to-end encryption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
Two advisories were released related to the findings of this audit:</p> Two advisories were released related to the findings of this audit:</p>
<ul> <ul>
@ -1501,9 +1372,10 @@ copies on the devices of your chat partners. Other than that, its completely
isolated from the Internet.</li> isolated from the Internet.</li>
<li>The privacy a webxdc app offers is the privacy of your chat - as long as you <li>The privacy a webxdc app offers is the privacy of your chat - as long as you
trust the people you chat with, you can trust the webxdc app as well.</li> trust the people you chat with, you can trust the webxdc app as well.</li>
<li>This also means: it can be a privacy risk to open webxdc apps in chats where <li>This also means: it can be a privacy risk to open apps in chats with untrusted members.
you dont trust the members - as you know it from e-mail attachments, where Just like with e-mail attachments, video calls or plain links:
you only open attachments from senders you trust, and not from spammers.</li> open them only from senders you trust, and not from spammers.
Spammers can get to know any data you send to them, as well as your IP address.</li>
</ul> </ul>
<h3 id="where-can-i-get-webxdc-apps"> <h3 id="where-can-i-get-webxdc-apps">
@ -1587,21 +1459,10 @@ this way, you will have a new random Jitsi room every time you call someone.</li
</h3> </h3>
<ul> <p>With a Broadcast List you can send a message to many recipients at once;
<li>With a Broadcast List you can send a message to many recipients at once; when the recipients cannot reply in that list.
they reply to you, you get the reply in your direct 1:1 chat with them. The Broadcast lists are still highly experimental
recipients cant see each other.</li> and will very probably be replaced by something else, stay tuned :)</p>
<li>Technically, it is an E-Mail with many recipients in BCC.</li>
<li>You can turn on the feature in the “experimental features” section in the
advanced settings. Then you can create a Broadcast List from the “New Chat”
dialog.</li>
<li>In case you are using more than one device, Broadcast Lists are currently not
synced between them.</li>
<li>Messages sent to broadcast lists are not encrypted. Encryption would break
anonymity, because then all recipients would know who else received it
(Sending individual mails to everyone would be worse for rate limit and network
consumption reason).</li>
</ul>
<h3 id="how-can-i-share-my-location-with-my-chat-partners"> <h3 id="how-can-i-share-my-location-with-my-chat-partners">
@ -1658,6 +1519,11 @@ would be done by the Delta Chat app.</p>
</h3> </h3>
<p>Note:
Changing email addresses is temporarily disabled
because of ongoing changes to the DeltaChat core.
It should be available again in a few months.</p>
<ol> <ol>
<li> <li>
<p>Change your address in “Settings → Advanced → Password and Account” and <p>Change your address in “Settings → Advanced → Password and Account” and
@ -1760,19 +1626,19 @@ However, some providers need special options to work properly,
see <a href="https://providers.delta.chat">Provider Overview</a></li> see <a href="https://providers.delta.chat">Provider Overview</a></li>
</ul> </ul>
<h3 id="i-want-to-manage-my-own-e-mail-server-for-delta-chat-what-do-you-recommend"> <h3 id="i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">
I want to manage my own e-mail server for Delta Chat. What do you recommend? <a href="#i-want-to-manage-my-own-e-mail-server-for-delta-chat-what-do-you-recommend" class="anchor"></a> I want to manage my own server for Delta Chat. What do you recommend? <a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend" class="anchor"></a>
</h3> </h3>
<ul> <ul>
<li>Most mail servers will work well. But what we personally recommend is a <li>Most mail servers will work well. But what we personally recommend is a
combination of mailcow and mailadm, as described <a href="https://delta.chat/en/2023-01-27-upcoming-mail-server-workshops">in this chatmail relay server, as described <a href="https://delta.chat/en/2023-12-13-chatmail">in this
blogpost</a>.</li> blogpost</a>.</li>
<li>You can find an <a href="https://delta.chat/en/serverguide">installation guide on our website</a>.</li> <li>You can find an <a href="https://github.com/chatmail/relay">installation guide on GitHub</a>.</li>
</ul> </ul>
<h3 id="why-do-i-have-to-enter-my-e-mail-password-into-delta-chat-is-this-secure"> <h3 id="why-do-i-have-to-enter-my-e-mail-password-into-delta-chat-is-this-secure">

View file

@ -6,11 +6,11 @@
<li><a href="#cuáles-son-las-ventajas-de-delta-chat-comparado-con-otras-aplicaciones-de-mensajería">¿Cuáles son las ventajas de Delta Chat comparado con otras aplicaciones de mensajería?</a></li> <li><a href="#cuáles-son-las-ventajas-de-delta-chat-comparado-con-otras-aplicaciones-de-mensajería">¿Cuáles son las ventajas de Delta Chat comparado con otras aplicaciones de mensajería?</a></li>
<li><a href="#qué-pasa-si-espero-un-mensaje-de-alguien-a-quien-no-le-escribí-en-el-pasado">¿Qué pasa si espero un mensaje de alguien a quien no le escribí en el pasado?</a></li> <li><a href="#qué-pasa-si-espero-un-mensaje-de-alguien-a-quien-no-le-escribí-en-el-pasado">¿Qué pasa si espero un mensaje de alguien a quien no le escribí en el pasado?</a></li>
<li><a href="#delta-chat-soporta-envío-de-imágenes-videos-documentos-y-otros-archivos">¿Delta Chat soporta envío de imágenes, videos, documentos y otros archivos?</a></li> <li><a href="#delta-chat-soporta-envío-de-imágenes-videos-documentos-y-otros-archivos">¿Delta Chat soporta envío de imágenes, videos, documentos y otros archivos?</a></li>
<li><a href="#multiple-accounts">What are profiles? How can I switch between them?</a></li> <li><a href="#multiple-accounts">¿Qué son los perfiles? ¿Cómo puedo cambiar entre ellos?</a></li>
<li><a href="#quién-ve-mi-foto-de-perfil">¿Quién ve mi foto de perfil?</a></li> <li><a href="#quién-ve-mi-foto-de-perfil">¿Quién ve mi foto de perfil?</a></li>
<li><a href="#signature">Can I set a Bio/Signature/Status/Motto with Delta Chat?</a></li> <li><a href="#signature">¿Puedo establecer un texto de firma con Delta Chat?</a></li>
<li><a href="#qué-significa-fijar-mutear-archivar">¿Qué significa fijar, mutear, archivar?</a></li> <li><a href="#qué-significa-fijar-mutear-archivar">¿Qué significa fijar, mutear, archivar?</a></li>
<li><a href="#save">How do “Saved Messages” work?</a></li> <li><a href="#save">¿Cómo funcionan los “Mensajes guardados”?</a></li>
<li><a href="#qué-significa-el-punto-verde">¿Qué significa el punto verde?</a></li> <li><a href="#qué-significa-el-punto-verde">¿Qué significa el punto verde?</a></li>
<li><a href="#edit">Correct typos and delete messages after sending</a></li> <li><a href="#edit">Correct typos and delete messages after sending</a></li>
<li><a href="#ephemeralmsgs">¿Cómo funciona la desaparición de mensajes?</a></li> <li><a href="#ephemeralmsgs">¿Cómo funciona la desaparición de mensajes?</a></li>
@ -36,27 +36,24 @@
<li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li> <li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li>
</ul> </ul>
</li> </li>
<li><a href="#cifrado-y-seguridad">Cifrado y seguridad</a> <li><a href="#e2ee">Cifrado y seguridad</a>
<ul> <ul>
<li><a href="#qué-estándares-se-utilizan-para-el-cifrado-de-extremo-a-extremo">¿Qué estándares se utilizan para el cifrado de extremo a extremo?</a></li> <li><a href="#qué-estándares-se-utilizan-para-el-cifrado-de-extremo-a-extremo">¿Qué estándares se utilizan para el cifrado de extremo a extremo?</a></li>
<li><a href="#whene2e">¿Cómo puedo saber si los mensajes están cifrados de extremo a extremo?</a></li> <li><a href="#whene2e">¿Cómo puedo saber si los mensajes están cifrados de extremo a extremo?</a></li>
<li><a href="#howtoe2ee">¿Cómo puedo obtener cifrado de extremo a extremo garantizado y estampillas verdes?</a></li> <li><a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption">Can i still receive or send mails without end-to-end encryption?</a></li>
<li><a href="#e2eeguarantee">¿Qué significa la estampilla verde y “cifrado de extremo a extremo garantizado”?</a></li> <li><a href="#howtoe2ee">How can I establish a chat with a new contact?</a></li>
<li><a href="#nocryptanymore">Un contacto “envió un mensaje desde otro dispositivo”, ¿qué puedo hacer?</a></li> <li><a href="#e2eeguarantee">What does the green checkmark in a contact profile mean?</a></li>
<li><a href="#los-adjuntos-imágenes-archivos-audio-etc-están-cifrados-de-extremo-a-extremo">¿Los adjuntos (imágenes, archivos, audio, etc.) están cifrados de extremo a extremo?</a></li> <li><a href="#los-adjuntos-imágenes-archivos-audio-etc-están-cifrados-de-extremo-a-extremo">¿Los adjuntos (imágenes, archivos, audio, etc.) están cifrados de extremo a extremo?</a></li>
<li><a href="#openpgp-secure">¿Es OpenPGP seguro?</a></li> <li><a href="#openpgp-secure">¿Es OpenPGP seguro?</a></li>
<li><a href="#openpgp-alternatives">¿Consideraron usar alternativas a OpenPGP para el cifrado de extremo a extremo?</a></li> <li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end-encryption?</a></li>
<li><a href="#es-delta-chat-vulnerable-a-efail">¿Es Delta Chat vulnerable a EFAIL?</a></li> <li><a href="#es-delta-chat-vulnerable-a-efail">¿Es Delta Chat vulnerable a EFAIL?</a></li>
<li><a href="#tls">¿Se expone un mensaje en texto claro si no está disponible el cifrado de extremo a extremo?</a></li> <li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
<li><a href="#message-metadata">¿Cómo Delta Chat protege los metadatos en los mensajes?</a></li> <li><a href="#message-metadata">¿Cómo Delta Chat protege los metadatos en los mensajes?</a></li>
<li><a href="#device-seizure">¿Cómo proteger los metadatos y los contactos cuando se incauta un dispositivo?</a></li> <li><a href="#device-seizure">¿Cómo proteger los metadatos y los contactos cuando se incauta un dispositivo?</a></li>
<li><a href="#cómo-puedo-verificar-la-información-de-cifrado">¿Cómo puedo verificar la información de cifrado?</a></li> <li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
<li><a href="#cómo-puedo-verificar-el-estado-de-cifrado-de-los-mensajes">¿Cómo puedo verificar el estado de cifrado de los mensajes?</a></li>
<li><a href="#por-qué-veo-mensajes-sin-cifrar">¿Por qué veo mensajes sin cifrar?</a></li>
<li><a href="#cómo-puedo-obtener-un-chat-cifrado-de-extremo-a-extremo-con-un-contacto-de-delta-chat-que-a-veces-utiliza-webmail-u-otra-aplicación-de-correo-electrónico-no-autocrypt">¿Cómo puedo obtener un chat cifrado de extremo a extremo con un contacto de Delta Chat que a veces utiliza webmail u otra aplicación de correo electrónico no Autocrypt?</a></li>
<li><a href="#cómo-puedo-asegurar-el-cifrado-de-extremo-a-extremo-y-la-eliminación-de-mensajes">¿Cómo puedo asegurar el cifrado de extremo a extremo y la eliminación de mensajes?</a></li>
<li><a href="#pfs">¿Soporta Delta Chat Perfect Forward Secrecy?</a></li> <li><a href="#pfs">¿Soporta Delta Chat Perfect Forward Secrecy?</a></li>
<li><a href="#es-el-cifrado-de-extremo-a-extremo-de-delta-chat-tan-seguro-como-el-de-signal">¿Es el cifrado de extremo a extremo de Delta Chat tan seguro como el de Signal?</a></li> <li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
<li><a href="#how-can-i-manually-check-encryption-information">How can I manually check encryption information?</a></li>
<li><a href="#importkey">¿Puedo reutilizar mi clave privada existente?</a></li> <li><a href="#importkey">¿Puedo reutilizar mi clave privada existente?</a></li>
<li><a href="#security-audits">¿Se auditó Delta Chat de forma independiente en busca de vulnerabilidades de seguridad?</a></li> <li><a href="#security-audits">¿Se auditó Delta Chat de forma independiente en busca de vulnerabilidades de seguridad?</a></li>
</ul> </ul>
@ -90,7 +87,7 @@
<ul> <ul>
<li><a href="#qué-permisos-necesita-delta-chat">¿Qué permisos necesita Delta Chat?</a></li> <li><a href="#qué-permisos-necesita-delta-chat">¿Qué permisos necesita Delta Chat?</a></li>
<li><a href="#delta-chat-funciona-con-mi-proveedor-de-correo-electrónico">¿Delta Chat funciona con <em>mi</em> proveedor de correo electrónico?</a></li> <li><a href="#delta-chat-funciona-con-mi-proveedor-de-correo-electrónico">¿Delta Chat funciona con <em>mi</em> proveedor de correo electrónico?</a></li>
<li><a href="#quiero-manejar-mi-propio-servidor-de-correo-para-delta-chat-qué-me-recomiendan">Quiero manejar mi propio servidor de correo para Delta Chat. ¿Qué me recomiendan?</a></li> <li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
<li><a href="#por-qué-debo-ingresar-mi-contraseña-de-correo-electrónico-en-delta-chat-es-esto-seguro">¿Por qué debo ingresar mi contraseña de correo electrónico en Delta Chat? ¿Es esto seguro?</a></li> <li><a href="#por-qué-debo-ingresar-mi-contraseña-de-correo-electrónico-en-delta-chat-es-esto-seguro">¿Por qué debo ingresar mi contraseña de correo electrónico en Delta Chat? ¿Es esto seguro?</a></li>
<li><a href="#qué-mensajes-se-muestran-en-delta-chat">¿Qué mensajes se muestran en Delta Chat?</a></li> <li><a href="#qué-mensajes-se-muestran-en-delta-chat">¿Qué mensajes se muestran en Delta Chat?</a></li>
<li><a href="#delta-chat-soporta-mensajes-con-formato-html">¿Delta Chat soporta mensajes con formato HTML?</a></li> <li><a href="#delta-chat-soporta-mensajes-con-formato-html">¿Delta Chat soporta mensajes con formato HTML?</a></li>
@ -117,14 +114,13 @@
</h2> </h2>
<p>Delta Chat is a reliable, decentralized and secure messaging app, <p>Delta Chat es una aplicación de mensajería segura, descentralizada y confiable. Está disponible para las plataformas móviles y del escritorio.</p>
available for mobile and desktop platforms.</p>
<p>Delta Chat feels like Whatsapp or Telegram but you can also use and regard it as an e-mail app. <p>Delta Chat parece como Whatsapp o Telegram, pero también puedes utilizarlo y considerarlo como una aplicación de correo electrónico.
You can signup anonymously to a variety of <a href="https://delta.chat/chatmail">interoperable chatmail servers</a> Puedes registrarte de forma anónima en varios <a href="https://delta.chat/chatmail">servidores de chatmail interoperables</a>
which are minimal e-mail servers optimized for fast and secure operations. que son servidores de correo electrónico mínimos y optimizados para operaciones rápidas y seguras.
Or you may use classic e-mail servers and an existing e-mail account O puedes utilizar servidores de correo electrónico clásicos y una cuenta de correo electrónico existente
in which case Delta Chat acts as an e-mail app.</p> en cuyo caso, Delta Chat actúa como una aplicación de correo electrónico.</p>
<p><img style="float:right; width:50%; max-width:360%; margin:1em;" src="../delta-what-optim.png" /></p> <p><img style="float:right; width:50%; max-width:360%; margin:1em;" src="../delta-what-optim.png" /></p>
@ -136,15 +132,15 @@ in which case Delta Chat acts as an e-mail app.</p>
</h3> </h3>
<p>To securely setup contact with others <a href="#howtoe2ee">scan an invite QR code <p>Para establecer contacto con otros de forma segura <a href="#howtoe2ee">escanea un código QR de invitación
or share an invite link</a>. o comparte un enlace de invitación</a>.
This is required when using a (default) chatmail-based chat profile Esto es necesario cuando se utiliza un perfil de chat (predeterminado) basado en chatmail
because chatmail servers reject un-encrypted outgoing messages.</p> porque los servidores de chatmail rechazan los mensajes salientes no cifrados.</p>
<p>If you create a chat profile with a classic e-mail address <p>Si crees un perfil de chat con una dirección de correo electrónico clásica
you may manually create a contact if you know their e-mail address puedes crear manualmente un contacto si conoces su dirección de correo electrónico
and then write a message to them y escribirle un mensaje
even if the recipient is not using Delta Chat.</p> aunque el destinatario no utilice Delta Chat.</p>
<h3 id="cuáles-son-las-ventajas-de-delta-chat-comparado-con-otras-aplicaciones-de-mensajería"> <h3 id="cuáles-son-las-ventajas-de-delta-chat-comparado-con-otras-aplicaciones-de-mensajería">
@ -155,25 +151,21 @@ even if the recipient is not using Delta Chat.</p>
</h3> </h3>
<ul> <ul>
<li> <li>Perfiles de chat anónimos con <a href="https://delta.chat/chatmail">servidores de chatmail</a> rápidos, seguros e interoperables
<p>Anonymous chat profiles with fast, secure and interoperable <a href="https://delta.chat/chatmail">chatmail servers</a> que ofrecen notificaciones Push instantáneas para dispositivos con iOS y Android.</li>
which offer instant Push Notifications for iOS and Android devices.</p> </ul>
</li>
<li> <p>Soporte omnipresente, <a href="#multiple-accounts">múltiples perfiles</a> y múltiples dispositivos en todas las plataformas. </p>
<p>Pervasive <a href="#multiple-accounts">multi-profile</a> and multi-device support on all platforms.</p>
</li> <p>Interactivas <a href="https://webxdc.org/apps">aplicaciones de web en un chat</a> para jugar y colaborar</p>
<li>
<p>Interactive <a href="https://webxdc.org/apps">web apps in chats</a> for gaming and collaboration</p> <p><a href="#security-audits">Cifrado de extremo a extremo auditado</a>
</li> seguro contra ataques a la red y al servidor.</p>
<li>
<p><a href="#security-audits">Audited end-to-end encryption</a> <ul>
safe against network and server attacks.</p> <li>Software libre y de código abierto, tanto para aplicaciones como para servidores.
</li> Basado en <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">Estándares de Internet para correo electrónico y web</a>,
<li> <a href="https://xkcd.com/927/">para evitar el “síndrome de otro estándar más (xkcd 927)”</a></li>
<p>Free and Open Source software, both app and server side.
Built on <a href="https://github.com/chatmail/core/blob/main/standards.md#standards-used-in-delta-chat">E-mail and Web Internet Standards</a>,
<a href="https://xkcd.com/927/">to avoid “yet another standard syndrome (xkcd 927)”</a></p>
</li>
</ul> </ul>
<h3 id="qué-pasa-si-espero-un-mensaje-de-alguien-a-quien-no-le-escribí-en-el-pasado"> <h3 id="qué-pasa-si-espero-un-mensaje-de-alguien-a-quien-no-le-escribí-en-el-pasado">
@ -218,7 +210,7 @@ Built on <a href="https://github.com/chatmail/core/blob/main/standards.md#standa
<h3 id="multiple-accounts"> <h3 id="multiple-accounts">
What are profiles? How can I switch between them? <a href="#multiple-accounts" class="anchor"></a> ¿Qué son los perfiles? ¿Cómo puedo cambiar entre ellos? <a href="#multiple-accounts" class="anchor"></a>
</h3> </h3>
@ -227,16 +219,16 @@ Built on <a href="https://github.com/chatmail/core/blob/main/standards.md#standa
A profile lives on your device(s) only A profile lives on your device(s) only
and uses a chatmail or a classic e-mail server to transport messages.</p> and uses a chatmail or a classic e-mail server to transport messages.</p>
<p>On first installation of Delta Chat a first profile is created.</p> <p>En la primera instalación de Delta Chat se crea un primer perfil.</p>
<p>Later, you can tap your profile image in the upper left corner to <strong>Add Profiles</strong> <p>Después, puedes tocar la imagen de tu perfil en la esquina superior izquierda para <strong>Añadir perfiles</strong>
or to <strong>Switch Profiles</strong>.</p> o para <strong>Cambiar perfiles</strong>.</p>
<p>You may want to use separate profiles for political, family or work related activities, <p>You may want to use separate profiles for political, family or work related activities,
or e. g. for a dedicated “spam-profile” with which you register at websites and platforms or e. g. for a dedicated “spam-profile” with which you register at websites and platforms
that tend to cause unsolicited messages (“spam”) sooner or later.</p> that tend to cause unsolicited messages (“spam”) sooner or later.</p>
<p>You may also wish to learn <a href="#multiclient">how to use the same profile on multiple devices</a>.</p> <p>Quizás quieres aprender <a href="#multiclient">cómo se usa el mismo perfil en múltiples dispositivos</a>.</p>
<h3 id="quién-ve-mi-foto-de-perfil"> <h3 id="quién-ve-mi-foto-de-perfil">
@ -268,7 +260,7 @@ dispositivo.</p>
<h3 id="signature"> <h3 id="signature">
Can I set a Bio/Signature/Status/Motto with Delta Chat? <a href="#signature" class="anchor"></a> ¿Puedo establecer un texto de firma con Delta Chat? <a href="#signature" class="anchor"></a>
</h3> </h3>
@ -312,26 +304,26 @@ para silenciar un chat, use el menú del chat (Android/Escritorio) o el perfil d
<h3 id="save"> <h3 id="save">
How do “Saved Messages” work? <a href="#save" class="anchor"></a> ¿Cómo funcionan los “Mensajes guardados”? <a href="#save" class="anchor"></a>
</h3> </h3>
<p><strong>Saved Messages</strong> is a chat that you can use to easily remember and find messages.</p> <p><strong>Mensajes guardados</strong> es un chat que puedes utilizar para recordar y encontrar mensajes fácilmente.</p>
<ul> <ul>
<li> <li>
<p>In any chat, long tap or right click a message and select <strong>Save</strong></p> <p>En cualquier chat, mantén pulsado o haz clic con el botón derecho en un mensaje y selecciona <strong>Guardar</strong></p>
</li> </li>
<li> <li>
<p>Saved messages are marked by the symbol <p>Los mensajes guardados se marcan con el símbolo
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../saved-icon.png" alt="Saved icon" /> <img style="vertical-align:middle; width:1.2em; margin:1px" src="../saved-icon.png" alt="Saved icon" />
next to the timestamp</p> junto a la marca de tiempo</p>
</li> </li>
<li> <li>
<p>Later, open the “Saved Messages” chat - and you will see the saved messages there. <p>Después puedes abrir el chat “Mensajes guardados” - y allí verás los mensajes guardados.
By tapping <img style="vertical-align:middle; width:1.2em; margin:1px" src="../go-to-original.png" alt="Arrow-right icon" />, Con pulsar a <img style="vertical-align:middle; width:1.2em; margin:1px" src="../go-to-original.png" alt="Arrow-right icon" />,
you can go back to the original message in the original chat</p> puedes volver al mensaje original en el chat original</p>
</li> </li>
<li> <li>
<p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p> <p>Finally, you can also use “Save Messages” to take <strong>personal notes</strong> - open the chat, type something, add a photo or a voice message etc.</p>
@ -352,9 +344,9 @@ may it be by <a href="#edit">sender</a>, by <a href="#delold">device cleanup</a>
</h3> </h3>
<p>You can sometimes see a <strong>green dot</strong> <img style="vertical-align:middle; width:1.2em; margin:1px" src="../green-dot.png" alt="" /> <p>A veces puede ver un <strong>punto verde</strong> <img style="vertical-align:middle; width:1.2em; margin:1px" src="../green-dot.png" alt="" />
next to the avatar of a contact. junto al avatar de un contacto.
It means they were <strong>recently seen</strong> in the last 10 minutes:</p> Significa que ha sido <strong>visto recientemente</strong> en los últimos 10 minutos:</p>
<ul> <ul>
<li>either because they messaged you directly,</li> <li>either because they messaged you directly,</li>
@ -388,14 +380,14 @@ For that, long tap or right click the message and select <strong>Edit</strong>
or <img style="vertical-align:middle; width:1.2em; margin:1px" src="../edit-icon.png" alt="Edit icon" />.</p> or <img style="vertical-align:middle; width:1.2em; margin:1px" src="../edit-icon.png" alt="Edit icon" />.</p>
</li> </li>
<li> <li>
<p>If you have sent a message accidentally, <p>Si has enviado un mensaje accidentalmente
from the same menu, select <strong>Delete</strong> and then <strong>Delete for Everyone</strong>.</p> desde el mismo menú, seleccione <strong>Borrar</strong> y después <strong>Borrar para todos</strong>.</p>
</li> </li>
</ul> </ul>
<p>While edited messages will have the word “Edited” next to the timestamp, <p>Mientras que los mensajes editados tendrán la palabra “Editado” junto a la marca de tiempo,
deleted messages will be removed without a marker in the chat. los mensajes borrados serán eliminados sin un marcador en el chat.
Notifications are not sent and there is no time limit.</p> No se envían notificaciones y no hay límite de tiempo.</p>
<p>Note, that the original message may still be received by chat members <p>Note, that the original message may still be received by chat members
who could have already replied, forwarded, saved, screenshotted or otherwise copied the message.</p> who could have already replied, forwarded, saved, screenshotted or otherwise copied the message.</p>
@ -723,10 +715,10 @@ that achieves “instant delivery” of messages for all chatmail servers
including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>. including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>.
Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p> Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p>
<h2 id="cifrado-y-seguridad"> <h2 id="e2ee">
Cifrado y seguridad <a href="#cifrado-y-seguridad" class="anchor"></a> Cifrado y seguridad <a href="#e2ee" class="anchor"></a>
</h2> </h2>
@ -739,18 +731,26 @@ Welcome to the power of the interoperable and massive chatmail and e-mail system
</h3> </h3>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically <p>Delta Chat uses a <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>
establishing end-to-end encryption with contacts and group chats. to provide automatic end-to-end encryption using these protocols:</p>
Autocrypt uses a limited and <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>.
End-to-End encrypted messages are marked with a padlock
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../lock-icon.png" alt="padlock" />.</p>
<p><a href="https://securejoin.delta.chat/en/latest/new.html">Protocolos de Secure-Join</a> <ul>
se utilizan para establecer chats con cifrado de extremo a extremo garantizado <li>
que protege contra ataques de red y servidores comprometidos. <p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join</a>
Los chats marcados con una estampilla verde to exchange encryption setup information through QR-code scanning or “invite links”.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> </li>
garantizan mensajes cifrados de extremo a extremo.</p> <li>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically
establishing end-to-end encryption between contacts and all members of a group chat.</p>
</li>
<li>
<p><a href="https://github.com/chatmail/core/blob/main/spec.md#attaching-a-contact-to-a-message">Sharing a contact to a
chat</a>
enables receivers to use end-to-end encryption with the contact.</p>
</li>
</ul>
<p>Delta Chat does not query, publish or interact with any OpenPGP key servers.</p>
<h3 id="whene2e"> <h3 id="whene2e">
@ -760,28 +760,37 @@ garantizan mensajes cifrados de extremo a extremo.</p>
</h3> </h3>
<p>Todos los mensajes cifrados de extremo a extremo tienen un candado:</p> <p>All messages in Delta Chat are <strong>end-to-end encrypted by default</strong>.
Since the Delta Chat Version 2 release series (July 2025)
there are no lock or similar markers on end-to-end encrypted messages, anymore.</p>
<p><img style="width:160px; margin:1px" src="../lock-screenshot.png" alt="padlock in bubble" /></p> <h3 id="can-i-still-receive-or-send-mails-without-end-to-end-encryption">
<p>El cifrado de extremo a extremo está garantizado si hay una estampilla verde cerca del nombre del chat:</p>
<p><img style="width:211px; margin:1px" src="../green-checkmark-screenshot.png" alt="green checkmark in title" /></p>
<h3 id="howtoe2ee">
¿Cómo puedo obtener cifrado de extremo a extremo garantizado y estampillas verdes? <a href="#howtoe2ee" class="anchor"></a> Can i still receive or send mails without end-to-end encryption? <a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption" class="anchor"></a>
</h3> </h3>
<p>If you have a second communication channel with your chat partner, <p>If you use default <a href="https://chatmail.at/relays">chatmail relays</a>,
like a video chat or a different messenger, it is impossible to receive or send messages without end-to-end encryption.</p>
you can generate an invite link.</p>
<p>If you are together in person, <p>If you instead create a profile using a classic e-mail server,
you can show a QR code to your chat partner.</p> you can send and receive messages without end-to-end encryption.
Such messages lacking end-to-end encryption are marked with an e-mail icon
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
<h3 id="howtoe2ee">
How can I establish a chat with a new contact? <a href="#howtoe2ee" class="anchor"></a>
</h3>
<p>You can send an invite link through another private chat,
show an invitation QR code when next to each other or in a video call,
or click on a “contact” that was shared in a chat.</p>
<ul> <ul>
<li> <li>
@ -796,119 +805,51 @@ on the Delta Chat app main screen.</p>
</li> </li>
</ul> </ul>
<p>Let your chat partner scan the QR image <p>Ask your chat partner to scan the QR image
with their Delta Chat app, with their Delta Chat app,
or click “Copy” or “Share” to create an invite link or click “Copy” or “Share” to create an invite link
and share it with your chat partner.</p> and share it with your chat partner.</p>
<p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">Secure-Join network messages are exchanged</a> between both devices.</p> <p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">end-to-end encryption is getting established</a>.</p>
<ul> <ul>
<li> <li>
<p>Si ambos dispositivos están en línea, <p>If both sides are online, they will soon see a (group or direct) chat
ambas partes eventualmente verán un chat (grupal o directo) con una estampilla verde and can start messaging securely.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
junto al título.</p>
</li> </li>
<li> <li>
<p>Si uno de los dispositivos está sin conexión, las estampillas verdes solo aparecerán más tarde cuando el dispositivo vuelva a estar conectado a Internet y se complete el protocolo de red Secure-Join.</p> <p>If one side is offline or in bad network,
the ability to chat is delayed until connectivity is restored.</p>
</li> </li>
</ul> </ul>
<p>¡Felicitaciones! <p>Congratulations!
Ahora utilizarás automáticamente el cifrado de extremo a extremo garantizado You now will automatically use end-to-end encryption
con este contacto y ambos pueden agregarse mutuamente a grupos con estampilla verde with this contact.
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />, If you add each other to chat groups,
de esta manera se propagará automáticamente el cifrado de extremo a extremo garantizado entre sus miembros.</p> end-to-end encryption will be established among all members.</p>
<h3 id="e2eeguarantee"> <h3 id="e2eeguarantee">
¿Qué significa la estampilla verde y “cifrado de extremo a extremo garantizado”? <a href="#e2eeguarantee" class="anchor"></a> What does the green checkmark in a contact profile mean? <a href="#e2eeguarantee" class="anchor"></a>
</h3> </h3>
<p>Títulos de chat con estampillas verdes <p>A contact profile might show a green checkmark
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
significan que todos los mensajes en el chat estarán cifrados de extremo a extremo and an “Introduced by” line.
y no pueden ser leídos o alterados por servidores de correo electrónico o proveedores de Internet comprometidos. Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you
Unirse a chats grupales con estampillas verdes or was introduced by a another green-checkmarked contact.
difunde de manera segura la información de cifrado de todos (y las estampillas verdes) Introductions happen automatically when adding members to groups.
de una manera que garantiza el cifrado de extremo a extremo en el grupo y entre los miembros.</p> Whoever adds a green-checkmarked contact to a group with only green-checkmarked members
becomes an introducer.
<p>Perfiles de contacto con estampillas verdes In a contact profile you can tap on the “Introduced by …” text repeatedly
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p>
significa que el envío de mensajes a un contacto está actualmente garantizado que está cifrado de extremo a extremo.
Cada contacto con estampilla verde hizo un escaneo directo de <a href="#howtoe2ee">QR</a> contigo
o fue presentado por otro contacto con estampilla verde.
Las presentaciones ocurren automáticamente al agregar miembros a grupos.
Quien agregue un contacto a un grupo con estampilla verde se convierte en un presentador
para aquellos miembros que aún no conocían al contacto agregado.
En un perfil de contacto, puedes tocar repetidamente el texto “Presentado por …”
hasta llegar al que hizo un escaneo directo de <a href="#howtoe2ee">QR</a> contigo.</p>
<p>Ten en cuenta que en un perfil de contacto puedes ver y tocar a las personas que te presentaron a ese contacto, pero puede pasar que no haya una estampilla verde en el título del perfil. Esto generalmente significa que el contacto <a href="#nocryptanymore">“envió un mensaje desde otro dispositivo”</a>.</p>
<p>Para obtener una discusión más detallada sobre “cifrado de extremo a extremo garantizado”, por favor consulta los <a href="https://securejoin.delta.chat/en/latest/new.html">protocolos Secure-Join</a> y lee específicamente sobre “Grupos Verificados”, el término técnico de lo que aquí se llama chats “marcados con una estampilla verde” o “cifrados de extremo a extremo garantizado”.</p> <p>Para obtener una discusión más detallada sobre “cifrado de extremo a extremo garantizado”, por favor consulta los <a href="https://securejoin.delta.chat/en/latest/new.html">protocolos Secure-Join</a> y lee específicamente sobre “Grupos Verificados”, el término técnico de lo que aquí se llama chats “marcados con una estampilla verde” o “cifrados de extremo a extremo garantizado”.</p>
<h3 id="nocryptanymore">
Un contacto “envió un mensaje desde otro dispositivo”, ¿qué puedo hacer? <a href="#nocryptanymore" class="anchor"></a>
</h3>
<p>Tu chat con un contacto perdió el cifrado de extremo a extremo garantizado.
La estampilla verde fue eliminada para este chat y contacto cuando veas esta advertencia.
<strong>Si encuentras sorprendente la repentina pérdida de cifrado de extremo a extremo garantizado
para este contacto, ¡no aceptes la advertencia!</strong>
En su lugar, verifica con tu contacto a través de un segundo canal
como una videollamada, otra app de chat o una llamada telefónica,
para averiguar qué sucedió.</p>
<p>Si tu contacto realmente causó la caída del cifrado de extremo a extremo garantizado, por favor vea los siguientes párrafos para conocer las razones comunes y sus mitigaciones. Sin embargo, todos los demás chats marcados con una estampilla verde siguen estando cifrados de extremo a extremo garantizado, incluso si el contacto es miembro allí.</p>
<p><strong>Tu contacto está usando Delta Chat en un segundo dispositivo (teléfono o computadora portátil)</strong></p>
<p>Si tienen otro dispositivo con la aplicación Delta Chat en funcionamiento,
deben eliminar la cuenta del nuevo dispositivo
y agregarla <a href="#multiclient">como un segundo dispositivo según se describe aquí</a>.
Tan pronto como te envíen un mensaje después, la advertencia desaparecerá
y se establecerá el cifrado garantizado con ambos dispositivos de tu contacto.</p>
<p><strong>Tu contacto reinstaló Delta Chat utilizando su antiguo inicio de sesión de cuenta</strong></p>
<p>Si tienen <a href="#backup">un archivo de respaldo</a>,
deben eliminar la cuenta del nuevo dispositivo
y en su lugar importar el archivo de respaldo para recrear su cuenta.
Tan pronto como te envíen un mensaje después, la advertencia desaparecerá
y se restablecerá el cifrado garantizado para este contacto.</p>
<p>Si no tienen un archivo de respaldo, es mejor realizar un <a href="#howtoe2ee">escaneo QR</a> con tu compañero de chat para restablecer el cifrado de extremo a extremo garantizado.</p>
<p><strong>Tu contacto envió un correo a través de una interfaz de correo web o otra aplicación de correo electrónico y volverá a usar Delta Chat pronto.</strong></p>
<p>Si estás seguro de que el contacto a veces utiliza webmail,
o alguna otra aplicación de correo que carece de cifrado de extremo a extremo,
entonces puedes aceptar la advertencia.
Tan pronto como tu contacto vuelva a utilizar Delta Chat,
el cifrado de extremo a extremo garantizado se restablecerá automáticamente.</p>
<p><strong>Tus contactos dejaron de usar Delta Chat completamente</strong></p>
<p>A veces, mantenerse en contacto es más importante que el cifrado de extremo a extremo. El cifrado de capa de transporte <a href="#tls">(“Transport Layer Encryption” o TLS)</a> puede proteger de manera significativa la confidencialidad de tus mensajes entre tu dispositivo y el servidor de correo electrónico. Pero sin el cifrado de extremo a extremo, tú y tu contacto están confiando en que el servidor de correo electrónico no lea ni manipule tus mensajes, y que no los entregue a terceros.</p>
<p>En cualquier caso, no puedes hacer mucho más que aceptar la advertencia.
Por favor, también elimina el contacto de cualquier grupo activo con estampilla verde
que puedas encontrar en “Chats compartidos” en el perfil del contacto.
Esto evitará que tu contacto reciba mensajes “ilegibles”.</p>
<p>Si el contacto eliminó Delta Chat debido a un comportamiento defectuoso o indeseable,
por favor considera publicar en nuestro <a href="https://support.delta.chat">foro de soporte</a>
para ayudarnos a identificar y solucionar problemas comunes. ¡Gracias!</p>
<h3 id="los-adjuntos-imágenes-archivos-audio-etc-están-cifrados-de-extremo-a-extremo"> <h3 id="los-adjuntos-imágenes-archivos-audio-etc-están-cifrados-de-extremo-a-extremo">
@ -932,10 +873,9 @@ y los metadatos de los archivos adjuntos, como los nombres de archivo.</p>
</h3> </h3>
<p>Sí, Delta Chat utiliza un subconjunto seguro de OpenPGP <p>Yes, Delta Chat uses a secure subset of OpenPGP
y solo muestra un indicador de seguridad de candado en un mensaje requiring the whole message to be properly encrypted and signed.
si todo el mensaje está correctamente cifrado y firmado. For example, “Detached signatures” are not treated as secure.</p>
Por ejemplo, las “firmas desvinculadas” no se consideran seguras.</p>
<p>OpenPGP is not insecure by itself. <p>OpenPGP is not insecure by itself.
Most publicly discussed OpenPGP security problems Most publicly discussed OpenPGP security problems
@ -955,7 +895,7 @@ which was thankfully adopted in summer 2023.</p>
<h3 id="openpgp-alternatives"> <h3 id="openpgp-alternatives">
¿Consideraron usar alternativas a OpenPGP para el cifrado de extremo a extremo? <a href="#openpgp-alternatives" class="anchor"></a> Did you consider using alternatives to OpenPGP for end-to-end-encryption? <a href="#openpgp-alternatives" class="anchor"></a>
</h3> </h3>
@ -998,17 +938,15 @@ as defined by the Autocrypt Level 1 specification.</p>
<h3 id="tls"> <h3 id="tls">
¿Se expone un mensaje en texto claro si no está disponible el cifrado de extremo a extremo? <a href="#tls" class="anchor"></a> Are messages marked with the mail icon exposed on the Internet? <a href="#tls" class="anchor"></a>
</h3> </h3>
<p>Even if your messages are not guaranteed to be end-to-end encrypted, <p>If you are sending or receiving e-mail messages without end-to-end encryption (using a classic e-mail server),
they are still protected from Internet providers like cell or cable companies. they are still protected from cell or cable companies who can not read or modify your e-mail messages.
However, your and your recipients e-mail providers But both your and your recipients e-mail providers
may read, analyze or even modify your messages, may read, analyze or modify your messages, including any attachments.</p>
including any attachments,
if they are not end-to-end encrypted.</p>
<p>Delta Chat by default uses strict <p>Delta Chat by default uses strict
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a> <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a>
@ -1021,8 +959,6 @@ then transport encryption will be enforced between e-mail providers
in which case Delta Chat communications will never be exposed in cleartext to the Internet in which case Delta Chat communications will never be exposed in cleartext to the Internet
even if the message was not end-to-end encrypted.</p> even if the message was not end-to-end encrypted.</p>
<p>Ten en cuenta que <a href="#howtoe2ee">mantener un cifrado de extremo a extremo garantizado</a> sobre el cifrado TLS proporciona seguridad generalizada entre tus dispositivos y los del destinatario. Ni siquiera tu proveedor de correo electrónico o de Internet podrá leer o modificar tus mensajes.</p>
<h3 id="message-metadata"> <h3 id="message-metadata">
@ -1031,24 +967,25 @@ even if the message was not end-to-end encrypted.</p>
</h3> </h3>
<p>Delta Chat protege la mayoría de los metadatos de los mensajes al colocar la siguiente información en la parte cifrada de extremo a extremo de los mensajes:</p> <p>Unlike most other messengers,
Delta Chat apps do not store any metadata about contacts or groups on servers, also not in encrypted form.
Instead, all group metadata is end-to-end encrypted and stored on end-user devices, only.</p>
<p>E-mail Servers can therefore only see</p>
<ul> <ul>
<li>Subject line</li> <li>
<li>Group avatar and name</li> <p>the message date,</p>
<li>MDN (read receipt) requests (<code class="language-plaintext highlighter-rouge">Chat-Disposition-Notification-To</code>)</li> </li>
<li>Disappearing message timer (<code class="language-plaintext highlighter-rouge">Ephemeral-Timer</code>)</li> <li>
<li><code class="language-plaintext highlighter-rouge">Chat-Group-Member-Removed</code>, <code class="language-plaintext highlighter-rouge">Chat-Group-Member-Added</code></li> <p>sender and receiver addresses</p>
<li><code class="language-plaintext highlighter-rouge">Secure-Join</code> header containing secure join commands</li> </li>
<li>Notification about enabling location streaming</li> <li>
<li>WebRTC room URL</li> <p>and message size.</p>
</li>
</ul> </ul>
<p>Los servidores de correo electrónico no obtienen acceso a estos metadatos protegidos <p>All other message, contact and group metadata resides in the end-to-end encrypted part of messages.</p>
pero sí ven la fecha del mensaje así como el tamaño del mensaje,
y, lo que es más importante, las direcciones del remitente y del destinatario.
Los servidores de correo electrónico necesitan direcciones de destinatarios para enrutar y
entregar mensajes a los dispositivos del destinatario.</p>
<h3 id="device-seizure"> <h3 id="device-seizure">
@ -1060,82 +997,34 @@ entregar mensajes a los dispositivos del destinatario.</p>
<p>Both for protecting against metadata-collecting e-mail servers <p>Both for protecting against metadata-collecting e-mail servers
as well as against the threat of device seizure as well as against the threat of device seizure
we recommend to use a <a href="https://delta.chat/chatmail">chatmail server</a> we recommend to use a <a href="https://chatmail.at/relays">chatmail relay</a>
to create pseudonymous temporary profiles through QR-code scans. to create chat profiles using random e-mail addresses for transport.
Note that Delta Chat apps on all platforms support multiple profiles Note that Delta Chat apps on all platforms support multiple profiles
so you can easily use situation-specific profiles next to your “main” profile so you can easily use situation-specific profiles next to your “main” profile
with the knowledge that all their data, along with all metadata, will be deleted. with the knowledge that all their data, along with all metadata, will be deleted.
Moreover, if a device is seized then contacts using temporary profiles Moreover, if a device is seized then chat contacts using short-lived profiles
can not be identified easily, as compared to messengers which reveal can not be identified easily.</p>
phone numbers in chat groups which in turn are often associated with legal identities.</p>
<h3 id="cómo-puedo-verificar-la-información-de-cifrado"> <h3 id="sealedsender">
¿Cómo puedo verificar la información de cifrado? <a href="#cómo-puedo-verificar-la-información-de-cifrado" class="anchor"></a> Does Delta Chat support “Sealed Sender”? <a href="#sealedsender" class="anchor"></a>
</h3> </h3>
<p>Puede verificar manualmente el estado de cifrado de extremo a extremo en el diálogo “Cifrado” (perfil de usuario en Android/iOS o hacer clic derecho en el elemento de lista de chat de un usuario en el escritorio). Delta Chat muestra dos huellas digitales allí. Si las mismas huellas digitales aparecen en su propio dispositivo y en el dispositivo de su contacto, la conexión es segura.</p> <p>No, not yet.</p>
<h3 id="cómo-puedo-verificar-el-estado-de-cifrado-de-los-mensajes"> <p>The Signal messenger introduced <a href="https://signal.org/blog/sealed-sender/">“Sealed Sender” in 2018</a>
to keep their server infrastructure ignorant of who is sending a message to a set of recipients.
It is particularly important because the Signal server knows the mobile number of each account,
which is usually associated with a passport identity.</p>
<p>Even if <a href="https://chatmail.at/relays">chatmail relays</a>
¿Cómo puedo verificar el estado de cifrado de los mensajes? <a href="#cómo-puedo-verificar-el-estado-de-cifrado-de-los-mensajes" class="anchor"></a> do not ask for any private data (including no phone numbers),
it might still be worthwhile to protect relational metadata between addresses.
We dont foresee bigger problems in using random throw-away e-mail addresses for sealed sending
</h3> but an implementation has not been agreed as a priority yet.</p>
<p>Un pequeño <strong>candado</strong> en una burbuja de mensaje indica que el mensaje fue correctamente cifrado de extremo a extremo por el remitente dado. Si no hay <strong>candado</strong>, es probable que el mensaje no esté correctamente cifrado de extremo a extremo, ya que el remitente utiliza una aplicación o interfaz de correo web sin soporte para el cifrado de extremo a extremo.</p>
<h3 id="por-qué-veo-mensajes-sin-cifrar">
¿Por qué veo mensajes sin cifrar? <a href="#por-qué-veo-mensajes-sin-cifrar" class="anchor"></a>
</h3>
<p>If a contact uses a non-Autocrypt e-mail app,
all messages involving this contact (in a group or 1:1 chat)
will not be end-to-end encrypted, and thus not show a “padlock” with messages.
Note that even if your contacts use Delta Chat on their account,
they might also use a non-Autocrypt e-mail app on that account
which then may cause intermittently unencrypted messages.
Replying unencrypted to unencrypted messages is mandated by Autocrypt
to prevent unreadable messages on the side of your contacts
and their non-Autocrypt e-mail app.</p>
<h3 id="cómo-puedo-obtener-un-chat-cifrado-de-extremo-a-extremo-con-un-contacto-de-delta-chat-que-a-veces-utiliza-webmail-u-otra-aplicación-de-correo-electrónico-no-autocrypt">
¿Cómo puedo obtener un chat cifrado de extremo a extremo con un contacto de Delta Chat que a veces utiliza webmail u otra aplicación de correo electrónico no Autocrypt? <a href="#cómo-puedo-obtener-un-chat-cifrado-de-extremo-a-extremo-con-un-contacto-de-delta-chat-que-a-veces-utiliza-webmail-u-otra-aplicación-de-correo-electrónico-no-autocrypt" class="anchor"></a>
</h3>
<p>Si necesitas un chat cifrado de extremo a extremo de forma segura con un contacto que está utilizando su cuenta tanto con Delta Chat como con aplicaciones no-Autocrypt (por ejemplo, webmail), lo mejor es configurar <a href="#howtoe2ee">cifrado de extremo a extremo garantizado con ellos</a> y luego crear un grupo cifrado de extremo a extremo garantizado con ustedes dos como miembros. En este chat de grupo, todos los mensajes estarán cifrados de extremo a extremo, incluso si el chat directo entre ustedes dos tiene una advertencia de <a href="#nocryptanymore">“… envió un mensaje desde otro dispositivo”</a>.</p>
<h3 id="cómo-puedo-asegurar-el-cifrado-de-extremo-a-extremo-y-la-eliminación-de-mensajes">
¿Cómo puedo asegurar el cifrado de extremo a extremo y la eliminación de mensajes? <a href="#cómo-puedo-asegurar-el-cifrado-de-extremo-a-extremo-y-la-eliminación-de-mensajes" class="anchor"></a>
</h3>
<p>La mejor manera de asegurar que cada mensaje esté cifrado de extremo a extremo
y que los metadatos se borren lo más rápido posible
es <a href="#howtoe2ee">utilizando chats con cifrado de extremo a extremo garantizado</a>
y activando la <a href="#ephemeralmsgs">desaparición de mensajes</a>.</p>
<p>Los chats con cifrado de extremo a extremo garantizado protegen contra ataques <a href="https://es.wikipedia.org/wiki/Ataque_de_intermediario">MITM</a>
y al activar “mensajes efímeros” se borran los mensajes
en el servidor después de un tiempo configurado por el usuario.</p>
<p>Si no necesitas una copia de tus mensajes en el servidor durante más tiempo,
también puedes activar <a href="#delold">“eliminar mensajes del servidor automáticamente”</a>.</p>
<h3 id="pfs"> <h3 id="pfs">
@ -1145,45 +1034,48 @@ también puedes activar <a href="#delold">“eliminar mensajes del servidor auto
</h3> </h3>
<p>No, Delta Chat no soporta Perfect Forward Secrecy (PFS). <p>No, not yet.</p>
Esto significa que si se filtra tu clave privada de descifrado de Delta Chat,
y alguien ha recopilado tus mensajes previos en tránsito,
podrán descifrarlos y leerlos utilizando la clave de descifrado filtrada.</p>
<p>Ten en cuenta, sin embargo, que si alguien obtiene tus claves de descifrado, <p>Delta Chat today doesnt support Perfect Forward Secrecy (PFS).
también podrán obtener tus mensajes, This means that if your private decryption key is leaked,
independientemente de si se implementa o no el Perfect Forward Secrecy. and someone has collected your prior in-transit messages,
La situación típica en el mundo real para las claves de descifrado filtradas es la incautación del dispositivo, they will be able to decrypt and read them using the leaked decryption key.
que discutimos en nuestra respuesta <a href="#device-seizure">sobre metadatos e incautación de dispositivos</a>.</p> Note that Forward Secrecy only increases security if you delete messages.
Otherwise, someone obtaining your decryption keys
is typically also able to get all your non-deleted messages
and doesnt even need to decrypt any previously collected messages.</p>
<p>It is possible that Delta Chat evolves to support Perfect Forward Secrecy, <p>We designed a Forward Secrecy approach that withstood
because OpenPGP is just a container for encrypted messages initial examination from some cryptographers and implementation experts
but encryption key management (and thus key rotation or key “ratcheting”) but is pending a more formal write up
could be organized in flexible ways. to ascertain it reliably works in federated messaging and with multi-device usage,
See <a href="https://gitlab.com/sequoia-pgp/openpgp-dr">Seqouias PFS prototype</a> before it could be implemented in <a href="https://github.com/chatmail/core">chatmail core</a>,
for existing experiments in the OpenPGP implementor community.</p> which would make it available in all <a href="https://chatmail.at/clients">chatmail clients</a>.</p>
<h3 id="es-el-cifrado-de-extremo-a-extremo-de-delta-chat-tan-seguro-como-el-de-signal"> <h3 id="pqc">
¿Es el cifrado de extremo a extremo de Delta Chat tan seguro como el de Signal? <a href="#es-el-cifrado-de-extremo-a-extremo-de-delta-chat-tan-seguro-como-el-de-signal" class="anchor"></a> Does Delta Chat support Post-Quantum-Cryptography? <a href="#pqc" class="anchor"></a>
</h3> </h3>
<p>It depends on what is important to you. <p>No, not yet.</p>
Delta Chat <a href="#pfs">does not support PFS</a> like Signal does
but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</a>
that are safe against compromised servers or corrupted networks.
Signal and most other PFS-supporting messengers do not provide
a practical scheme for protecting chat groups from network attacks
which are arguably more worrisome
than a potential attacker who seizes your phone and private encryption setup
but somehow not your messages, yet has a full record of all
past encrypted messages.</p>
<p>In any case, Delta Chats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a> <p>Delta Chat uses the Rust OpenPGP library <a href="https://github.com/rpgp/rpgp">rPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p> which supports the latest <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/">IETF Post-Quantum-Cryptography OpenPGP draft</a>.
We aim to add PQC support in <a href="https://github.com/chatmail/core">chatmail core</a> after the draft is finalized at the IETF
in collaboration with other OpenPGP implementers.</p>
<h3 id="how-can-i-manually-check-encryption-information">
How can I manually check encryption information? <a href="#how-can-i-manually-check-encryption-information" class="anchor"></a>
</h3>
<p>Puede verificar manualmente el estado de cifrado de extremo a extremo en el diálogo “Cifrado” (perfil de usuario en Android/iOS o hacer clic derecho en el elemento de lista de chat de un usuario en el escritorio). Delta Chat muestra dos huellas digitales allí. Si las mismas huellas digitales aparecen en su propio dispositivo y en el dispositivo de su contacto, la conexión es segura.</p>
<h3 id="importkey"> <h3 id="importkey">
@ -1218,7 +1110,7 @@ from most recent to older:</p>
<li> <li>
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of <p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place. rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat. rPGP serves as the end-to-end encryption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
Two advisories were released related to the findings of this audit:</p> Two advisories were released related to the findings of this audit:</p>
<ul> <ul>
@ -1459,15 +1351,16 @@ extendable messenger.</p>
</h3> </h3>
<ul> <ul>
<li>Las aplicaciones webxdc no pueden enviar datos a Internet ni descargar nada.</li> <li>webxdc apps can not send data to the Internet, or download anything.</li>
<li>Una aplicación webxdc solo puede intercambiar datos dentro de un chat de Delta Chat, con su <li>A webxdc app can only exchange data within a Delta Chat chat, with its
copias en los dispositivos de tus compañeros de chat. Aparte de eso, es completamente copies on the devices of your chat partners. Other than that, its completely
aislado de Internet.</li> isolated from the Internet.</li>
<li>La privacidad que ofrece una aplicación webxdc es la privacidad de tu chat, siempre y cuando <li>The privacy a webxdc app offers is the privacy of your chat - as long as you
confíe en las personas con las que chateas, también puedes confiar en la aplicación webxdc.</li> trust the people you chat with, you can trust the webxdc app as well.</li>
<li>Esto también significa: puede suponer un riesgo para la privacidad abrir aplicaciones webxdc en chats donde <li>This also means: it can be a privacy risk to open apps in chats with untrusted members.
no confías en los miembros, como lo sabes por los archivos adjuntos de correos electrónicos, donde Just like with e-mail attachments, video calls or plain links:
solo abre archivos adjuntos de remitentes en los que confía y no de spammers.</li> open them only from senders you trust, and not from spammers.
Spammers can get to know any data you send to them, as well as your IP address.</li>
</ul> </ul>
<h3 id="dónde-puedo-obtener-aplicaciones-webxdc"> <h3 id="dónde-puedo-obtener-aplicaciones-webxdc">
@ -1551,21 +1444,10 @@ this way, you will have a new random Jitsi room every time you call someone.</li
</h3> </h3>
<ul> <p>With a Broadcast List you can send a message to many recipients at once;
<li>With a Broadcast List you can send a message to many recipients at once; when the recipients cannot reply in that list.
they reply to you, you get the reply in your direct 1:1 chat with them. The Broadcast lists are still highly experimental
recipients cant see each other.</li> and will very probably be replaced by something else, stay tuned :)</p>
<li>Technically, it is an E-Mail with many recipients in BCC.</li>
<li>You can turn on the feature in the “experimental features” section in the
advanced settings. Then you can create a Broadcast List from the “New Chat”
dialog.</li>
<li>In case you are using more than one device, Broadcast Lists are currently not
synced between them.</li>
<li>Messages sent to broadcast lists are not encrypted. Encryption would break
anonymity, because then all recipients would know who else received it
(Sending individual mails to everyone would be worse for rate limit and network
consumption reason).</li>
</ul>
<h3 id="cómo-puedo-compartir-mi-ubicación-con-mis-compañeros-de-chat"> <h3 id="cómo-puedo-compartir-mi-ubicación-con-mis-compañeros-de-chat">
@ -1619,6 +1501,11 @@ a message, but also appears on the map.</li>
</h3> </h3>
<p>Note:
Changing email addresses is temporarily disabled
because of ongoing changes to the DeltaChat core.
It should be available again in a few months.</p>
<ol> <ol>
<li> <li>
<p>Change your address in “Settings → Advanced → Password and Account” and <p>Change your address in “Settings → Advanced → Password and Account” and
@ -1717,19 +1604,19 @@ Esto es lo que hace Delta Chat con esos permisos:</p>
Sin embargo, algunos proveedores necesitan opciones especiales para funcionar correctamente, ver <a href="https://providers.delta.chat">Descripción de proveedores</a></li> Sin embargo, algunos proveedores necesitan opciones especiales para funcionar correctamente, ver <a href="https://providers.delta.chat">Descripción de proveedores</a></li>
</ul> </ul>
<h3 id="quiero-manejar-mi-propio-servidor-de-correo-para-delta-chat-qué-me-recomiendan"> <h3 id="i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">
Quiero manejar mi propio servidor de correo para Delta Chat. ¿Qué me recomiendan? <a href="#quiero-manejar-mi-propio-servidor-de-correo-para-delta-chat-qué-me-recomiendan" class="anchor"></a> I want to manage my own server for Delta Chat. What do you recommend? <a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend" class="anchor"></a>
</h3> </h3>
<ul> <ul>
<li>Most mail servers will work well. But what we personally recommend is a <li>Most mail servers will work well. But what we personally recommend is a
combination of mailcow and mailadm, as described <a href="https://delta.chat/en/2023-01-27-upcoming-mail-server-workshops">in this chatmail relay server, as described <a href="https://delta.chat/en/2023-12-13-chatmail">in this
blogpost</a>.</li> blogpost</a>.</li>
<li>You can find an <a href="https://delta.chat/es/serverguide">installation guide on our website</a>.</li> <li>You can find an <a href="https://github.com/chatmail/relay">installation guide on GitHub</a>.</li>
</ul> </ul>
<h3 id="por-qué-debo-ingresar-mi-contraseña-de-correo-electrónico-en-delta-chat-es-esto-seguro"> <h3 id="por-qué-debo-ingresar-mi-contraseña-de-correo-electrónico-en-delta-chat-es-esto-seguro">

View file

@ -36,27 +36,24 @@
<li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li> <li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li>
</ul> </ul>
</li> </li>
<li><a href="#encryption-and-security">Encryption and Security</a> <li><a href="#e2ee">Encryption and Security</a>
<ul> <ul>
<li><a href="#which-standards-are-used-for-end-to-end-encryption">Which standards are used for end-to-end encryption?</a></li> <li><a href="#which-standards-are-used-for-end-to-end-encryption">Which standards are used for end-to-end encryption?</a></li>
<li><a href="#whene2e">How can i know if messages are end-to-end encrypted?</a></li> <li><a href="#whene2e">How can i know if messages are end-to-end encrypted?</a></li>
<li><a href="#howtoe2ee">How can I get guaranteed end-to-end encryption and green checkmarks?</a></li> <li><a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption">Can i still receive or send mails without end-to-end encryption?</a></li>
<li><a href="#e2eeguarantee">What does the green checkmark and “guaranteed end-to-end encryption” mean?</a></li> <li><a href="#howtoe2ee">How can I establish a chat with a new contact?</a></li>
<li><a href="#nocryptanymore">A contact “sent a message from another device”, what can i do?</a></li> <li><a href="#e2eeguarantee">What does the green checkmark in a contact profile mean?</a></li>
<li><a href="#are-attachments-pictures-files-audio-etc-end-to-end-encrypted">Are attachments (pictures, files, audio etc.) end-to-end encrypted?</a></li> <li><a href="#are-attachments-pictures-files-audio-etc-end-to-end-encrypted">Are attachments (pictures, files, audio etc.) end-to-end encrypted?</a></li>
<li><a href="#openpgp-secure">Is OpenPGP secure?</a></li> <li><a href="#openpgp-secure">Is OpenPGP secure?</a></li>
<li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end -encryption?</a></li> <li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end-encryption?</a></li>
<li><a href="#is-delta-chat-vulnerable-to-efail">Is Delta Chat vulnerable to EFAIL?</a></li> <li><a href="#is-delta-chat-vulnerable-to-efail">Is Delta Chat vulnerable to EFAIL?</a></li>
<li><a href="#tls">Is a message exposed in cleartext if end-to-end encryption is not available?</a></li> <li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
<li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li> <li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li>
<li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li> <li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li>
<li><a href="#how-can-i-check-encryption-information">How can i check encryption information?</a></li> <li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
<li><a href="#how-can-i-check-the-encryption-status-of-messages">How can I check the encryption status of messages?</a></li>
<li><a href="#why-do-i-see-unencrypted-messages">Why do I see unencrypted messages?</a></li>
<li><a href="#how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app">How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app?</a></li>
<li><a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion">How can I ensure message end-to-end encryption and deletion?</a></li>
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li> <li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of Delta Chat as safe as Signal?</a></li> <li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
<li><a href="#how-can-i-manually-check-encryption-information">How can I manually check encryption information?</a></li>
<li><a href="#importkey">Puis-je ré-utiliser ma clé privée existante ?</a></li> <li><a href="#importkey">Puis-je ré-utiliser ma clé privée existante ?</a></li>
<li><a href="#security-audits">Est-ce quun audit indépendant des failles de sécurité a été réalisé sur Delta Chat ?</a></li> <li><a href="#security-audits">Est-ce quun audit indépendant des failles de sécurité a été réalisé sur Delta Chat ?</a></li>
</ul> </ul>
@ -90,7 +87,7 @@
<ul> <ul>
<li><a href="#de-quelles-autorisations-delta-chat-a-t-il-besoin">De quelles autorisations Delta Chat a-t-il besoin?</a></li> <li><a href="#de-quelles-autorisations-delta-chat-a-t-il-besoin">De quelles autorisations Delta Chat a-t-il besoin?</a></li>
<li><a href="#est-ce-que-delta-chat-fonctionne-avec-mon-fournisseur-de-courriel-">Est-ce que Delta Chat fonctionne avec <em>mon</em> fournisseur de courriel ?</a></li> <li><a href="#est-ce-que-delta-chat-fonctionne-avec-mon-fournisseur-de-courriel-">Est-ce que Delta Chat fonctionne avec <em>mon</em> fournisseur de courriel ?</a></li>
<li><a href="#je-veux-administrer-mon-propre-serveur-courriel-pour-delta-chat--que-me-conseillez-vous-">Je veux administrer mon propre serveur courriel pour Delta Chat : que me conseillez-vous ?</a></li> <li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
<li><a href="#pourquoi-dois-je-entrer-le-mot-de-passe-de-mon-compte-de-courriel-dans-delta-chat--est-ce-sécurisé-">Pourquoi dois-je entrer le mot de passe de mon compte de courriel dans Delta Chat ? Est-ce sécurisé ?</a></li> <li><a href="#pourquoi-dois-je-entrer-le-mot-de-passe-de-mon-compte-de-courriel-dans-delta-chat--est-ce-sécurisé-">Pourquoi dois-je entrer le mot de passe de mon compte de courriel dans Delta Chat ? Est-ce sécurisé ?</a></li>
<li><a href="#quels-sont-les-messages-qui-apparaissent-dans-delta-chat-">Quels sont les messages qui apparaissent dans Delta Chat ?</a></li> <li><a href="#quels-sont-les-messages-qui-apparaissent-dans-delta-chat-">Quels sont les messages qui apparaissent dans Delta Chat ?</a></li>
<li><a href="#est-ce-que-delta-chat-gère-les-courriels-en-html-">Est-ce que Delta Chat gère les courriels en HTML ?</a></li> <li><a href="#est-ce-que-delta-chat-gère-les-courriels-en-html-">Est-ce que Delta Chat gère les courriels en HTML ?</a></li>
@ -700,10 +697,10 @@ that achieves “instant delivery” of messages for all chatmail servers
including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>. including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>.
Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p> Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p>
<h2 id="encryption-and-security"> <h2 id="e2ee">
Encryption and Security <a href="#encryption-and-security" class="anchor"></a> Encryption and Security <a href="#e2ee" class="anchor"></a>
</h2> </h2>
@ -716,18 +713,26 @@ Welcome to the power of the interoperable and massive chatmail and e-mail system
</h3> </h3>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically <p>Delta Chat uses a <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>
establishing end-to-end encryption with contacts and group chats. to provide automatic end-to-end encryption using these protocols:</p>
Autocrypt uses a limited and <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>.
End-to-End encrypted messages are marked with a padlock
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../lock-icon.png" alt="padlock" />.</p>
<p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a> <ul>
are used for establishing chats with guaranteed end-to-end encryption <li>
which protects against network attacks and compromised servers. <p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join</a>
Chats marked with a green checkmark to exchange encryption setup information through QR-code scanning or “invite links”.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> </li>
guarantee end-to-end encrypted messages.</p> <li>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically
establishing end-to-end encryption between contacts and all members of a group chat.</p>
</li>
<li>
<p><a href="https://github.com/chatmail/core/blob/main/spec.md#attaching-a-contact-to-a-message">Sharing a contact to a
chat</a>
enables receivers to use end-to-end encryption with the contact.</p>
</li>
</ul>
<p>Delta Chat does not query, publish or interact with any OpenPGP key servers.</p>
<h3 id="whene2e"> <h3 id="whene2e">
@ -737,28 +742,37 @@ guarantee end-to-end encrypted messages.</p>
</h3> </h3>
<p>All end-to-end encrypted messages carry a padlock:</p> <p>All messages in Delta Chat are <strong>end-to-end encrypted by default</strong>.
Since the Delta Chat Version 2 release series (July 2025)
there are no lock or similar markers on end-to-end encrypted messages, anymore.</p>
<p><img style="width:160px; margin:1px" src="../lock-screenshot.png" alt="padlock in bubble" /></p> <h3 id="can-i-still-receive-or-send-mails-without-end-to-end-encryption">
<p>End-to-end encryption is guaranteed if there is a green checkmark next to the chat title:</p>
<p><img style="width:211px; margin:1px" src="../green-checkmark-screenshot.png" alt="green checkmark in title" /></p>
<h3 id="howtoe2ee">
How can I get guaranteed end-to-end encryption and green checkmarks? <a href="#howtoe2ee" class="anchor"></a> Can i still receive or send mails without end-to-end encryption? <a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption" class="anchor"></a>
</h3> </h3>
<p>If you have a second communication channel with your chat partner, <p>If you use default <a href="https://chatmail.at/relays">chatmail relays</a>,
like a video chat or a different messenger, it is impossible to receive or send messages without end-to-end encryption.</p>
you can generate an invite link.</p>
<p>If you are together in person, <p>If you instead create a profile using a classic e-mail server,
you can show a QR code to your chat partner.</p> you can send and receive messages without end-to-end encryption.
Such messages lacking end-to-end encryption are marked with an e-mail icon
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
<h3 id="howtoe2ee">
How can I establish a chat with a new contact? <a href="#howtoe2ee" class="anchor"></a>
</h3>
<p>You can send an invite link through another private chat,
show an invitation QR code when next to each other or in a video call,
or click on a “contact” that was shared in a chat.</p>
<ul> <ul>
<li> <li>
@ -773,135 +787,54 @@ on the Delta Chat app main screen.</p>
</li> </li>
</ul> </ul>
<p>Let your chat partner scan the QR image <p>Ask your chat partner to scan the QR image
with their Delta Chat app, with their Delta Chat app,
or click “Copy” or “Share” to create an invite link or click “Copy” or “Share” to create an invite link
and share it with your chat partner.</p> and share it with your chat partner.</p>
<p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">Secure-Join network messages are exchanged</a> between both devices.</p> <p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">end-to-end encryption is getting established</a>.</p>
<ul> <ul>
<li> <li>
<p>If both devices are online, <p>If both sides are online, they will soon see a (group or direct) chat
both sides will eventually see a (group or direct) chat with a green checkmark and can start messaging securely.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
next to the title.</p>
</li> </li>
<li> <li>
<p>If one of the devices is offline, the green checkmarks will only <p>If one side is offline or in bad network,
appear later when the device is internet-connected again the ability to chat is delayed until connectivity is restored.</p>
and the Secure-Join network protocol completed.</p>
</li> </li>
</ul> </ul>
<p>Congratulations! <p>Congratulations!
You now will automatically use guaranteed end-to-end encryption You now will automatically use end-to-end encryption
with this contact and both of you can add each other to green-checkmarked groups with this contact.
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />, If you add each other to chat groups,
thereby automatically spreading guaranteed end-to-end encryption among its members.</p> end-to-end encryption will be established among all members.</p>
<h3 id="e2eeguarantee"> <h3 id="e2eeguarantee">
What does the green checkmark and “guaranteed end-to-end encryption” mean? <a href="#e2eeguarantee" class="anchor"></a> What does the green checkmark in a contact profile mean? <a href="#e2eeguarantee" class="anchor"></a>
</h3> </h3>
<p>Chat titles with green checkmarks <p>A contact profile might show a green checkmark
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
mean that all messages in the chat will be end-to-end encrypted and an “Introduced by” line.
and can not be read or altered by compromised e-mail servers or Internet providers.
Joining green-checkmarked group chats
safely spreads everybodys encryption information (and green checkmarks)
in a manner that guarantees end-to-end encryption in the group and among members.</p>
<p>Contact profiles with green checkmarks
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
mean that messaging a contact is currently guaranteed to be end-to-end encrypted.
Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you
or was introduced by a another green-checkmarked contact. or was introduced by a another green-checkmarked contact.
Introductions happen automatically when adding members to groups. Introductions happen automatically when adding members to groups.
Whoever adds a contact to a green-checkmarked group becomes an introducer Whoever adds a green-checkmarked contact to a group with only green-checkmarked members
to those members who didnt yet know about the added contact. becomes an introducer.
In a contact profile you can tap on the “Introduced by …” text repeatedly In a contact profile you can tap on the “Introduced by …” text repeatedly
until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p> until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p>
<p>Note that in a contact profile you may see and tap introducers
but there is no green checkmark in the profile title.
This usually means that the contact <a href="#nocryptanymore">“sent a message from another device”</a>.</p>
<p>For more in-depth discussion of “guaranteed end-to-end encryption” <p>For more in-depth discussion of “guaranteed end-to-end encryption”
please see <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a> please see <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a>
and specifically read about “Verified Groups”, the technical term and specifically read about “Verified Groups”, the technical term
of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.</p> of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.</p>
<h3 id="nocryptanymore">
A contact “sent a message from another device”, what can i do? <a href="#nocryptanymore" class="anchor"></a>
</h3>
<p>Your chat with a contact lost guaranteed end-to-end encryption.
The green checkmark was removed for this chat and contact when you see this warning.
<strong>If you find the sudden drop of guaranteed end-to-end encryption
surprising for this contact then dont accept the warning!</strong>
Instead check with your contact through a second channel
like a video call, other messenger or a phone call,
to find out what happened.</p>
<p>If your contact actually caused the drop of guaranteed end-to-end encryption
please see the next paragraphs for common reasons and their mitigations.
Regardless, all other green-checkmarked chats remain guaranteed end-to-end encrypted
even if the contact is a member there.</p>
<p><strong>Your contact is using Delta Chat on a second device (phone or laptop)</strong></p>
<p>If they have another device with a Delta Chat app running,
they should remove the profile from the new device
and add it <a href="#multiclient">as a second device as described here</a>.
As soon as they message you afterwards, the warning will be gone
and guaranteed encryption is established with both devices of your contact.</p>
<p><strong>Your contact reinstalled Delta Chat using their old account login</strong></p>
<p>If they have <a href="#backup">a backup file</a>,
they should remove the profile from the new device
and rather import the backup file to re-create their profile.
As soon as they message you afterwards, the warning will be gone
and guaranteed encryption is re-established for this contact.</p>
<p>If they dont have a backup file, its best to perform a <a href="#howtoe2ee">QR scan</a>
with your chat partner to re-establish guaranteed end-to-end encryption.</p>
<p><strong>Your contact sent a mail through a webmail interface or another e-mail app
and will get back to using Delta Chat soon again.</strong></p>
<p>If you are sure that the contact sometimes uses webmail,
or another mail app lacking end-to-end encryption,
then you may accept the warning.
As soon as your contact uses Delta Chat again,
guaranteed end-to-end encryption will be automatically re-established.</p>
<p><strong>Your contact stopped using Delta Chat entirely</strong></p>
<p>Sometimes remaining in contact is more important than end-to-end encryption.
<a href="#tls">“Transport Layer Encryption” (TLS)</a> may still meaningfully protect
the confidentiality of your messages between your device and the e-mail server.
But without end-to-end encryption you and your contact are trusting your e-mail server
to not read or manipulate your messages, and to not hand them to third parties.</p>
<p>In any case, you can not do much else than accept the warning.
Please also remove the contact from any active green-checkmarked group
which you can find in “Shared chats” in the Contact profile.
This spares your contact from getting “unreadable” messages.</p>
<p>If the contact removed Delta Chat because of buggy or undesirable behaviour,
please consider posting to our <a href="https://support.delta.chat">support forum</a>
to help us identify and address common problems. Thanks!</p>
<h3 id="are-attachments-pictures-files-audio-etc-end-to-end-encrypted"> <h3 id="are-attachments-pictures-files-audio-etc-end-to-end-encrypted">
@ -926,8 +859,7 @@ and attachment metadata such as filenames.</p>
</h3> </h3>
<p>Yes, Delta Chat uses a secure subset of OpenPGP <p>Yes, Delta Chat uses a secure subset of OpenPGP
and only displays a padlock security indicator on a message requiring the whole message to be properly encrypted and signed.
if the whole message is properly encrypted and signed.
For example, “Detached signatures” are not treated as secure.</p> For example, “Detached signatures” are not treated as secure.</p>
<p>OpenPGP is not insecure by itself. <p>OpenPGP is not insecure by itself.
@ -948,7 +880,7 @@ which was thankfully adopted in summer 2023.</p>
<h3 id="openpgp-alternatives"> <h3 id="openpgp-alternatives">
Did you consider using alternatives to OpenPGP for end-to-end -encryption? <a href="#openpgp-alternatives" class="anchor"></a> Did you consider using alternatives to OpenPGP for end-to-end-encryption? <a href="#openpgp-alternatives" class="anchor"></a>
</h3> </h3>
@ -991,17 +923,15 @@ as defined by the Autocrypt Level 1 specification.</p>
<h3 id="tls"> <h3 id="tls">
Is a message exposed in cleartext if end-to-end encryption is not available? <a href="#tls" class="anchor"></a> Are messages marked with the mail icon exposed on the Internet? <a href="#tls" class="anchor"></a>
</h3> </h3>
<p>Even if your messages are not guaranteed to be end-to-end encrypted, <p>If you are sending or receiving e-mail messages without end-to-end encryption (using a classic e-mail server),
they are still protected from Internet providers like cell or cable companies. they are still protected from cell or cable companies who can not read or modify your e-mail messages.
However, your and your recipients e-mail providers But both your and your recipients e-mail providers
may read, analyze or even modify your messages, may read, analyze or modify your messages, including any attachments.</p>
including any attachments,
if they are not end-to-end encrypted.</p>
<p>Delta Chat by default uses strict <p>Delta Chat by default uses strict
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a> <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a>
@ -1014,10 +944,6 @@ then transport encryption will be enforced between e-mail providers
in which case Delta Chat communications will never be exposed in cleartext to the Internet in which case Delta Chat communications will never be exposed in cleartext to the Internet
even if the message was not end-to-end encrypted.</p> even if the message was not end-to-end encrypted.</p>
<p>Note that <a href="#howtoe2ee">maintaining guaranteed end-to-end encryption</a> on top of TLS encryption
provides pervasive safety between your and the recipients devices.
Not even your e-mail or Internet provider will be able to read or modify your messages.</p>
<h3 id="message-metadata"> <h3 id="message-metadata">
@ -1026,25 +952,25 @@ Not even your e-mail or Internet provider will be able to read or modify your me
</h3> </h3>
<p>Delta Chat protects most message metadata by putting the following information <p>Unlike most other messengers,
into the end-to-end encrypted part of messages:</p> Delta Chat apps do not store any metadata about contacts or groups on servers, also not in encrypted form.
Instead, all group metadata is end-to-end encrypted and stored on end-user devices, only.</p>
<p>E-mail Servers can therefore only see</p>
<ul> <ul>
<li>Subject line</li> <li>
<li>Group avatar and name</li> <p>the message date,</p>
<li>MDN (read receipt) requests (<code class="language-plaintext highlighter-rouge">Chat-Disposition-Notification-To</code>)</li> </li>
<li>Disappearing message timer (<code class="language-plaintext highlighter-rouge">Ephemeral-Timer</code>)</li> <li>
<li><code class="language-plaintext highlighter-rouge">Chat-Group-Member-Removed</code>, <code class="language-plaintext highlighter-rouge">Chat-Group-Member-Added</code></li> <p>sender and receiver addresses</p>
<li><code class="language-plaintext highlighter-rouge">Secure-Join</code> header containing secure join commands</li> </li>
<li>Notification about enabling location streaming</li> <li>
<li>WebRTC room URL</li> <p>and message size.</p>
</li>
</ul> </ul>
<p>E-Mail servers do not get access to this protected metadata <p>All other message, contact and group metadata resides in the end-to-end encrypted part of messages.</p>
but they do see the message date as well as the message size,
and, more importantly, the sender and receiver addresses.
E-mail servers need receiver addresses to route and
deliver messages to recipients devices.</p>
<h3 id="device-seizure"> <h3 id="device-seizure">
@ -1056,96 +982,34 @@ deliver messages to recipients devices.</p>
<p>Both for protecting against metadata-collecting e-mail servers <p>Both for protecting against metadata-collecting e-mail servers
as well as against the threat of device seizure as well as against the threat of device seizure
we recommend to use a <a href="https://delta.chat/chatmail">chatmail server</a> we recommend to use a <a href="https://chatmail.at/relays">chatmail relay</a>
to create pseudonymous temporary profiles through QR-code scans. to create chat profiles using random e-mail addresses for transport.
Note that Delta Chat apps on all platforms support multiple profiles Note that Delta Chat apps on all platforms support multiple profiles
so you can easily use situation-specific profiles next to your “main” profile so you can easily use situation-specific profiles next to your “main” profile
with the knowledge that all their data, along with all metadata, will be deleted. with the knowledge that all their data, along with all metadata, will be deleted.
Moreover, if a device is seized then contacts using temporary profiles Moreover, if a device is seized then chat contacts using short-lived profiles
can not be identified easily, as compared to messengers which reveal can not be identified easily.</p>
phone numbers in chat groups which in turn are often associated with legal identities.</p>
<h3 id="how-can-i-check-encryption-information"> <h3 id="sealedsender">
How can i check encryption information? <a href="#how-can-i-check-encryption-information" class="anchor"></a> Does Delta Chat support “Sealed Sender”? <a href="#sealedsender" class="anchor"></a>
</h3> </h3>
<p>You may check the end-to-end encryption status manually in the “Encryption” dialog <p>No, not yet.</p>
(user profile on Android/iOS or right-click a users chat-list item on desktop).
Delta Chat shows two fingerprints there.
If the same fingerprints appear on your own and your contacts device,
the connection is safe.</p>
<h3 id="how-can-i-check-the-encryption-status-of-messages"> <p>The Signal messenger introduced <a href="https://signal.org/blog/sealed-sender/">“Sealed Sender” in 2018</a>
to keep their server infrastructure ignorant of who is sending a message to a set of recipients.
It is particularly important because the Signal server knows the mobile number of each account,
which is usually associated with a passport identity.</p>
<p>Even if <a href="https://chatmail.at/relays">chatmail relays</a>
How can I check the encryption status of messages? <a href="#how-can-i-check-the-encryption-status-of-messages" class="anchor"></a> do not ask for any private data (including no phone numbers),
it might still be worthwhile to protect relational metadata between addresses.
We dont foresee bigger problems in using random throw-away e-mail addresses for sealed sending
</h3> but an implementation has not been agreed as a priority yet.</p>
<p>A little <strong>padlock</strong> in a message bubble denotes
that the message was properly end-to-end encrypted from the given sender.
If there is <strong>no padlock</strong>, the message was not properly end-to-end encrypted
most likely because the sender uses an app or webmail interface
without support for end-to-endencryption.</p>
<h3 id="why-do-i-see-unencrypted-messages">
Why do I see unencrypted messages? <a href="#why-do-i-see-unencrypted-messages" class="anchor"></a>
</h3>
<p>If a contact uses a non-Autocrypt e-mail app,
all messages involving this contact (in a group or 1:1 chat)
will not be end-to-end encrypted, and thus not show a “padlock” with messages.
Note that even if your contacts use Delta Chat on their account,
they might also use a non-Autocrypt e-mail app on that account
which then may cause intermittently unencrypted messages.
Replying unencrypted to unencrypted messages is mandated by Autocrypt
to prevent unreadable messages on the side of your contacts
and their non-Autocrypt e-mail app.</p>
<h3 id="how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app">
How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app? <a href="#how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app" class="anchor"></a>
</h3>
<p>If you need a safely end-to-end encrypted chat with a contact
who is using their e-mail account both with Delta Chat and non-Autocrypt apps (e.g. webmail),
its best to setup <a href="#howtoe2ee">guaranteed end-to-end encryption with them</a>
and then create a guaranteed end-to-end encrypted group chat with you two as members.
In this group chat all messages will be end-to-end encrypted
even if the direct chat between you two has a
<a href="#nocryptanymore">“… sent a message from another device”</a> warning.</p>
<h3 id="how-can-i-ensure-message-end-to-end-encryption-and-deletion">
How can I ensure message end-to-end encryption and deletion? <a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion" class="anchor"></a>
</h3>
<p>The best way to ensure every message is end-to-end encrypted,
and metadata deleted as quickly as possible
is <a href="#howtoe2ee">using chats with guaranteed end-to-end encryption</a>
and turning on <a href="#ephemeralmsgs">disappearing messages</a>.</p>
<p>Guaranteed end-to-end encrypted chats protect against <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM attacks</a>
and turning on disappearing messages deletes the messages
on the server after a user-configured time.</p>
<p>If you dont need a longer-lived copy of your messages on the server,
you can also turn on <a href="#delold">“delete messages from server automatically”</a>.</p>
<h3 id="pfs"> <h3 id="pfs">
@ -1155,45 +1019,52 @@ you can also turn on <a href="#delold">“delete messages from server automatica
</h3> </h3>
<p>No, Delta Chat doesnt support Perfect Forward Secrecy (PFS). <p>No, not yet.</p>
This means that if your Delta Chat private decryption key is leaked,
<p>Delta Chat today doesnt support Perfect Forward Secrecy (PFS).
This means that if your private decryption key is leaked,
and someone has collected your prior in-transit messages, and someone has collected your prior in-transit messages,
they will be able to decrypt and read them using the leaked decryption key.</p> they will be able to decrypt and read them using the leaked decryption key.
Note that Forward Secrecy only increases security if you delete messages.
Otherwise, someone obtaining your decryption keys
is typically also able to get all your non-deleted messages
and doesnt even need to decrypt any previously collected messages.</p>
<p>Note, however, that if anyone obtains to your decryption keys, <p>We designed a Forward Secrecy approach that withstood
they will typically also be able to obtain your messages, initial examination from some cryptographers and implementation experts
irrespective if Perfect Forward Secrecy is in place or not. but is pending a more formal write up
The typical real-world situation for leaked decryption keys is device seizure to ascertain it reliably works in federated messaging and with multi-device usage,
which we discuss in our answer <a href="#device-seizure">on metadata and device seizure</a>.</p> before it could be implemented in <a href="https://github.com/chatmail/core">chatmail core</a>,
which would make it available in all <a href="https://chatmail.at/clients">chatmail clients</a>.</p>
<p>It is possible that Delta Chat evolves to support Perfect Forward Secrecy, <h3 id="pqc">
because OpenPGP is just a container for encrypted messages
but encryption key management (and thus key rotation or key “ratcheting”)
could be organized in flexible ways.
See <a href="https://gitlab.com/sequoia-pgp/openpgp-dr">Seqouias PFS prototype</a>
for existing experiments in the OpenPGP implementor community.</p>
<h3 id="is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">
Is end-to-end encryption of Delta Chat as safe as Signal? <a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal" class="anchor"></a> Does Delta Chat support Post-Quantum-Cryptography? <a href="#pqc" class="anchor"></a>
</h3> </h3>
<p>It depends on what is important to you. <p>No, not yet.</p>
Delta Chat <a href="#pfs">does not support PFS</a> like Signal does
but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</a>
that are safe against compromised servers or corrupted networks.
Signal and most other PFS-supporting messengers do not provide
a practical scheme for protecting chat groups from network attacks
which are arguably more worrisome
than a potential attacker who seizes your phone and private encryption setup
but somehow not your messages, yet has a full record of all
past encrypted messages.</p>
<p>In any case, Delta Chats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a> <p>Delta Chat uses the Rust OpenPGP library <a href="https://github.com/rpgp/rpgp">rPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p> which supports the latest <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/">IETF Post-Quantum-Cryptography OpenPGP draft</a>.
We aim to add PQC support in <a href="https://github.com/chatmail/core">chatmail core</a> after the draft is finalized at the IETF
in collaboration with other OpenPGP implementers.</p>
<h3 id="how-can-i-manually-check-encryption-information">
How can I manually check encryption information? <a href="#how-can-i-manually-check-encryption-information" class="anchor"></a>
</h3>
<p>You may check the end-to-end encryption status manually in the “Encryption” dialog
(user profile on Android/iOS or right-click a users chat-list item on desktop).
Delta Chat shows two fingerprints there.
If the same fingerprints appear on your own and your contacts device,
the connection is safe.</p>
<h3 id="importkey"> <h3 id="importkey">
@ -1228,7 +1099,7 @@ from most recent to older:</p>
<li> <li>
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of <p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place. rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat. rPGP serves as the end-to-end encryption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
Two advisories were released related to the findings of this audit:</p> Two advisories were released related to the findings of this audit:</p>
<ul> <ul>
@ -1452,9 +1323,10 @@ copies on the devices of your chat partners. Other than that, its completely
isolated from the Internet.</li> isolated from the Internet.</li>
<li>The privacy a webxdc app offers is the privacy of your chat - as long as you <li>The privacy a webxdc app offers is the privacy of your chat - as long as you
trust the people you chat with, you can trust the webxdc app as well.</li> trust the people you chat with, you can trust the webxdc app as well.</li>
<li>This also means: it can be a privacy risk to open webxdc apps in chats where <li>This also means: it can be a privacy risk to open apps in chats with untrusted members.
you dont trust the members - as you know it from e-mail attachments, where Just like with e-mail attachments, video calls or plain links:
you only open attachments from senders you trust, and not from spammers.</li> open them only from senders you trust, and not from spammers.
Spammers can get to know any data you send to them, as well as your IP address.</li>
</ul> </ul>
<h3 id="where-can-i-get-webxdc-apps"> <h3 id="where-can-i-get-webxdc-apps">
@ -1531,14 +1403,10 @@ another rather stable experiment we run on the side (sic!).</p>
</h3> </h3>
<ul> <p>With a Broadcast List you can send a message to many recipients at once;
<li>Une liste de diffusion vous permet denvoyer un message à plusieurs destinataires en même temps sans quils puissent se voir mutuellement. Vous recevez leurs réponses respectives dans les discussions privées que vous avez avec chacun deux.</li> the recipients cannot reply in that list.
<li>Concrètement, cest un courriel avec plusieurs destinataires en copie cachée.</li> Broadcast lists are still highly experimental
<li>Vous pouvez activer cette option dans la section “Fonctionnalités expérimentales” des paramètres avancés. Vous pourrez ensuite créer une liste de diffusion à partir du bouton “Nouvelle discussion”.</li> and will very probably be replaced by something else, stay tuned :)</p>
<li>Si vous utilisez plusieurs appareils, veuillez noter quil nest pas possible, pour linstant, de synchroniser les listes de diffusion.</li>
<li>Les messages envoyés à des listes de diffusion ne sont pas chiffrés, parce que le chiffrement romprait lanonymat puisque tous les destinataires pourraient alors voir qui dautre a reçu le message.
(Mais envoyer des courriels individuels à tout le monde serait encore pire à cause de la consommation du réseau requise et des limites denvoi).</li>
</ul>
<h3 id="comment-partager-ma-géolocalisation-avec-mes-contacts-"> <h3 id="comment-partager-ma-géolocalisation-avec-mes-contacts-">
@ -1592,6 +1460,11 @@ a message, but also appears on the map.</li>
</h3> </h3>
<p>Note:
Changing email addresses is temporarily disabled
because of ongoing changes to the DeltaChat core.
It should be available again in a few months.</p>
<ol> <ol>
<li> <li>
<p>Change your address in “Settings → Advanced → Password and Account” and <p>Change your address in “Settings → Advanced → Password and Account” and
@ -1693,17 +1566,19 @@ Voici ce que fait Delta Chat avec ces autorisations:</p>
Cependant, il faut activer des options spéciales pour que cela fonctionne correctement avec certains fournisseurs… Voir <a href="https://providers.delta.chat">la liste des fournisseurs</a>.</li> Cependant, il faut activer des options spéciales pour que cela fonctionne correctement avec certains fournisseurs… Voir <a href="https://providers.delta.chat">la liste des fournisseurs</a>.</li>
</ul> </ul>
<h3 id="je-veux-administrer-mon-propre-serveur-courriel-pour-delta-chat--que-me-conseillez-vous-"> <h3 id="i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">
Je veux administrer mon propre serveur courriel pour Delta Chat : que me conseillez-vous ? <a href="#je-veux-administrer-mon-propre-serveur-courriel-pour-delta-chat--que-me-conseillez-vous-" class="anchor"></a> I want to manage my own server for Delta Chat. What do you recommend? <a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend" class="anchor"></a>
</h3> </h3>
<ul> <ul>
<li>La plupart des serveurs courriel fonctionneront très bien. Mais nous conseillons de combiner mailcow et mailadm, ainsi que nous le décrivons <a href="https://delta.chat/en/2023-01-27-upcoming-mail-server-workshops">sur notre blog</a>.</li> <li>Most mail servers will work well. But what we personally recommend is a
<li>Vous trouverez un <a href="https://delta.chat/fr/serverguide">guide dinstallation sur notre site internet</a>.</li> chatmail relay server, as described <a href="https://delta.chat/en/2023-12-13-chatmail">in this
blogpost</a>.</li>
<li>You can find an <a href="https://github.com/chatmail/relay">installation guide on GitHub</a>.</li>
</ul> </ul>
<h3 id="pourquoi-dois-je-entrer-le-mot-de-passe-de-mon-compte-de-courriel-dans-delta-chat--est-ce-sécurisé-"> <h3 id="pourquoi-dois-je-entrer-le-mot-de-passe-de-mon-compte-de-courriel-dans-delta-chat--est-ce-sécurisé-">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -36,27 +36,24 @@
<li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li> <li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li>
</ul> </ul>
</li> </li>
<li><a href="#encryption-and-security">Encryption and Security</a> <li><a href="#e2ee">Encryption and Security</a>
<ul> <ul>
<li><a href="#which-standards-are-used-for-end-to-end-encryption">Which standards are used for end-to-end encryption?</a></li> <li><a href="#which-standards-are-used-for-end-to-end-encryption">Which standards are used for end-to-end encryption?</a></li>
<li><a href="#whene2e">How can i know if messages are end-to-end encrypted?</a></li> <li><a href="#whene2e">How can i know if messages are end-to-end encrypted?</a></li>
<li><a href="#howtoe2ee">How can I get guaranteed end-to-end encryption and green checkmarks?</a></li> <li><a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption">Can i still receive or send mails without end-to-end encryption?</a></li>
<li><a href="#e2eeguarantee">What does the green checkmark and “guaranteed end-to-end encryption” mean?</a></li> <li><a href="#howtoe2ee">How can I establish a chat with a new contact?</a></li>
<li><a href="#nocryptanymore">A contact “sent a message from another device”, what can i do?</a></li> <li><a href="#e2eeguarantee">What does the green checkmark in a contact profile mean?</a></li>
<li><a href="#are-attachments-pictures-files-audio-etc-end-to-end-encrypted">Are attachments (pictures, files, audio etc.) end-to-end encrypted?</a></li> <li><a href="#are-attachments-pictures-files-audio-etc-end-to-end-encrypted">Are attachments (pictures, files, audio etc.) end-to-end encrypted?</a></li>
<li><a href="#openpgp-secure">Is OpenPGP secure?</a></li> <li><a href="#openpgp-secure">Is OpenPGP secure?</a></li>
<li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end -encryption?</a></li> <li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end-encryption?</a></li>
<li><a href="#is-delta-chat-vulnerable-to-efail">Is Delta Chat vulnerable to EFAIL?</a></li> <li><a href="#is-delta-chat-vulnerable-to-efail">Is Delta Chat vulnerable to EFAIL?</a></li>
<li><a href="#tls">Is a message exposed in cleartext if end-to-end encryption is not available?</a></li> <li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
<li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li> <li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li>
<li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li> <li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li>
<li><a href="#how-can-i-check-encryption-information">How can i check encryption information?</a></li> <li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
<li><a href="#how-can-i-check-the-encryption-status-of-messages">How can I check the encryption status of messages?</a></li>
<li><a href="#why-do-i-see-unencrypted-messages">Why do I see unencrypted messages?</a></li>
<li><a href="#how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app">How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app?</a></li>
<li><a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion">How can I ensure message end-to-end encryption and deletion?</a></li>
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li> <li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of Delta Chat as safe as Signal?</a></li> <li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
<li><a href="#how-can-i-manually-check-encryption-information">How can I manually check encryption information?</a></li>
<li><a href="#importkey">Can I reuse my existing private key?</a></li> <li><a href="#importkey">Can I reuse my existing private key?</a></li>
<li><a href="#security-audits">Was Delta Chat independently audited for security vulnerabilities?</a></li> <li><a href="#security-audits">Was Delta Chat independently audited for security vulnerabilities?</a></li>
</ul> </ul>
@ -90,7 +87,7 @@
<ul> <ul>
<li><a href="#izin-apa-yang-dibutuhkan-delta-chat">Izin apa yang dibutuhkan Delta Chat?</a></li> <li><a href="#izin-apa-yang-dibutuhkan-delta-chat">Izin apa yang dibutuhkan Delta Chat?</a></li>
<li><a href="#does-delta-chat-work-with-my-e-mail-provider">Does Delta Chat work with <em>my</em> e-mail-provider?</a></li> <li><a href="#does-delta-chat-work-with-my-e-mail-provider">Does Delta Chat work with <em>my</em> e-mail-provider?</a></li>
<li><a href="#i-want-to-manage-my-own-e-mail-server-for-delta-chat-what-do-you-recommend">I want to manage my own e-mail server for Delta Chat. What do you recommend?</a></li> <li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
<li><a href="#mengapa-saya-harus-memasukkan-kata-sandi-e-mail-saya-ke-delta-chat-apakah-ini-aman">Mengapa saya harus memasukkan kata sandi E-Mail saya ke Delta Chat? Apakah ini aman?</a></li> <li><a href="#mengapa-saya-harus-memasukkan-kata-sandi-e-mail-saya-ke-delta-chat-apakah-ini-aman">Mengapa saya harus memasukkan kata sandi E-Mail saya ke Delta Chat? Apakah ini aman?</a></li>
<li><a href="#pesan-mana-yang-muncul-di-delta-chat">Pesan mana yang muncul di Delta Chat?</a></li> <li><a href="#pesan-mana-yang-muncul-di-delta-chat">Pesan mana yang muncul di Delta Chat?</a></li>
<li><a href="#apakah-delta-chat-mendukung-email-html">Apakah Delta Chat mendukung email HTML?</a></li> <li><a href="#apakah-delta-chat-mendukung-email-html">Apakah Delta Chat mendukung email HTML?</a></li>
@ -726,10 +723,10 @@ that achieves “instant delivery” of messages for all chatmail servers
including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>. including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>.
Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p> Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p>
<h2 id="encryption-and-security"> <h2 id="e2ee">
Encryption and Security <a href="#encryption-and-security" class="anchor"></a> Encryption and Security <a href="#e2ee" class="anchor"></a>
</h2> </h2>
@ -742,18 +739,26 @@ Welcome to the power of the interoperable and massive chatmail and e-mail system
</h3> </h3>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically <p>Delta Chat uses a <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>
establishing end-to-end encryption with contacts and group chats. to provide automatic end-to-end encryption using these protocols:</p>
Autocrypt uses a limited and <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>.
End-to-End encrypted messages are marked with a padlock
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../lock-icon.png" alt="padlock" />.</p>
<p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a> <ul>
are used for establishing chats with guaranteed end-to-end encryption <li>
which protects against network attacks and compromised servers. <p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join</a>
Chats marked with a green checkmark to exchange encryption setup information through QR-code scanning or “invite links”.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> </li>
guarantee end-to-end encrypted messages.</p> <li>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically
establishing end-to-end encryption between contacts and all members of a group chat.</p>
</li>
<li>
<p><a href="https://github.com/chatmail/core/blob/main/spec.md#attaching-a-contact-to-a-message">Sharing a contact to a
chat</a>
enables receivers to use end-to-end encryption with the contact.</p>
</li>
</ul>
<p>Delta Chat does not query, publish or interact with any OpenPGP key servers.</p>
<h3 id="whene2e"> <h3 id="whene2e">
@ -763,28 +768,37 @@ guarantee end-to-end encrypted messages.</p>
</h3> </h3>
<p>All end-to-end encrypted messages carry a padlock:</p> <p>All messages in Delta Chat are <strong>end-to-end encrypted by default</strong>.
Since the Delta Chat Version 2 release series (July 2025)
there are no lock or similar markers on end-to-end encrypted messages, anymore.</p>
<p><img style="width:160px; margin:1px" src="../lock-screenshot.png" alt="padlock in bubble" /></p> <h3 id="can-i-still-receive-or-send-mails-without-end-to-end-encryption">
<p>End-to-end encryption is guaranteed if there is a green checkmark next to the chat title:</p>
<p><img style="width:211px; margin:1px" src="../green-checkmark-screenshot.png" alt="green checkmark in title" /></p>
<h3 id="howtoe2ee">
How can I get guaranteed end-to-end encryption and green checkmarks? <a href="#howtoe2ee" class="anchor"></a> Can i still receive or send mails without end-to-end encryption? <a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption" class="anchor"></a>
</h3> </h3>
<p>If you have a second communication channel with your chat partner, <p>If you use default <a href="https://chatmail.at/relays">chatmail relays</a>,
like a video chat or a different messenger, it is impossible to receive or send messages without end-to-end encryption.</p>
you can generate an invite link.</p>
<p>If you are together in person, <p>If you instead create a profile using a classic e-mail server,
you can show a QR code to your chat partner.</p> you can send and receive messages without end-to-end encryption.
Such messages lacking end-to-end encryption are marked with an e-mail icon
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
<h3 id="howtoe2ee">
How can I establish a chat with a new contact? <a href="#howtoe2ee" class="anchor"></a>
</h3>
<p>You can send an invite link through another private chat,
show an invitation QR code when next to each other or in a video call,
or click on a “contact” that was shared in a chat.</p>
<ul> <ul>
<li> <li>
@ -799,135 +813,54 @@ on the Delta Chat app main screen.</p>
</li> </li>
</ul> </ul>
<p>Let your chat partner scan the QR image <p>Ask your chat partner to scan the QR image
with their Delta Chat app, with their Delta Chat app,
or click “Copy” or “Share” to create an invite link or click “Copy” or “Share” to create an invite link
and share it with your chat partner.</p> and share it with your chat partner.</p>
<p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">Secure-Join network messages are exchanged</a> between both devices.</p> <p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">end-to-end encryption is getting established</a>.</p>
<ul> <ul>
<li> <li>
<p>If both devices are online, <p>If both sides are online, they will soon see a (group or direct) chat
both sides will eventually see a (group or direct) chat with a green checkmark and can start messaging securely.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
next to the title.</p>
</li> </li>
<li> <li>
<p>If one of the devices is offline, the green checkmarks will only <p>If one side is offline or in bad network,
appear later when the device is internet-connected again the ability to chat is delayed until connectivity is restored.</p>
and the Secure-Join network protocol completed.</p>
</li> </li>
</ul> </ul>
<p>Congratulations! <p>Congratulations!
You now will automatically use guaranteed end-to-end encryption You now will automatically use end-to-end encryption
with this contact and both of you can add each other to green-checkmarked groups with this contact.
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />, If you add each other to chat groups,
thereby automatically spreading guaranteed end-to-end encryption among its members.</p> end-to-end encryption will be established among all members.</p>
<h3 id="e2eeguarantee"> <h3 id="e2eeguarantee">
What does the green checkmark and “guaranteed end-to-end encryption” mean? <a href="#e2eeguarantee" class="anchor"></a> What does the green checkmark in a contact profile mean? <a href="#e2eeguarantee" class="anchor"></a>
</h3> </h3>
<p>Chat titles with green checkmarks <p>A contact profile might show a green checkmark
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
mean that all messages in the chat will be end-to-end encrypted and an “Introduced by” line.
and can not be read or altered by compromised e-mail servers or Internet providers.
Joining green-checkmarked group chats
safely spreads everybodys encryption information (and green checkmarks)
in a manner that guarantees end-to-end encryption in the group and among members.</p>
<p>Contact profiles with green checkmarks
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
mean that messaging a contact is currently guaranteed to be end-to-end encrypted.
Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you
or was introduced by a another green-checkmarked contact. or was introduced by a another green-checkmarked contact.
Introductions happen automatically when adding members to groups. Introductions happen automatically when adding members to groups.
Whoever adds a contact to a green-checkmarked group becomes an introducer Whoever adds a green-checkmarked contact to a group with only green-checkmarked members
to those members who didnt yet know about the added contact. becomes an introducer.
In a contact profile you can tap on the “Introduced by …” text repeatedly In a contact profile you can tap on the “Introduced by …” text repeatedly
until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p> until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p>
<p>Note that in a contact profile you may see and tap introducers
but there is no green checkmark in the profile title.
This usually means that the contact <a href="#nocryptanymore">“sent a message from another device”</a>.</p>
<p>For more in-depth discussion of “guaranteed end-to-end encryption” <p>For more in-depth discussion of “guaranteed end-to-end encryption”
please see <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a> please see <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a>
and specifically read about “Verified Groups”, the technical term and specifically read about “Verified Groups”, the technical term
of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.</p> of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.</p>
<h3 id="nocryptanymore">
A contact “sent a message from another device”, what can i do? <a href="#nocryptanymore" class="anchor"></a>
</h3>
<p>Your chat with a contact lost guaranteed end-to-end encryption.
The green checkmark was removed for this chat and contact when you see this warning.
<strong>If you find the sudden drop of guaranteed end-to-end encryption
surprising for this contact then dont accept the warning!</strong>
Instead check with your contact through a second channel
like a video call, other messenger or a phone call,
to find out what happened.</p>
<p>If your contact actually caused the drop of guaranteed end-to-end encryption
please see the next paragraphs for common reasons and their mitigations.
Regardless, all other green-checkmarked chats remain guaranteed end-to-end encrypted
even if the contact is a member there.</p>
<p><strong>Your contact is using Delta Chat on a second device (phone or laptop)</strong></p>
<p>If they have another device with a Delta Chat app running,
they should remove the profile from the new device
and add it <a href="#multiclient">as a second device as described here</a>.
As soon as they message you afterwards, the warning will be gone
and guaranteed encryption is established with both devices of your contact.</p>
<p><strong>Your contact reinstalled Delta Chat using their old account login</strong></p>
<p>If they have <a href="#backup">a backup file</a>,
they should remove the profile from the new device
and rather import the backup file to re-create their profile.
As soon as they message you afterwards, the warning will be gone
and guaranteed encryption is re-established for this contact.</p>
<p>If they dont have a backup file, its best to perform a <a href="#howtoe2ee">QR scan</a>
with your chat partner to re-establish guaranteed end-to-end encryption.</p>
<p><strong>Your contact sent a mail through a webmail interface or another e-mail app
and will get back to using Delta Chat soon again.</strong></p>
<p>If you are sure that the contact sometimes uses webmail,
or another mail app lacking end-to-end encryption,
then you may accept the warning.
As soon as your contact uses Delta Chat again,
guaranteed end-to-end encryption will be automatically re-established.</p>
<p><strong>Your contact stopped using Delta Chat entirely</strong></p>
<p>Sometimes remaining in contact is more important than end-to-end encryption.
<a href="#tls">“Transport Layer Encryption” (TLS)</a> may still meaningfully protect
the confidentiality of your messages between your device and the e-mail server.
But without end-to-end encryption you and your contact are trusting your e-mail server
to not read or manipulate your messages, and to not hand them to third parties.</p>
<p>In any case, you can not do much else than accept the warning.
Please also remove the contact from any active green-checkmarked group
which you can find in “Shared chats” in the Contact profile.
This spares your contact from getting “unreadable” messages.</p>
<p>If the contact removed Delta Chat because of buggy or undesirable behaviour,
please consider posting to our <a href="https://support.delta.chat">support forum</a>
to help us identify and address common problems. Thanks!</p>
<h3 id="are-attachments-pictures-files-audio-etc-end-to-end-encrypted"> <h3 id="are-attachments-pictures-files-audio-etc-end-to-end-encrypted">
@ -952,8 +885,7 @@ and attachment metadata such as filenames.</p>
</h3> </h3>
<p>Yes, Delta Chat uses a secure subset of OpenPGP <p>Yes, Delta Chat uses a secure subset of OpenPGP
and only displays a padlock security indicator on a message requiring the whole message to be properly encrypted and signed.
if the whole message is properly encrypted and signed.
For example, “Detached signatures” are not treated as secure.</p> For example, “Detached signatures” are not treated as secure.</p>
<p>OpenPGP is not insecure by itself. <p>OpenPGP is not insecure by itself.
@ -974,7 +906,7 @@ which was thankfully adopted in summer 2023.</p>
<h3 id="openpgp-alternatives"> <h3 id="openpgp-alternatives">
Did you consider using alternatives to OpenPGP for end-to-end -encryption? <a href="#openpgp-alternatives" class="anchor"></a> Did you consider using alternatives to OpenPGP for end-to-end-encryption? <a href="#openpgp-alternatives" class="anchor"></a>
</h3> </h3>
@ -1017,17 +949,15 @@ as defined by the Autocrypt Level 1 specification.</p>
<h3 id="tls"> <h3 id="tls">
Is a message exposed in cleartext if end-to-end encryption is not available? <a href="#tls" class="anchor"></a> Are messages marked with the mail icon exposed on the Internet? <a href="#tls" class="anchor"></a>
</h3> </h3>
<p>Even if your messages are not guaranteed to be end-to-end encrypted, <p>If you are sending or receiving e-mail messages without end-to-end encryption (using a classic e-mail server),
they are still protected from Internet providers like cell or cable companies. they are still protected from cell or cable companies who can not read or modify your e-mail messages.
However, your and your recipients e-mail providers But both your and your recipients e-mail providers
may read, analyze or even modify your messages, may read, analyze or modify your messages, including any attachments.</p>
including any attachments,
if they are not end-to-end encrypted.</p>
<p>Delta Chat by default uses strict <p>Delta Chat by default uses strict
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a> <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a>
@ -1040,10 +970,6 @@ then transport encryption will be enforced between e-mail providers
in which case Delta Chat communications will never be exposed in cleartext to the Internet in which case Delta Chat communications will never be exposed in cleartext to the Internet
even if the message was not end-to-end encrypted.</p> even if the message was not end-to-end encrypted.</p>
<p>Note that <a href="#howtoe2ee">maintaining guaranteed end-to-end encryption</a> on top of TLS encryption
provides pervasive safety between your and the recipients devices.
Not even your e-mail or Internet provider will be able to read or modify your messages.</p>
<h3 id="message-metadata"> <h3 id="message-metadata">
@ -1052,25 +978,25 @@ Not even your e-mail or Internet provider will be able to read or modify your me
</h3> </h3>
<p>Delta Chat protects most message metadata by putting the following information <p>Unlike most other messengers,
into the end-to-end encrypted part of messages:</p> Delta Chat apps do not store any metadata about contacts or groups on servers, also not in encrypted form.
Instead, all group metadata is end-to-end encrypted and stored on end-user devices, only.</p>
<p>E-mail Servers can therefore only see</p>
<ul> <ul>
<li>Subject line</li> <li>
<li>Group avatar and name</li> <p>the message date,</p>
<li>MDN (read receipt) requests (<code class="language-plaintext highlighter-rouge">Chat-Disposition-Notification-To</code>)</li> </li>
<li>Disappearing message timer (<code class="language-plaintext highlighter-rouge">Ephemeral-Timer</code>)</li> <li>
<li><code class="language-plaintext highlighter-rouge">Chat-Group-Member-Removed</code>, <code class="language-plaintext highlighter-rouge">Chat-Group-Member-Added</code></li> <p>sender and receiver addresses</p>
<li><code class="language-plaintext highlighter-rouge">Secure-Join</code> header containing secure join commands</li> </li>
<li>Notification about enabling location streaming</li> <li>
<li>WebRTC room URL</li> <p>and message size.</p>
</li>
</ul> </ul>
<p>E-Mail servers do not get access to this protected metadata <p>All other message, contact and group metadata resides in the end-to-end encrypted part of messages.</p>
but they do see the message date as well as the message size,
and, more importantly, the sender and receiver addresses.
E-mail servers need receiver addresses to route and
deliver messages to recipients devices.</p>
<h3 id="device-seizure"> <h3 id="device-seizure">
@ -1082,96 +1008,34 @@ deliver messages to recipients devices.</p>
<p>Both for protecting against metadata-collecting e-mail servers <p>Both for protecting against metadata-collecting e-mail servers
as well as against the threat of device seizure as well as against the threat of device seizure
we recommend to use a <a href="https://delta.chat/chatmail">chatmail server</a> we recommend to use a <a href="https://chatmail.at/relays">chatmail relay</a>
to create pseudonymous temporary profiles through QR-code scans. to create chat profiles using random e-mail addresses for transport.
Note that Delta Chat apps on all platforms support multiple profiles Note that Delta Chat apps on all platforms support multiple profiles
so you can easily use situation-specific profiles next to your “main” profile so you can easily use situation-specific profiles next to your “main” profile
with the knowledge that all their data, along with all metadata, will be deleted. with the knowledge that all their data, along with all metadata, will be deleted.
Moreover, if a device is seized then contacts using temporary profiles Moreover, if a device is seized then chat contacts using short-lived profiles
can not be identified easily, as compared to messengers which reveal can not be identified easily.</p>
phone numbers in chat groups which in turn are often associated with legal identities.</p>
<h3 id="how-can-i-check-encryption-information"> <h3 id="sealedsender">
How can i check encryption information? <a href="#how-can-i-check-encryption-information" class="anchor"></a> Does Delta Chat support “Sealed Sender”? <a href="#sealedsender" class="anchor"></a>
</h3> </h3>
<p>You may check the end-to-end encryption status manually in the “Encryption” dialog <p>No, not yet.</p>
(user profile on Android/iOS or right-click a users chat-list item on desktop).
Delta Chat shows two fingerprints there.
If the same fingerprints appear on your own and your contacts device,
the connection is safe.</p>
<h3 id="how-can-i-check-the-encryption-status-of-messages"> <p>The Signal messenger introduced <a href="https://signal.org/blog/sealed-sender/">“Sealed Sender” in 2018</a>
to keep their server infrastructure ignorant of who is sending a message to a set of recipients.
It is particularly important because the Signal server knows the mobile number of each account,
which is usually associated with a passport identity.</p>
<p>Even if <a href="https://chatmail.at/relays">chatmail relays</a>
How can I check the encryption status of messages? <a href="#how-can-i-check-the-encryption-status-of-messages" class="anchor"></a> do not ask for any private data (including no phone numbers),
it might still be worthwhile to protect relational metadata between addresses.
We dont foresee bigger problems in using random throw-away e-mail addresses for sealed sending
</h3> but an implementation has not been agreed as a priority yet.</p>
<p>A little <strong>padlock</strong> in a message bubble denotes
that the message was properly end-to-end encrypted from the given sender.
If there is <strong>no padlock</strong>, the message was not properly end-to-end encrypted
most likely because the sender uses an app or webmail interface
without support for end-to-endencryption.</p>
<h3 id="why-do-i-see-unencrypted-messages">
Why do I see unencrypted messages? <a href="#why-do-i-see-unencrypted-messages" class="anchor"></a>
</h3>
<p>If a contact uses a non-Autocrypt e-mail app,
all messages involving this contact (in a group or 1:1 chat)
will not be end-to-end encrypted, and thus not show a “padlock” with messages.
Note that even if your contacts use Delta Chat on their account,
they might also use a non-Autocrypt e-mail app on that account
which then may cause intermittently unencrypted messages.
Replying unencrypted to unencrypted messages is mandated by Autocrypt
to prevent unreadable messages on the side of your contacts
and their non-Autocrypt e-mail app.</p>
<h3 id="how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app">
How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app? <a href="#how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app" class="anchor"></a>
</h3>
<p>If you need a safely end-to-end encrypted chat with a contact
who is using their e-mail account both with Delta Chat and non-Autocrypt apps (e.g. webmail),
its best to setup <a href="#howtoe2ee">guaranteed end-to-end encryption with them</a>
and then create a guaranteed end-to-end encrypted group chat with you two as members.
In this group chat all messages will be end-to-end encrypted
even if the direct chat between you two has a
<a href="#nocryptanymore">“… sent a message from another device”</a> warning.</p>
<h3 id="how-can-i-ensure-message-end-to-end-encryption-and-deletion">
How can I ensure message end-to-end encryption and deletion? <a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion" class="anchor"></a>
</h3>
<p>The best way to ensure every message is end-to-end encrypted,
and metadata deleted as quickly as possible
is <a href="#howtoe2ee">using chats with guaranteed end-to-end encryption</a>
and turning on <a href="#ephemeralmsgs">disappearing messages</a>.</p>
<p>Guaranteed end-to-end encrypted chats protect against <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM attacks</a>
and turning on disappearing messages deletes the messages
on the server after a user-configured time.</p>
<p>If you dont need a longer-lived copy of your messages on the server,
you can also turn on <a href="#delold">“delete messages from server automatically”</a>.</p>
<h3 id="pfs"> <h3 id="pfs">
@ -1181,45 +1045,52 @@ you can also turn on <a href="#delold">“delete messages from server automatica
</h3> </h3>
<p>No, Delta Chat doesnt support Perfect Forward Secrecy (PFS). <p>No, not yet.</p>
This means that if your Delta Chat private decryption key is leaked,
<p>Delta Chat today doesnt support Perfect Forward Secrecy (PFS).
This means that if your private decryption key is leaked,
and someone has collected your prior in-transit messages, and someone has collected your prior in-transit messages,
they will be able to decrypt and read them using the leaked decryption key.</p> they will be able to decrypt and read them using the leaked decryption key.
Note that Forward Secrecy only increases security if you delete messages.
Otherwise, someone obtaining your decryption keys
is typically also able to get all your non-deleted messages
and doesnt even need to decrypt any previously collected messages.</p>
<p>Note, however, that if anyone obtains to your decryption keys, <p>We designed a Forward Secrecy approach that withstood
they will typically also be able to obtain your messages, initial examination from some cryptographers and implementation experts
irrespective if Perfect Forward Secrecy is in place or not. but is pending a more formal write up
The typical real-world situation for leaked decryption keys is device seizure to ascertain it reliably works in federated messaging and with multi-device usage,
which we discuss in our answer <a href="#device-seizure">on metadata and device seizure</a>.</p> before it could be implemented in <a href="https://github.com/chatmail/core">chatmail core</a>,
which would make it available in all <a href="https://chatmail.at/clients">chatmail clients</a>.</p>
<p>It is possible that Delta Chat evolves to support Perfect Forward Secrecy, <h3 id="pqc">
because OpenPGP is just a container for encrypted messages
but encryption key management (and thus key rotation or key “ratcheting”)
could be organized in flexible ways.
See <a href="https://gitlab.com/sequoia-pgp/openpgp-dr">Seqouias PFS prototype</a>
for existing experiments in the OpenPGP implementor community.</p>
<h3 id="is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">
Is end-to-end encryption of Delta Chat as safe as Signal? <a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal" class="anchor"></a> Does Delta Chat support Post-Quantum-Cryptography? <a href="#pqc" class="anchor"></a>
</h3> </h3>
<p>It depends on what is important to you. <p>No, not yet.</p>
Delta Chat <a href="#pfs">does not support PFS</a> like Signal does
but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</a>
that are safe against compromised servers or corrupted networks.
Signal and most other PFS-supporting messengers do not provide
a practical scheme for protecting chat groups from network attacks
which are arguably more worrisome
than a potential attacker who seizes your phone and private encryption setup
but somehow not your messages, yet has a full record of all
past encrypted messages.</p>
<p>In any case, Delta Chats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a> <p>Delta Chat uses the Rust OpenPGP library <a href="https://github.com/rpgp/rpgp">rPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p> which supports the latest <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/">IETF Post-Quantum-Cryptography OpenPGP draft</a>.
We aim to add PQC support in <a href="https://github.com/chatmail/core">chatmail core</a> after the draft is finalized at the IETF
in collaboration with other OpenPGP implementers.</p>
<h3 id="how-can-i-manually-check-encryption-information">
How can I manually check encryption information? <a href="#how-can-i-manually-check-encryption-information" class="anchor"></a>
</h3>
<p>You may check the end-to-end encryption status manually in the “Encryption” dialog
(user profile on Android/iOS or right-click a users chat-list item on desktop).
Delta Chat shows two fingerprints there.
If the same fingerprints appear on your own and your contacts device,
the connection is safe.</p>
<h3 id="importkey"> <h3 id="importkey">
@ -1254,7 +1125,7 @@ from most recent to older:</p>
<li> <li>
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of <p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place. rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat. rPGP serves as the end-to-end encryption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
Two advisories were released related to the findings of this audit:</p> Two advisories were released related to the findings of this audit:</p>
<ul> <ul>
@ -1501,9 +1372,10 @@ copies on the devices of your chat partners. Other than that, its completely
isolated from the Internet.</li> isolated from the Internet.</li>
<li>The privacy a webxdc app offers is the privacy of your chat - as long as you <li>The privacy a webxdc app offers is the privacy of your chat - as long as you
trust the people you chat with, you can trust the webxdc app as well.</li> trust the people you chat with, you can trust the webxdc app as well.</li>
<li>This also means: it can be a privacy risk to open webxdc apps in chats where <li>This also means: it can be a privacy risk to open apps in chats with untrusted members.
you dont trust the members - as you know it from e-mail attachments, where Just like with e-mail attachments, video calls or plain links:
you only open attachments from senders you trust, and not from spammers.</li> open them only from senders you trust, and not from spammers.
Spammers can get to know any data you send to them, as well as your IP address.</li>
</ul> </ul>
<h3 id="where-can-i-get-webxdc-apps"> <h3 id="where-can-i-get-webxdc-apps">
@ -1587,21 +1459,10 @@ this way, you will have a new random Jitsi room every time you call someone.</li
</h3> </h3>
<ul> <p>With a Broadcast List you can send a message to many recipients at once;
<li>With a Broadcast List you can send a message to many recipients at once; when the recipients cannot reply in that list.
they reply to you, you get the reply in your direct 1:1 chat with them. The Broadcast lists are still highly experimental
recipients cant see each other.</li> and will very probably be replaced by something else, stay tuned :)</p>
<li>Technically, it is an E-Mail with many recipients in BCC.</li>
<li>You can turn on the feature in the “experimental features” section in the
advanced settings. Then you can create a Broadcast List from the “New Chat”
dialog.</li>
<li>In case you are using more than one device, Broadcast Lists are currently not
synced between them.</li>
<li>Messages sent to broadcast lists are not encrypted. Encryption would break
anonymity, because then all recipients would know who else received it
(Sending individual mails to everyone would be worse for rate limit and network
consumption reason).</li>
</ul>
<h3 id="how-can-i-share-my-location-with-my-chat-partners"> <h3 id="how-can-i-share-my-location-with-my-chat-partners">
@ -1658,6 +1519,11 @@ would be done by the Delta Chat app.</p>
</h3> </h3>
<p>Note:
Changing email addresses is temporarily disabled
because of ongoing changes to the DeltaChat core.
It should be available again in a few months.</p>
<ol> <ol>
<li> <li>
<p>Change your address in “Settings → Advanced → Password and Account” and <p>Change your address in “Settings → Advanced → Password and Account” and
@ -1760,19 +1626,19 @@ However, some providers need special options to work properly,
see <a href="https://providers.delta.chat">Provider Overview</a></li> see <a href="https://providers.delta.chat">Provider Overview</a></li>
</ul> </ul>
<h3 id="i-want-to-manage-my-own-e-mail-server-for-delta-chat-what-do-you-recommend"> <h3 id="i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">
I want to manage my own e-mail server for Delta Chat. What do you recommend? <a href="#i-want-to-manage-my-own-e-mail-server-for-delta-chat-what-do-you-recommend" class="anchor"></a> I want to manage my own server for Delta Chat. What do you recommend? <a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend" class="anchor"></a>
</h3> </h3>
<ul> <ul>
<li>Most mail servers will work well. But what we personally recommend is a <li>Most mail servers will work well. But what we personally recommend is a
combination of mailcow and mailadm, as described <a href="https://delta.chat/en/2023-01-27-upcoming-mail-server-workshops">in this chatmail relay server, as described <a href="https://delta.chat/en/2023-12-13-chatmail">in this
blogpost</a>.</li> blogpost</a>.</li>
<li>You can find an <a href="https://delta.chat/id/serverguide">installation guide on our website</a>.</li> <li>You can find an <a href="https://github.com/chatmail/relay">installation guide on GitHub</a>.</li>
</ul> </ul>
<h3 id="mengapa-saya-harus-memasukkan-kata-sandi-e-mail-saya-ke-delta-chat-apakah-ini-aman"> <h3 id="mengapa-saya-harus-memasukkan-kata-sandi-e-mail-saya-ke-delta-chat-apakah-ini-aman">

View file

@ -36,27 +36,24 @@
<li><a href="#perché-delta-chat-si-integra-con-i-servizi-push-centralizzati-proprietari-di-applegoogle">Perché Delta Chat si integra con i servizi push centralizzati proprietari di Apple/Google?</a></li> <li><a href="#perché-delta-chat-si-integra-con-i-servizi-push-centralizzati-proprietari-di-applegoogle">Perché Delta Chat si integra con i servizi push centralizzati proprietari di Apple/Google?</a></li>
</ul> </ul>
</li> </li>
<li><a href="#crittografia-e-sicurezza">Crittografia e Sicurezza</a> <li><a href="#e2ee">Crittografia e Sicurezza</a>
<ul> <ul>
<li><a href="#quali-standards-vengono-utilizzati-per-la-crittografia-end-to-end">Quali standards vengono utilizzati per la crittografia end-to-end?</a></li> <li><a href="#quali-standards-vengono-utilizzati-per-la-crittografia-end-to-end">Quali standards vengono utilizzati per la crittografia end-to-end?</a></li>
<li><a href="#whene2e">Come posso sapere se i messaggi sono crittografati end-to-end?</a></li> <li><a href="#whene2e">Come posso sapere se i messaggi sono crittografati end-to-end?</a></li>
<li><a href="#howtoe2ee">Come posso ottenere la crittografia end-to-end garantita e i segni di spunta verdi?</a></li> <li><a href="#posso-ancora-ricevere-o-inviare-mails-senza-la-crittografia-end-to-end">Posso ancora ricevere o inviare mails senza la crittografia end-to-end?</a></li>
<li><a href="#e2eeguarantee">Cosa significano il segno di spunta verde e la “crittografia end-to-end garantita”?</a></li> <li><a href="#howtoe2ee">Come posso stabilire una chat con un nuovo contatto?</a></li>
<li><a href="#nocryptanymore">Un contatto “ha inviato un messaggio da un altro dispositivo”, cosa posso fare?</a></li> <li><a href="#e2eeguarantee">Cosa significa il segno di spunta verde nel profilo di un contatto?</a></li>
<li><a href="#gli-allegati-immagini-file-audio-ecc-sono-crittografati-end-to-end">Gli allegati (immagini, file, audio, ecc.) sono crittografati end-to-end?</a></li> <li><a href="#gli-allegati-immagini-file-audio-ecc-sono-crittografati-end-to-end">Gli allegati (immagini, file, audio, ecc.) sono crittografati end-to-end?</a></li>
<li><a href="#openpgp-secure">OpenPGP è sicuro?</a></li> <li><a href="#openpgp-secure">OpenPGP è sicuro?</a></li>
<li><a href="#openpgp-alternative">Avete considerato lutilizzo di alternative a OpenPGP per la crittografia end-to-end?</a></li> <li><a href="#openpgp-alternatives">Avete considerato lutilizzo di alternative a OpenPGP per la crittografia end-to-end?</a></li>
<li><a href="#delta-chat-è-vulnerabile-agli-efail">Delta Chat è vulnerabile agli EFAIL?</a></li> <li><a href="#delta-chat-è-vulnerabile-agli-efail">Delta Chat è vulnerabile agli EFAIL?</a></li>
<li><a href="#tls">Un messaggio viene esposto in chiaro se la crittografia end-to-end non è disponibile?</a></li> <li><a href="#tls">I messaggi contrassegnati dallicona della posta sono esposti su Internet?</a></li>
<li><a href="#message-metadata">In che modo Delta Chat protegge i metadati nei messaggi?</a></li> <li><a href="#message-metadata">In che modo Delta Chat protegge i metadati nei messaggi?</a></li>
<li><a href="#device-seizure">Come proteggere i metadati e contatti quando un dispositivo viene sequestrato?</a></li> <li><a href="#device-seizure">Come proteggere i metadati e contatti quando un dispositivo viene sequestrato?</a></li>
<li><a href="#come-posso-verificare-le-informazioni-di-crittografia">Come posso verificare le informazioni di crittografia?</a></li> <li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
<li><a href="#come-posso-verificare-lo-stato-di-crittografia-dei-messaggi">Come posso verificare lo stato di crittografia dei messaggi?</a></li>
<li><a href="#perché-vedo-messaggi-non-crittografati">Perché vedo messaggi non crittografati?</a></li>
<li><a href="#come-posso-ottenere-una-chat-crittografata-end-to-end-con-un-contatto-delta-chat-che-a-volte-utilizza-la-webmail-o-unaltra-app-e-mail-non-autocrypt">Come posso ottenere una chat crittografata end-to-end con un contatto Delta Chat che a volte utilizza la webmail o unaltra app e-mail non Autocrypt?</a></li>
<li><a href="#come-posso-garantire-la-crittografia-e-leliminazione-end-to-end-dei-messaggi">Come posso garantire la crittografia e leliminazione end-to-end dei messaggi?</a></li>
<li><a href="#pfs">Delta Chat supporta Perfect Forward Secrecy?</a></li> <li><a href="#pfs">Delta Chat supporta Perfect Forward Secrecy?</a></li>
<li><a href="#la-crittografia-end-to-end-di-delta-chat-è-sicura-quanto-quella-di-signal">La crittografia end-to-end di Delta Chat è sicura quanto quella di Signal?</a></li> <li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
<li><a href="#how-can-i-manually-check-encryption-information">How can I manually check encryption information?</a></li>
<li><a href="#importkey">Posso riutilizzare la mia chiave privata esistente?</a></li> <li><a href="#importkey">Posso riutilizzare la mia chiave privata esistente?</a></li>
<li><a href="#security-audits">Delta Chat è stata verificata in modo indipendente per le vulnerabilità di sicurezza?</a></li> <li><a href="#security-audits">Delta Chat è stata verificata in modo indipendente per le vulnerabilità di sicurezza?</a></li>
</ul> </ul>
@ -90,7 +87,7 @@
<ul> <ul>
<li><a href="#di-quali-autorizzazioni-ha-bisogno-delta-chat">Di quali autorizzazioni ha bisogno Delta Chat?</a></li> <li><a href="#di-quali-autorizzazioni-ha-bisogno-delta-chat">Di quali autorizzazioni ha bisogno Delta Chat?</a></li>
<li><a href="#delta-chat-funziona-con-il-mio-fornitore-e-mail">Delta Chat funziona con il <em>mio</em> fornitore e-mail?</a></li> <li><a href="#delta-chat-funziona-con-il-mio-fornitore-e-mail">Delta Chat funziona con il <em>mio</em> fornitore e-mail?</a></li>
<li><a href="#voglio-gestire-il-mio-server-di-posta-elettronica-per-delta-chat-che-cosa-mi-consigliate">Voglio gestire il mio server di posta elettronica per Delta Chat. Che cosa mi consigliate?</a></li> <li><a href="#vorrei-gestire-il-mio-server-per-delta-chat-cosa-mi-consigliate">Vorrei gestire il mio server per Delta Chat. Cosa mi consigliate?</a></li>
<li><a href="#perché-devo-inserire-la-mia-password-e-mail-in-delta-chat-è-sicuro">Perché devo inserire la mia password E-Mail in Delta Chat? È sicuro?</a></li> <li><a href="#perché-devo-inserire-la-mia-password-e-mail-in-delta-chat-è-sicuro">Perché devo inserire la mia password E-Mail in Delta Chat? È sicuro?</a></li>
<li><a href="#quali-messaggi-vengono-mostrati-in-delta-chat">Quali messaggi vengono mostrati in Delta Chat?</a></li> <li><a href="#quali-messaggi-vengono-mostrati-in-delta-chat">Quali messaggi vengono mostrati in Delta Chat?</a></li>
<li><a href="#delta-chat-supporta-le-e-mail-html">Delta Chat supporta le e-mail HTML?</a></li> <li><a href="#delta-chat-supporta-le-e-mail-html">Delta Chat supporta le e-mail HTML?</a></li>
@ -719,10 +716,10 @@ che consente la “consegna istantanea” dei messaggi a tutti i server chatmail
incluso uno potenziale <a href="https://delta.chat/chatmail#selfhosted">potresti configurarlo tu stesso senza la nostra autorizzazione</a>. incluso uno potenziale <a href="https://delta.chat/chatmail#selfhosted">potresti configurarlo tu stesso senza la nostra autorizzazione</a>.
Benvenuti nella potenza del sistema interoperabile e massiccio di chatmail ed e-mail :)</p> Benvenuti nella potenza del sistema interoperabile e massiccio di chatmail ed e-mail :)</p>
<h2 id="crittografia-e-sicurezza"> <h2 id="e2ee">
Crittografia e Sicurezza <a href="#crittografia-e-sicurezza" class="anchor"></a> Crittografia e Sicurezza <a href="#e2ee" class="anchor"></a>
</h2> </h2>
@ -735,15 +732,26 @@ Benvenuti nella potenza del sistema interoperabile e massiccio di chatmail ed e-
</h3> </h3>
<p><a href="https://autocrypt.org">Autocrypt</a> viene utilizzato automaticamente per stabilire la crittografia end-to-end con contatti e chat di gruppo. Autocrypt utilizza un <a href="#openpgp-secure">sottoinsieme limitato e sicuro dello standard OpenPGP</a>. I messaggi crittografati end-to-end sono contrassegnati da un lucchetto <p>Delta Chat utilizza un <a href="#openpgp-secure">sottoinsieme sicuro dello standard OpenPGP</a>
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../lock-icon.png" alt="padlock" />.</p> per fornire la crittografia end-to-end automatica utilizzando questi protocolli:</p>
<p><a href="https://securejoin.delta.chat/en/latest/new.html">Protocolli Secure-Join</a> <ul>
vengono utilizzati per stabilire chat con crittografia end-to-end garantita <li>
che protegge dagli attacchi di rete e dai server compromessi. <p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join</a>
Chat contrassegnata da un segno di spunta verde per scambiare informazioni sulla configurazione della crittografia tramite la scansione del codice QR o i “link di invito”.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> </li>
garantisce messaggi crittografati end-to-end.</p> <li>
<p><a href="https://autocrypt.org">Autocrypt</a> viene utilizzato per stabilire
automaticamente la crittografia end-to-end tra i contatti e tutti i membri di una chat di gruppo.</p>
</li>
<li>
<p><a href="https://github.com/chatmail/core/blob/main/spec.md#attaching-a-contact-to-a-message">Condivisione di un contatto con una
chat</a>
consente ai destinatari di utilizzare la crittografia end-to-end con il contatto.</p>
</li>
</ul>
<p>Delta Chat non esegue query, pubblica o interagisce con alcun server di chiavi OpenPGP.</p>
<h3 id="whene2e"> <h3 id="whene2e">
@ -753,28 +761,37 @@ garantisce messaggi crittografati end-to-end.</p>
</h3> </h3>
<p>Tutti i messaggi crittografati end-to-end portano un lucchetto:</p> <p>Tutti i messaggi in Delta Chat sono <strong>crittografati end-to-end per impostazione predefinita</strong>.
Dalla serie di rilasci della Versione 2 di Delta Chat (Luglio 2025)
non ci sono più lucchetti o marcatori simili, sui messaggi crittografati end-to-end.</p>
<p><img style="width:160px; margin:1px" src="../lock-screenshot.png" alt="padlock in bubble" /></p> <h3 id="posso-ancora-ricevere-o-inviare-mails-senza-la-crittografia-end-to-end">
<p>La crittografia end-to-end è garantita se è presente un segno di spunta verde accanto al titolo della chat:</p>
<p><img style="width:211px; margin:1px" src="../green-checkmark-screenshot.png" alt="green checkmark in title" /></p>
<h3 id="howtoe2ee">
Come posso ottenere la crittografia end-to-end garantita e i segni di spunta verdi? <a href="#howtoe2ee" class="anchor"></a> Posso ancora ricevere o inviare mails senza la crittografia end-to-end? <a href="#posso-ancora-ricevere-o-inviare-mails-senza-la-crittografia-end-to-end" class="anchor"></a>
</h3> </h3>
<p>Se disponi di un secondo canale di comunicazione con il tuo partner di chat, <p>Se si utilizzano i <a href="https://chatmail.at/relays">relays di chatmail</a>,
come una chat video o un altro messenger, è impossibile ricevere o inviare messaggi senza la crittografia end-to-end.</p>
puoi generare un link dinvito.</p>
<p>Se siete insieme di persona, <p>Se invece si crea un profilo utilizzando un server di posta elettronica classico,
puoi mostrare un codice QR al tuo partner di chat.</p> è possibile inviare e ricevere messaggi senza crittografia end-to-end.
I messaggi privi di crittografia end-to-end sono contrassegnati da unicona e-mail<br />
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
<h3 id="howtoe2ee">
Come posso stabilire una chat con un nuovo contatto? <a href="#howtoe2ee" class="anchor"></a>
</h3>
<p>È possibile inviare un link di invito attraverso unaltra chat privata,
mostrare un codice QR di invito quando si è vicini o in una videochiamata,
o fare clic su un “contatto” condiviso in una chat.</p>
<ul> <ul>
<li> <li>
@ -783,139 +800,60 @@ tocca il titolo del gruppo di chat per vedere lelenco dei membri,
e seleziona “Codice QR di Invito”.</p> e seleziona “Codice QR di Invito”.</p>
</li> </li>
<li> <li>
<p>Per <strong>inviti diretti alla chat 1:1</strong>, <p>Per <strong>inviti diretti alla chat 1:1</strong>,<br />
tocca licona del codice QR <img style="vertical-align:middle; width:1.8em; margin:1px" src="../qr-icon.png" /> toccare licona del Codice QR <img style="vertical-align:middle; width:1.8em; margin:1px" src="../qr-icon.png" />
nella schermata principale dellapp Delta Chat.</p> nella schermata principale dellapp Delta Chat.</p>
</li> </li>
</ul> </ul>
<p>Lascia che il tuo partner di chat esegua la scansione dellimmagine QR <p>Chiedere al partner di chat di scansionare limmagine QR
con la loro app Delta Chat, con la propria app Delta Chat,
oppure fai clic su “Copia” o “Condividi” per creare un collegamento di invito oppure cliccare su “Copia” o “Condividi” per creare un link di invito
e condividilo con il tuo partner di chat.</p> e condividerlo con il partner di chat.</p>
<p>Ora attendi che <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">i messaggi di rete Secure-Join vengano scambiati</a> tra entrambi i dispositivi.</p> <p>Ora aspettate che <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">la crittografia end-to-end venga stabilita</a>.</p>
<ul> <ul>
<li> <li>
<p>Se entrambi i dispositivi sono online, <p>Se entrambe le parti sono online, vedranno presto una chat (di gruppo o diretta)
entrambe le parti vedranno eventualmente una chat (di gruppo o diretta) con un segno di spunta verde e potranno iniziare a messaggiare in modo sicuro.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
accanto al titolo.</p>
</li> </li>
<li> <li>
<p>Se uno dei dispositivi è offline, verranno visualizzati solo i segni di spunta verdi <p>Se una delle due parti è offline o con rete scadente,
verranno visualizzati in seguito quando il dispositivo sarà nuovamente connesso a Internet la possibilità di chattare viene ritardata fino al ripristino della connettività.</p>
e il protocollo di rete Secure-Join è stato completato.</p>
</li> </li>
</ul> </ul>
<p>Congratulazioni! <p>Congratulazioni!
Ora utilizzerai automaticamente la crittografia end-to-end garantita Ora utilizzerai automaticamente la crittografia end-to-end
con questo contatto potete aggiungervi a vicenda nei gruppi contrassegnati da un segno di spunta verde con questo contatto.
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />, Se vi aggiungete a gruppi di chat,
diffondendo così automaticamente la crittografia end-to-end garantita tra i suoi membri.</p> la crittografia end-to-end sarà stabilita tra tutti i membri.</p>
<h3 id="e2eeguarantee"> <h3 id="e2eeguarantee">
Cosa significano il segno di spunta verde e la “crittografia end-to-end garantita”? <a href="#e2eeguarantee" class="anchor"></a> Cosa significa il segno di spunta verde nel profilo di un contatto? <a href="#e2eeguarantee" class="anchor"></a>
</h3> </h3>
<p>Titoli di chat con segni di spunta verde <p>Il profilo di un contatto potrebbe mostrare una spunta verde
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
significa che tutti i messaggi nella chat saranno crittografati end-to-end e una linea “Verificato da”.
e non possono essere letti o modificati da server di e-mail o provider Internet compromessi. Ogni contatto con la spunta verde ha fatto un <a href="#howtoe2ee">QR-scan</a> con te
Partecipare alle chat di gruppo contrassegnate da un segno di spunta verde diffonde in modo sicuro le informazioni di crittografia di tutti (e i segni di spunta verdi) o è stato verificato da un altro contatto con la spunta verde.
in modo da garantire la crittografia end-to-end nel gruppo e tra i membri.</p> La verifica si ha automaticamente allaggiunta dei membri nei gruppi.
Chiunque aggiunga un contatto con spunta verde a un gruppo con solo membri con la spunta verde
<p>Profili di contatto con segni di spunta verdi diventa colui che lha verificato.
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> Nel profilo di un contatto puoi premere sul campo “Verificato da …” ripetutamente
significa che attualmente è garantita la crittografia end-to-end dei messaggi a un contatto. fino a che vedi con chi hai avuto un <a href="#howtoe2ee">QR-scan</a>.</p>
Ogni contatto contrassegnato dal segno di spunta verde ha effettuato una <a href="#howtoe2ee">scansione QR</a> diretta con te
o è stato presentato da un altro contatto contrassegnato da un segno di spunta verde.
Le presentazioni avvengono automaticamente quando si aggiungono membri ai gruppi.
Chi aggiunge un contatto a un gruppo contrassegnato da un segno di spunta verde diventa un introduttore
a quei membri che non erano ancora a conoscenza del contatto aggiunto. In un profilo di contatto è possibile toccare ripetutamente il testo “Presentato da…”.
fino ad arrivare a quello con cui hai effettuato direttamente una <a href="#howtoe2ee">scansione QR</a>.</p>
<p>Tieni presente che nel profilo di un contatto potresti vedere e toccare gli introduttori
ma non cè il segno di spunta verde nel titolo del profilo.
Questo di solito significa che il contatto <a href="#nocryptanymore">“ha inviato un messaggio da un altro dispositivo”</a>.</p>
<p>Per una discussione più approfondita sulla “crittografia end-to-end garantita” <p>Per una discussione più approfondita sulla “crittografia end-to-end garantita”
consultare <a href="https://securejoin.delta.chat/en/latest/new.html">Protocolli Secure-Join</a> consultare <a href="https://securejoin.delta.chat/en/latest/new.html">Protocolli Secure-Join</a>
e leggi nello specifico i “Gruppi Verificati”, il termine tecnico e leggi nello specifico i “Gruppi Verificati”, il termine tecnico
di quelle che qui vengono chiamate chat “con segno di spunta verde” o “crittografate end-to-end garantite”.</p> di quelle che qui vengono chiamate chat “con segno di spunta verde” o “crittografate end-to-end garantite”.</p>
<h3 id="nocryptanymore">
Un contatto “ha inviato un messaggio da un altro dispositivo”, cosa posso fare? <a href="#nocryptanymore" class="anchor"></a>
</h3>
<p>La tua chat con un contatto che ha perso la crittografia end-to-end garantita.
Il segno di spunta verde è stato rimosso per questa chat e per questo contatto quando vedi questo avviso.
<strong>Se riscontri limprovvisa rimozione della crittografia end-to-end garantita
inaspettatamente per questo contatto allora non accettare lavviso!</strong>
Verifica invece con il tuo contatto attraverso un secondo canale
come una videochiamata, un altro messenger o una telefonata,
per scoprire cosa è successo.</p>
<p>Se il tuo contatto ha effettivamente causato la rimozione della crittografia end-to-end garantita
consultare i paragrafi successivi per i motivi comuni e le relative attenuazioni.
Indipendentemente da ciò, tutte le altre chat contrassegnate da un segno di spunta verde rimangono garantite con crittografia end-to-end
anche se il contatto è un membro.</p>
<p><strong>Il tuo contatto sta utilizzando Delta Chat su un secondo dispositivo (telefono o laptop)</strong></p>
<p>Se hanno un altro dispositivo con lapp Delta Chat in esecuzione,
dovrebbero rimuovere il profilo dal nuovo dispositivo
e aggiungerlo <a href="#multiclient">come secondo dispositivo come descritto qui</a>.
Non appena ti invieranno un messaggio, lavviso scomparirà
e la crittografia garantita viene stabilita con entrambi i dispositivi del tuo contatto.</p>
<p><strong>Il tuo contatto ha reinstallato Delta Chat utilizzando il vecchio login del profilo</strong></p>
<p>Se hanno <a href="#backup">un file di backup</a>,
dovrebbero rimuovere il profilo dal nuovo dispositivo
e piuttosto importare il file di backup per ricreare il proprio profilo.
Non appena ti invieranno un messaggio, lavviso scomparirà
e la crittografia garantita viene ristabilita per questo contatto.</p>
<p>Se non hanno un file di backup, è meglio eseguire una <a href="#howtoe2ee">scansione QR</a>
con il tuo partner di chat per ristabilire la crittografia end-to-end garantita.</p>
<p><strong>Il tuo contatto ha inviato une-mail tramite uninterfaccia webmail o unaltra app di posta elettronica
e presto tornerà a utilizzare Delta Chat.</strong></p>
<p>Se sei sicuro che il contatto a volte utilizza la webmail,
o unaltra app di posta priva di crittografia end-to-end,
allora puoi accettare lavvertimento.
Non appena il tuo contatto utilizzerà nuovamente Delta Chat,
la crittografia end-to-end garantita verrà ristabilita automaticamente.</p>
<p><strong>Il tuo contatto ha smesso completamente di utilizzare Delta Chat</strong></p>
<p>A volte rimanere in contatto è più importante della crittografia end-to-end.
<a href="#tls">“Transport Layer Encryption” (TLS)</a> può comunque proteggere in modo significativo
la riservatezza dei tuoi messaggi tra il tuo dispositivo e il server di posta elettronica.
Ma senza la crittografia end-to-end tu e il tuo contratto vi fidate del vostro server di posta elettronica
a non leggere o manipolare i tuoi messaggi e a non trasmetterli a terzi.</p>
<p>In ogni caso, non puoi fare molto altro che accettare lavvertimento.
Rimuovi anche il contatto da qualsiasi gruppo attivo contrassegnato da un segno di spunta verde
che puoi trovare in “Chat condivise” nel profilo dei contatti.
Ciò evita che il tuo contatto riceva messaggi “illeggibili”.</p>
<p>Se il contatto ha rimosso Delta Chat a causa di bug o di comportamenti indesiderati,
ti invitiamo a pubblicare post sul nostro <a href="https://support.delta.chat">forum di supporto</a>
per aiutarci a identificare e affrontare i problemi comuni. Grazie!</p>
<h3 id="gli-allegati-immagini-file-audio-ecc-sono-crittografati-end-to-end"> <h3 id="gli-allegati-immagini-file-audio-ecc-sono-crittografati-end-to-end">
@ -940,9 +878,8 @@ e metadati degli allegati come i nomi dei file.</p>
</h3> </h3>
<p>Sì, Delta Chat utilizza un sottoinsieme sicuro di OpenPGP <p>Sì, Delta Chat utilizza un sottoinsieme sicuro di OpenPGP
e visualizza solo un indicatore di sicurezza lucchetto su un messaggio che richiede che lintero messaggio sia correttamente crittografato e firmato.
se lintero messaggio è crittografato e firmato correttamente. Ad esempio, le “Firme staccate” non sono considerate sicure.</p>
Ad esempio, le “Firme distaccate” non sono considerate sicure.</p>
<p>OpenPGP non è insicuro di per sé. <p>OpenPGP non è insicuro di per sé.
La maggior parte dei problemi di sicurezza di OpenPGP discussi pubblicamentederivano in realtà da una cattiva usabilità o da cattive implementazioni di strumenti o app (o entrambi). La maggior parte dei problemi di sicurezza di OpenPGP discussi pubblicamentederivano in realtà da una cattiva usabilità o da cattive implementazioni di strumenti o app (o entrambi).
@ -957,10 +894,10 @@ e <a href="#security-audits">verificato per la sicurezza nel 2019 e nel 2024</a>
per migliorare ulteriormente le caratteristiche di sicurezza implementando il per migliorare ulteriormente le caratteristiche di sicurezza implementando il
<a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-crypto-refresh/">nuovo aggiornamento crittografico IETF OpenPGP</a> che per fortuna è stato adottato nellestate 2023.</p> <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-crypto-refresh/">nuovo aggiornamento crittografico IETF OpenPGP</a> che per fortuna è stato adottato nellestate 2023.</p>
<h3 id="openpgp-alternative"> <h3 id="openpgp-alternatives">
Avete considerato lutilizzo di alternative a OpenPGP per la crittografia end-to-end? <a href="#openpgp-alternative" class="anchor"></a> Avete considerato lutilizzo di alternative a OpenPGP per la crittografia end-to-end? <a href="#openpgp-alternatives" class="anchor"></a>
</h3> </h3>
@ -1003,17 +940,15 @@ come definito dalla specifica Autocrypt Level 1.</p>
<h3 id="tls"> <h3 id="tls">
Un messaggio viene esposto in chiaro se la crittografia end-to-end non è disponibile? <a href="#tls" class="anchor"></a> I messaggi contrassegnati dallicona della posta sono esposti su Internet? <a href="#tls" class="anchor"></a>
</h3> </h3>
<p>Anche se non è garantito che i tuoi messaggi siano crittografati end-to-end, <p>Se inviate o ricevete messaggi e-mail senza crittografia end-to-end (utilizzando un server e-mail classico),
sono ancora protetti dai fornitori di Internet come le società di telefonia mobile o via cavo. sono comunque protetti dalle compagnie telefoniche o via cavo che non possono leggere o modificare i vostri messaggi e-mail.
Tuttavia, i provider di posta elettronica tuoi e del destinatario Ma sia il vostro provider e-mail che quello del destinatario
potranno leggere, analizzare o addirittura modificare i tuoi messaggi, possono leggere, analizzare o modificare i vostri messaggi, compresi gli allegati.</p>
compresi eventuali allegati,
se non sono crittografati end-to-end.</p>
<p>Delta Chat per impostazione predefinita utilizza <p>Delta Chat per impostazione predefinita utilizza
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">Crittografia TLS</a> rigorosa <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">Crittografia TLS</a> rigorosa
@ -1026,10 +961,6 @@ verrà applicata la crittografia del trasporto tra i provider e-mail
in tal caso le comunicazioni Delta Chat non verranno mai esposte in chiaro su Internet in tal caso le comunicazioni Delta Chat non verranno mai esposte in chiaro su Internet
anche se il messaggio non sarà crittografato end-to-end.</p> anche se il messaggio non sarà crittografato end-to-end.</p>
<p>Tieni presente che <a href="#howtoe2ee">mantenere la crittografia end-to-end garantita</a> oltre alla crittografia TLS
fornisce una sicurezza pervasiva tra i tuoi dispositivi e quelli del destinatario.
Nemmeno il tuo provider e-mail o Internet sarà in grado di leggere o modificare i tuoi messaggi.</p>
<h3 id="message-metadata"> <h3 id="message-metadata">
@ -1038,25 +969,25 @@ Nemmeno il tuo provider e-mail o Internet sarà in grado di leggere o modificare
</h3> </h3>
<p>Delta Chat protegge la maggior parte dei metadati dei messaggi inserendo le seguenti informazioni <p>Unlike most other messengers,
nella parte crittografata end-to-end dei messaggi:</p> Delta Chat apps do not store any metadata about contacts or groups on servers, also not in encrypted form.
Instead, all group metadata is end-to-end encrypted and stored on end-user devices, only.</p>
<p>E-mail Servers can therefore only see</p>
<ul> <ul>
<li>Linea oggetto</li> <li>
<li>Avatar e nome del gruppo</li> <p>the message date,</p>
<li>Richieste MDN (conferma di lettura) (“Chat-Disposition-Notification-To”)</li> </li>
<li>Temporizzatore dei messaggi che scompaiono (“Ephemeral-Timer”)</li> <li>
<li>“Membro del gruppo chat rimosso”, “Membro del gruppo chat aggiunto”.</li> <p>sender and receiver addresses</p>
<li>Intestazione “Secure-Join” contenente comandi di join sicuri</li> </li>
<li>Notifica sullattivazione dello streaming della posizione</li> <li>
<li>URL della stanza WebRTC</li> <p>and message size.</p>
</li>
</ul> </ul>
<p>I server E-Mail non hanno accesso a questi metadati protetti <p>All other message, contact and group metadata resides in the end-to-end encrypted part of messages.</p>
ma vedono la data del messaggio e la dimensione del messaggio,
e, cosa ancora più importante, gli indirizzi del mittente e del destinatario.
I server E-Mail necessitano di indirizzi di destinatari per instradare e
consegnare messaggi ai dispositivi del destinatario.</p>
<h3 id="device-seizure"> <h3 id="device-seizure">
@ -1066,98 +997,36 @@ consegnare messaggi ai dispositivi del destinatario.</p>
</h3> </h3>
<p>Entrambi per la protezione dai server e-mail che raccolgono metadati <p>Both for protecting against metadata-collecting e-mail servers
nonché contro il pericolo di sequestro del dispositivo as well as against the threat of device seizure
consigliamo di utilizzare un<a href="https://delta.chat/serverguide">istanza del server e-mail</a> ottimizzata per Delta Chat we recommend to use a <a href="https://chatmail.at/relays">chatmail relay</a>
per creare profili temporanei pseudonimi tramite scansioni di codici QR. to create chat profiles using random e-mail addresses for transport.
Tieni presente che le app Delta Chat su tutte le piattaforme supportano più profili Note that Delta Chat apps on all platforms support multiple profiles
in questo modo puoi utilizzare facilmente profili “1 settimana” o “1 mese” specifici per azioni accanto al tuo profilo “principale”. so you can easily use situation-specific profiles next to your “main” profile
con la consapevolezza che tutti i dati temporanei del profilo, insieme a tutti i metadati, verranno cancellati. with the knowledge that all their data, along with all metadata, will be deleted.
Inoltre, se un dispositivo viene sequestrato, i contatti utilizzano profili e-mail temporanei Moreover, if a device is seized then chat contacts using short-lived profiles
non possono essere identificati facilmente, rispetto ai messaggeri che rivelano can not be identified easily.</p>
numeri di telefono nei gruppi di chat che a loro volta sono spesso associati a identità legali.</p>
<h3 id="come-posso-verificare-le-informazioni-di-crittografia"> <h3 id="sealedsender">
Come posso verificare le informazioni di crittografia? <a href="#come-posso-verificare-le-informazioni-di-crittografia" class="anchor"></a> Does Delta Chat support “Sealed Sender”? <a href="#sealedsender" class="anchor"></a>
</h3> </h3>
<p>È possibile verificare manualmente lo stato della crittografia end-to-end nella finestra di dialogo “Crittografia”. <p>No, non ancora.</p>
(profilo utente su Android/iOS o clic con il pulsante destro del mouse sullelemento dellelenco chat di un utente sul desktop).
Delta Chat mostra due impronte digitali.
Se sul tuo dispositivo e su quello del tuo contatto vengono visualizzate le stesse impronte digitali,
la connessione è sicura.</p>
<h3 id="come-posso-verificare-lo-stato-di-crittografia-dei-messaggi"> <p>The Signal messenger introduced <a href="https://signal.org/blog/sealed-sender/">“Sealed Sender” in 2018</a>
to keep their server infrastructure ignorant of who is sending a message to a set of recipients.
It is particularly important because the Signal server knows the mobile number of each account,
which is usually associated with a passport identity.</p>
<p>Even if <a href="https://chatmail.at/relays">chatmail relays</a>
Come posso verificare lo stato di crittografia dei messaggi? <a href="#come-posso-verificare-lo-stato-di-crittografia-dei-messaggi" class="anchor"></a> do not ask for any private data (including no phone numbers),
it might still be worthwhile to protect relational metadata between addresses.
We dont foresee bigger problems in using random throw-away e-mail addresses for sealed sending
</h3> but an implementation has not been agreed as a priority yet.</p>
<p>Un piccolo <strong>lucchetto</strong> in un fumetto denota
che il messaggio è stato correttamente crittografato end-to-end dal mittente specificato.
Se <strong>non è presente alcun lucchetto</strong>, il messaggio non è stato crittografato correttamente end-to-end
molto probabilmente perché il mittente utilizza unapp o uninterfaccia webmail
senza supporto per la crittografia end-to-end.</p>
<h3 id="perché-vedo-messaggi-non-crittografati">
Perché vedo messaggi non crittografati? <a href="#perché-vedo-messaggi-non-crittografati" class="anchor"></a>
</h3>
<p>Se un contatto utilizza unapp e-mail non Autocrypt,
tutti i messaggi che coinvolgono questo contatto (in un gruppo o in una chat 1:1)
non sarà crittografato end-to-end e quindi non mostrerà un “lucchetto” con i messaggi.
Tieni presente che anche se i tuoi contatti utilizzano Delta Chat sul proprio profilo,
potrebbero anche utilizzare unapp di posta elettronica non Autocrypt su quel profilo
che quindi potrebbe causare messaggi non crittografati in modo intermittente.
La risposta non crittografata a messaggi non crittografati è richiesta da Autocrypt
per evitare messaggi illeggibili tra i tuoi contatti
e la loro app e-mail non Autocrypt.</p>
<h3 id="come-posso-ottenere-una-chat-crittografata-end-to-end-con-un-contatto-delta-chat-che-a-volte-utilizza-la-webmail-o-unaltra-app-e-mail-non-autocrypt">
Come posso ottenere una chat crittografata end-to-end con un contatto Delta Chat che a volte utilizza la webmail o unaltra app e-mail non Autocrypt? <a href="#come-posso-ottenere-una-chat-crittografata-end-to-end-con-un-contatto-delta-chat-che-a-volte-utilizza-la-webmail-o-unaltra-app-e-mail-non-autocrypt" class="anchor"></a>
</h3>
<p>Se hai bisogno di una chat crittografata end-to-end sicura con un contatto
chi utilizza il proprio profilo sia con Delta Chat che con app non Autocrypt (ad esempio webmail),
è meglio configurare <a href="#howtoe2ee">la crittografia end-to-end garantita con loro</a>
e quindi crea una chat di gruppo crittografata end-to-end garantita con voi due come membri.
In questa chat di gruppo tutti i messaggi verranno crittografati end-to-end
anche se la chat diretta tra voi due ha a
<a href="#nocryptanymore">“… inviato un messaggio da un altro dispositivo”</a> avviso.</p>
<h3 id="come-posso-garantire-la-crittografia-e-leliminazione-end-to-end-dei-messaggi">
Come posso garantire la crittografia e leliminazione end-to-end dei messaggi? <a href="#come-posso-garantire-la-crittografia-e-leliminazione-end-to-end-dei-messaggi" class="anchor"></a>
</h3>
<p>Il modo migliore per garantire che ogni messaggio sia crittografato end-to-end,
e i metadati vengono eliminati il più rapidamente possibile
è <a href="#howtoe2ee">utilizzare chat con crittografia end-to-end garantita</a>
e lattivazione dei <a href="#ephemeralmsgs">messaggi a scomparsa</a>.</p>
<p>Le chat crittografate end-to-end garantiscono la protezione dagli <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">attacchi MITM</a>
e lattivazione dei “messaggi che scompaiono” elimina i messaggi
sul server dopo un tempo configurato dallutente.</p>
<p>Se non hai bisogno di una copia più longeva dei tuoi messaggi sul server,
puoi anche attivare <a href="#delold">“elimina messaggi dal server”</a>.</p>
<h3 id="pfs"> <h3 id="pfs">
@ -1167,45 +1036,52 @@ puoi anche attivare <a href="#delold">“elimina messaggi dal server”</a>.</p>
</h3> </h3>
<p>No, Delta Chat non supporta Perfect Forward Secrecy (PFS). <p>No, non ancora.</p>
Ciò significa che se la tua chiave di cifratura privata Delta Chat viene divulgata,
e qualcuno ha raccolto i tuoi precedenti messaggi in transito,
sarà in grado di decifrarli e leggerli utilizzando la chiave di cifratura trapelata.</p>
<p>Tieni presente, tuttavia, che se qualcuno ottiene le tue chiavi di decrittazione, <p>Delta Chat today doesnt support Perfect Forward Secrecy (PFS).
in genere saranno anche in grado di ricevere i tuoi messaggi, This means that if your private decryption key is leaked,
indipendentemente dal fatto che Perfect Forward Secrecy sia attivo o meno. and someone has collected your prior in-transit messages,
La tipica situazione reale in caso di fuga di chiavi di decrittazione è il sequestro del dispositivo they will be able to decrypt and read them using the leaked decryption key.
di cui discutiamo nella nostra risposta <a href="#device-seizure">sui metadati e sul sequestro dei dispositivi</a>.</p> Note that Forward Secrecy only increases security if you delete messages.
Otherwise, someone obtaining your decryption keys
is typically also able to get all your non-deleted messages
and doesnt even need to decrypt any previously collected messages.</p>
<p>È possibile che Delta Chat si evolva per supportare Perfect Forward Secrecy, <p>We designed a Forward Secrecy approach that withstood
perché OpenPGP è solo un contenitore per messaggi crittografati initial examination from some cryptographers and implementation experts
ma la gestione delle chiavi di crittografia (e quindi la rotazione delle chiavi o “cricchetto”) but is pending a more formal write up
potrebbero essere organizzati in modo flessibile. to ascertain it reliably works in federated messaging and with multi-device usage,
Vedi <a href="https://gitlab.com/sequoia-pgp/openpgp-dr">prototipo PFS di Seqouia</a> before it could be implemented in <a href="https://github.com/chatmail/core">chatmail core</a>,
per gli esperimenti esistenti nella comunità degli implementatori di OpenPGP.</p> which would make it available in all <a href="https://chatmail.at/clients">chatmail clients</a>.</p>
<h3 id="la-crittografia-end-to-end-di-delta-chat-è-sicura-quanto-quella-di-signal"> <h3 id="pqc">
La crittografia end-to-end di Delta Chat è sicura quanto quella di Signal? <a href="#la-crittografia-end-to-end-di-delta-chat-è-sicura-quanto-quella-di-signal" class="anchor"></a> Does Delta Chat support Post-Quantum-Cryptography? <a href="#pqc" class="anchor"></a>
</h3> </h3>
<p>Dipende da cosa è importante per te. <p>No, non ancora.</p>
Delta Chat <a href="#pfs">non supporta PFS</a> come fa Signal
ma fornisce <a href="#e2eeguarantee">chat crittografate end-to-end garantite</a>
che sono sicuri contro server compromessi o reti danneggiate.
Signal e la maggior parte degli altri servizi di messaggistica che supportano PFS non forniscono
uno schema pratico per proteggere i gruppi di chat dagli attacchi di rete
che sono probabilmente più preoccupanti
di un potenziale utente malintenzionato che si impadronisce del tuo telefono e della configurazione di crittografia privata
ma in qualche modo non i tuoi messaggi, ma ha un registro completo di tutti
messaggi crittografati precedenti.</p>
<p>In ogni caso, la crittografia end-to-end di Delta Chat utilizza un <a href="#openpgp-secure">sottoinsieme sicuro di OpenPGP</a> <p>Delta Chat uses the Rust OpenPGP library <a href="https://github.com/rpgp/rpgp">rPGP</a>
che è stato <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">controllato in modo indipendente sulla sicurezza</a>.</p> which supports the latest <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/">IETF Post-Quantum-Cryptography OpenPGP draft</a>.
We aim to add PQC support in <a href="https://github.com/chatmail/core">chatmail core</a> after the draft is finalized at the IETF
in collaboration with other OpenPGP implementers.</p>
<h3 id="how-can-i-manually-check-encryption-information">
How can I manually check encryption information? <a href="#how-can-i-manually-check-encryption-information" class="anchor"></a>
</h3>
<p>È possibile verificare manualmente lo stato della crittografia end-to-end nella finestra di dialogo “Crittografia”.
(profilo utente su Android/iOS o clic con il pulsante destro del mouse sullelemento dellelenco chat di un utente sul desktop).
Delta Chat mostra due impronte digitali.
Se sul tuo dispositivo e su quello del tuo contatto vengono visualizzate le stesse impronte digitali,
la connessione è sicura.</p>
<h3 id="importkey"> <h3 id="importkey">
@ -1479,15 +1355,16 @@ un messenger estensibile.</p>
</h3> </h3>
<ul> <ul>
<li>Le apps webxdc non possono inviare dati a Internet o scaricare nulla.</li> <li>Le app webxdc non possono inviare dati in internet, o scaricare niente.</li>
<li>Unapp webxdc può scambiare dati solo allinterno di una chat Delta Chat, con la sua <li>Unapp webxdc può solo scambiare dati allinterno di una chat di Delta Chat, con le sue
copia sui dispositivi dei tuoi partner di chat. A parte questo, è completamente copie sui dispositivi dei tuoi corrispondenti. Oltre a questo, è completamente
isolato da Internet.</li> isolata da internet.</li>
<li>La privacy offerta da unapp webxdc è la privacy della tua chat, purché tu <li>La privacy che unapp webxdc offre è la privacy della tua chat - fino a che ti
ti fidi delle persone con cui chatti e quindi puoi fidarti anche dellapp webxdc.</li> fidi delle persone con cui ti scrivi, ti puoi fidare dellapp webxdc allo stesso modo.</li>
<li>Ciò significa anche: può essere un rischio per la privacy aprire le app webxdc nelle chat dove <li>Questo inoltre significa: può esserci un rischio per la privacy ad usare le app in chat con utenti non fidati.
non ti fidi dei membri, come sai dagli allegati di posta elettronica, dove Esattamente come per gli allegati delle e-mail, le videochiamate o i collegamenti in chiaro:
apri solo gli allegati provenienti dai mittenti di cui ti fidi e non da spammer.</li> aprile solo da mittenti di cui ti fidi e non dagli spammer.
Gli spammer possono riuscire ad ottenere qualunque dato tu mandi loro, come il tuo indirizzo IP.</li>
</ul> </ul>
<h3 id="dove-posso-trovare-le-apps-webxdc"> <h3 id="dove-posso-trovare-le-apps-webxdc">
@ -1570,18 +1447,10 @@ in questo modo, avrai una nuova stanza jitsi casuale ogni volta che chiami qualc
</h3> </h3>
<ul> <p>Con le Liste Trasmissioni puoi inviare un messaggio a più indirizzi contemporaneamente;
<li>Con una Lista di Trasmissione è possibile inviare un messaggio a molti destinatari contemporaneamente; quando questi vi rispondono, ricevete la risposta nella vostra chat diretta 1:1 con loro. i destinatari non possono rispondere in quella chat.
I destinatari non possono vedersi a vicenda.</li> Le Liste Trasmissioni sono ancora altamente sperimentali
<li>Tecnicamente, si tratta di un messaggio di posta elettronica con molti destinatari in BCC.</li> e saranno molto probabilmente rimpiazzate con qualcosaltro, restate sintonizzati :)</p>
<li>È possibile attivare questa funzione nella sezione “Funzionalità Sperimentali” delle impostazioni avanzate.
Quindi è possibile creare una Lista di Trasmissione dalla finestra di dialogo “Nuova chat”.</li>
<li>Nel caso in cui si utilizzi più di un dispositivo, le Liste di Trasmissione non sono attualmente sincronizzate tra loro.</li>
<li>I messaggi inviati alle Liste di Trasmissione non sono crittografate. La crittografia romperebbe lanonimato, perché
tutti i destinatari saprebbero chi altro ha ricevuto il messaggio.
(linvio di singoli messaggi di posta elettronica a tutti sarebbe peggiore per il limite di velocità e il
consumo di rete).</li>
</ul>
<h3 id="come-posso-condividere-la-mia-posizione-con-i-miei-partner-di-chat"> <h3 id="come-posso-condividere-la-mia-posizione-con-i-miei-partner-di-chat">
@ -1638,6 +1507,11 @@ verrebbe eseguito dallapp Delta Chat.</p>
</h3> </h3>
<p>Nota:
La modifica degli indirizzi e-mail è temporaneamente disabilitata
a causa delle modifiche in corso al nucleo di DeltaChat.
Dovrebbe essere nuovamente disponibile tra qualche mese.</p>
<ol> <ol>
<li> <li>
<p>Cambia il tuo indirizzo in “Impostazioni → Avanzate → Password e Profilo” e <p>Cambia il tuo indirizzo in “Impostazioni → Avanzate → Password e Profilo” e
@ -1722,19 +1596,19 @@ Tuttavia, alcuni provider necessitano di opzioni speciali per funzionare corrett
vedi <a href="https://providers.delta.chat">Panoramica fornitore</a></li> vedi <a href="https://providers.delta.chat">Panoramica fornitore</a></li>
</ul> </ul>
<h3 id="voglio-gestire-il-mio-server-di-posta-elettronica-per-delta-chat-che-cosa-mi-consigliate"> <h3 id="vorrei-gestire-il-mio-server-per-delta-chat-cosa-mi-consigliate">
Voglio gestire il mio server di posta elettronica per Delta Chat. Che cosa mi consigliate? <a href="#voglio-gestire-il-mio-server-di-posta-elettronica-per-delta-chat-che-cosa-mi-consigliate" class="anchor"></a> Vorrei gestire il mio server per Delta Chat. Cosa mi consigliate? <a href="#vorrei-gestire-il-mio-server-per-delta-chat-cosa-mi-consigliate" class="anchor"></a>
</h3> </h3>
<ul> <ul>
<li>La maggior parte dei server di posta funzionerà bene. Ma quello che raccomandiamo personalmente è una <li>La maggior parte dei server di posta funzionerà bene. Ma quello che personalmente consigliamo è un
combinazione di mailcow e mailadm, come descritto <a href="https://delta.chat/en/2023-01-27-upcoming-mail-server-workshops">in questo server relay di chatmail, come descritto <a href="https://delta.chat/en/2023-12-13-chatmail">in questo
blogpost</a>.</li> articolo del blog</a>.</li>
<li>È possibile trovare una <a href="https://delta.chat/it/serverguide">guida allinstallazione sul nostro sito Web</a>.</li> <li>Puoi trovare una <a href="https://github.com/chatmail/relay">guida allinstallazione su GitHub</a>.</li>
</ul> </ul>
<h3 id="perché-devo-inserire-la-mia-password-e-mail-in-delta-chat-è-sicuro"> <h3 id="perché-devo-inserire-la-mia-password-e-mail-in-delta-chat-è-sicuro">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -36,27 +36,24 @@
<li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li> <li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li>
</ul> </ul>
</li> </li>
<li><a href="#beveiliging-en-versleuteling">Beveiliging en versleuteling</a> <li><a href="#e2ee">Beveiliging en versleuteling</a>
<ul> <ul>
<li><a href="#welke-standaarden-worden-gebruikt-bij-eind-tot-eindversleuteling">Welke standaarden worden gebruikt bij eind-tot-eindversleuteling?</a></li> <li><a href="#welke-standaarden-worden-gebruikt-bij-eind-tot-eindversleuteling">Welke standaarden worden gebruikt bij eind-tot-eindversleuteling?</a></li>
<li><a href="#whene2e">How can i know if messages are end-to-end encrypted?</a></li> <li><a href="#whene2e">How can i know if messages are end-to-end encrypted?</a></li>
<li><a href="#howtoe2ee">How can I get guaranteed end-to-end encryption and green checkmarks?</a></li> <li><a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption">Can i still receive or send mails without end-to-end encryption?</a></li>
<li><a href="#e2eeguarantee">What does the green checkmark and “guaranteed end-to-end encryption” mean?</a></li> <li><a href="#howtoe2ee">How can I establish a chat with a new contact?</a></li>
<li><a href="#nocryptanymore">A contact “sent a message from another device”, what can i do?</a></li> <li><a href="#e2eeguarantee">What does the green checkmark in a contact profile mean?</a></li>
<li><a href="#are-attachments-pictures-files-audio-etc-end-to-end-encrypted">Are attachments (pictures, files, audio etc.) end-to-end encrypted?</a></li> <li><a href="#are-attachments-pictures-files-audio-etc-end-to-end-encrypted">Are attachments (pictures, files, audio etc.) end-to-end encrypted?</a></li>
<li><a href="#openpgp-secure">Is OpenPGP secure?</a></li> <li><a href="#openpgp-secure">Is OpenPGP secure?</a></li>
<li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end -encryption?</a></li> <li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end-encryption?</a></li>
<li><a href="#is-delta-chat-vulnerable-to-efail">Is Delta Chat vulnerable to EFAIL?</a></li> <li><a href="#is-delta-chat-vulnerable-to-efail">Is Delta Chat vulnerable to EFAIL?</a></li>
<li><a href="#tls">Is a message exposed in cleartext if end-to-end encryption is not available?</a></li> <li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
<li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li> <li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li>
<li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li> <li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li>
<li><a href="#how-can-i-check-encryption-information">How can i check encryption information?</a></li> <li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
<li><a href="#how-can-i-check-the-encryption-status-of-messages">How can I check the encryption status of messages?</a></li>
<li><a href="#why-do-i-see-unencrypted-messages">Why do I see unencrypted messages?</a></li>
<li><a href="#how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app">How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app?</a></li>
<li><a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion">How can I ensure message end-to-end encryption and deletion?</a></li>
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li> <li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of Delta Chat as safe as Signal?</a></li> <li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
<li><a href="#how-can-i-manually-check-encryption-information">How can I manually check encryption information?</a></li>
<li><a href="#importkey">Kan ik mijn bestaande privésleutel hergebruiken?</a></li> <li><a href="#importkey">Kan ik mijn bestaande privésleutel hergebruiken?</a></li>
<li><a href="#security-audits">Heeft Delta Chat ooit onafhankelijke beveiligingscontroles ondergaan?</a></li> <li><a href="#security-audits">Heeft Delta Chat ooit onafhankelijke beveiligingscontroles ondergaan?</a></li>
</ul> </ul>
@ -90,7 +87,7 @@
<ul> <ul>
<li><a href="#welke-android-rechten-heeft-delta-chat-nodig">Welke Android-rechten heeft Delta Chat nodig?</a></li> <li><a href="#welke-android-rechten-heeft-delta-chat-nodig">Welke Android-rechten heeft Delta Chat nodig?</a></li>
<li><a href="#wordt-mijn-e-mailprovider-ondersteund-door-delta-chat">Wordt <em>mijn</em> e-mailprovider ondersteund door Delta Chat?</a></li> <li><a href="#wordt-mijn-e-mailprovider-ondersteund-door-delta-chat">Wordt <em>mijn</em> e-mailprovider ondersteund door Delta Chat?</a></li>
<li><a href="#ik-wil-mijn-eigen-e-mailserver-opzetten-hoe-kan-ik-dat-het-beste-doen">Ik wil mijn eigen e-mailserver opzetten. Hoe kan ik dat het beste doen?</a></li> <li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
<li><a href="#waarom-moet-ik-mijn-e-mailwachtwoord-invoeren-in-delta-chat-is-dat-wel-veilig">Waarom moet ik mijn e-mailwachtwoord invoeren in Delta Chat? Is dat wel veilig?</a></li> <li><a href="#waarom-moet-ik-mijn-e-mailwachtwoord-invoeren-in-delta-chat-is-dat-wel-veilig">Waarom moet ik mijn e-mailwachtwoord invoeren in Delta Chat? Is dat wel veilig?</a></li>
<li><a href="#welke-berichten-vind-ik-terug-in-delta-chat">Welke berichten vind ik terug in Delta Chat?</a></li> <li><a href="#welke-berichten-vind-ik-terug-in-delta-chat">Welke berichten vind ik terug in Delta Chat?</a></li>
<li><a href="#ondersteunt-delta-chat-html-e-mails">Ondersteunt Delta Chat HTML-e-mails?</a></li> <li><a href="#ondersteunt-delta-chat-html-e-mails">Ondersteunt Delta Chat HTML-e-mails?</a></li>
@ -719,10 +716,10 @@ that achieves “instant delivery” of messages for all chatmail servers
including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>. including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>.
Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p> Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p>
<h2 id="beveiliging-en-versleuteling"> <h2 id="e2ee">
Beveiliging en versleuteling <a href="#beveiliging-en-versleuteling" class="anchor"></a> Beveiliging en versleuteling <a href="#e2ee" class="anchor"></a>
</h2> </h2>
@ -735,18 +732,26 @@ Welcome to the power of the interoperable and massive chatmail and e-mail system
</h3> </h3>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically <p>Delta Chat uses a <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>
establishing end-to-end encryption with contacts and group chats. to provide automatic end-to-end encryption using these protocols:</p>
Autocrypt uses a limited and <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>.
End-to-End encrypted messages are marked with a padlock
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../lock-icon.png" alt="padlock" />.</p>
<p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a> <ul>
are used for establishing chats with guaranteed end-to-end encryption <li>
which protects against network attacks and compromised servers. <p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join</a>
Chats marked with a green checkmark to exchange encryption setup information through QR-code scanning or “invite links”.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> </li>
guarantee end-to-end encrypted messages.</p> <li>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically
establishing end-to-end encryption between contacts and all members of a group chat.</p>
</li>
<li>
<p><a href="https://github.com/chatmail/core/blob/main/spec.md#attaching-a-contact-to-a-message">Sharing a contact to a
chat</a>
enables receivers to use end-to-end encryption with the contact.</p>
</li>
</ul>
<p>Delta Chat does not query, publish or interact with any OpenPGP key servers.</p>
<h3 id="whene2e"> <h3 id="whene2e">
@ -756,28 +761,37 @@ guarantee end-to-end encrypted messages.</p>
</h3> </h3>
<p>All end-to-end encrypted messages carry a padlock:</p> <p>All messages in Delta Chat are <strong>end-to-end encrypted by default</strong>.
Since the Delta Chat Version 2 release series (July 2025)
there are no lock or similar markers on end-to-end encrypted messages, anymore.</p>
<p><img style="width:160px; margin:1px" src="../lock-screenshot.png" alt="padlock in bubble" /></p> <h3 id="can-i-still-receive-or-send-mails-without-end-to-end-encryption">
<p>End-to-end encryption is guaranteed if there is a green checkmark next to the chat title:</p>
<p><img style="width:211px; margin:1px" src="../green-checkmark-screenshot.png" alt="green checkmark in title" /></p>
<h3 id="howtoe2ee">
How can I get guaranteed end-to-end encryption and green checkmarks? <a href="#howtoe2ee" class="anchor"></a> Can i still receive or send mails without end-to-end encryption? <a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption" class="anchor"></a>
</h3> </h3>
<p>If you have a second communication channel with your chat partner, <p>If you use default <a href="https://chatmail.at/relays">chatmail relays</a>,
like a video chat or a different messenger, it is impossible to receive or send messages without end-to-end encryption.</p>
you can generate an invite link.</p>
<p>If you are together in person, <p>If you instead create a profile using a classic e-mail server,
you can show a QR code to your chat partner.</p> you can send and receive messages without end-to-end encryption.
Such messages lacking end-to-end encryption are marked with an e-mail icon
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
<h3 id="howtoe2ee">
How can I establish a chat with a new contact? <a href="#howtoe2ee" class="anchor"></a>
</h3>
<p>You can send an invite link through another private chat,
show an invitation QR code when next to each other or in a video call,
or click on a “contact” that was shared in a chat.</p>
<ul> <ul>
<li> <li>
@ -792,135 +806,54 @@ on the Delta Chat app main screen.</p>
</li> </li>
</ul> </ul>
<p>Let your chat partner scan the QR image <p>Ask your chat partner to scan the QR image
with their Delta Chat app, with their Delta Chat app,
or click “Copy” or “Share” to create an invite link or click “Copy” or “Share” to create an invite link
and share it with your chat partner.</p> and share it with your chat partner.</p>
<p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">Secure-Join network messages are exchanged</a> between both devices.</p> <p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">end-to-end encryption is getting established</a>.</p>
<ul> <ul>
<li> <li>
<p>If both devices are online, <p>If both sides are online, they will soon see a (group or direct) chat
both sides will eventually see a (group or direct) chat with a green checkmark and can start messaging securely.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
next to the title.</p>
</li> </li>
<li> <li>
<p>If one of the devices is offline, the green checkmarks will only <p>If one side is offline or in bad network,
appear later when the device is internet-connected again the ability to chat is delayed until connectivity is restored.</p>
and the Secure-Join network protocol completed.</p>
</li> </li>
</ul> </ul>
<p>Congratulations! <p>Congratulations!
You now will automatically use guaranteed end-to-end encryption You now will automatically use end-to-end encryption
with this contact and both of you can add each other to green-checkmarked groups with this contact.
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />, If you add each other to chat groups,
thereby automatically spreading guaranteed end-to-end encryption among its members.</p> end-to-end encryption will be established among all members.</p>
<h3 id="e2eeguarantee"> <h3 id="e2eeguarantee">
What does the green checkmark and “guaranteed end-to-end encryption” mean? <a href="#e2eeguarantee" class="anchor"></a> What does the green checkmark in a contact profile mean? <a href="#e2eeguarantee" class="anchor"></a>
</h3> </h3>
<p>Chat titles with green checkmarks <p>A contact profile might show a green checkmark
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
mean that all messages in the chat will be end-to-end encrypted and an “Introduced by” line.
and can not be read or altered by compromised e-mail servers or Internet providers.
Joining green-checkmarked group chats
safely spreads everybodys encryption information (and green checkmarks)
in a manner that guarantees end-to-end encryption in the group and among members.</p>
<p>Contact profiles with green checkmarks
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
mean that messaging a contact is currently guaranteed to be end-to-end encrypted.
Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you
or was introduced by a another green-checkmarked contact. or was introduced by a another green-checkmarked contact.
Introductions happen automatically when adding members to groups. Introductions happen automatically when adding members to groups.
Whoever adds a contact to a green-checkmarked group becomes an introducer Whoever adds a green-checkmarked contact to a group with only green-checkmarked members
to those members who didnt yet know about the added contact. becomes an introducer.
In a contact profile you can tap on the “Introduced by …” text repeatedly In a contact profile you can tap on the “Introduced by …” text repeatedly
until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p> until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p>
<p>Note that in a contact profile you may see and tap introducers
but there is no green checkmark in the profile title.
This usually means that the contact <a href="#nocryptanymore">“sent a message from another device”</a>.</p>
<p>For more in-depth discussion of “guaranteed end-to-end encryption” <p>For more in-depth discussion of “guaranteed end-to-end encryption”
please see <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a> please see <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a>
and specifically read about “Verified Groups”, the technical term and specifically read about “Verified Groups”, the technical term
of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.</p> of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.</p>
<h3 id="nocryptanymore">
A contact “sent a message from another device”, what can i do? <a href="#nocryptanymore" class="anchor"></a>
</h3>
<p>Your chat with a contact lost guaranteed end-to-end encryption.
The green checkmark was removed for this chat and contact when you see this warning.
<strong>If you find the sudden drop of guaranteed end-to-end encryption
surprising for this contact then dont accept the warning!</strong>
Instead check with your contact through a second channel
like a video call, other messenger or a phone call,
to find out what happened.</p>
<p>If your contact actually caused the drop of guaranteed end-to-end encryption
please see the next paragraphs for common reasons and their mitigations.
Regardless, all other green-checkmarked chats remain guaranteed end-to-end encrypted
even if the contact is a member there.</p>
<p><strong>Your contact is using Delta Chat on a second device (phone or laptop)</strong></p>
<p>If they have another device with a Delta Chat app running,
they should remove the profile from the new device
and add it <a href="#multiclient">as a second device as described here</a>.
As soon as they message you afterwards, the warning will be gone
and guaranteed encryption is established with both devices of your contact.</p>
<p><strong>Your contact reinstalled Delta Chat using their old account login</strong></p>
<p>If they have <a href="#backup">a backup file</a>,
they should remove the profile from the new device
and rather import the backup file to re-create their profile.
As soon as they message you afterwards, the warning will be gone
and guaranteed encryption is re-established for this contact.</p>
<p>If they dont have a backup file, its best to perform a <a href="#howtoe2ee">QR scan</a>
with your chat partner to re-establish guaranteed end-to-end encryption.</p>
<p><strong>Your contact sent a mail through a webmail interface or another e-mail app
and will get back to using Delta Chat soon again.</strong></p>
<p>If you are sure that the contact sometimes uses webmail,
or another mail app lacking end-to-end encryption,
then you may accept the warning.
As soon as your contact uses Delta Chat again,
guaranteed end-to-end encryption will be automatically re-established.</p>
<p><strong>Your contact stopped using Delta Chat entirely</strong></p>
<p>Sometimes remaining in contact is more important than end-to-end encryption.
<a href="#tls">“Transport Layer Encryption” (TLS)</a> may still meaningfully protect
the confidentiality of your messages between your device and the e-mail server.
But without end-to-end encryption you and your contact are trusting your e-mail server
to not read or manipulate your messages, and to not hand them to third parties.</p>
<p>In any case, you can not do much else than accept the warning.
Please also remove the contact from any active green-checkmarked group
which you can find in “Shared chats” in the Contact profile.
This spares your contact from getting “unreadable” messages.</p>
<p>If the contact removed Delta Chat because of buggy or undesirable behaviour,
please consider posting to our <a href="https://support.delta.chat">support forum</a>
to help us identify and address common problems. Thanks!</p>
<h3 id="are-attachments-pictures-files-audio-etc-end-to-end-encrypted"> <h3 id="are-attachments-pictures-files-audio-etc-end-to-end-encrypted">
@ -945,8 +878,7 @@ and attachment metadata such as filenames.</p>
</h3> </h3>
<p>Yes, Delta Chat uses a secure subset of OpenPGP <p>Yes, Delta Chat uses a secure subset of OpenPGP
and only displays a padlock security indicator on a message requiring the whole message to be properly encrypted and signed.
if the whole message is properly encrypted and signed.
For example, “Detached signatures” are not treated as secure.</p> For example, “Detached signatures” are not treated as secure.</p>
<p>OpenPGP is not insecure by itself. <p>OpenPGP is not insecure by itself.
@ -967,7 +899,7 @@ which was thankfully adopted in summer 2023.</p>
<h3 id="openpgp-alternatives"> <h3 id="openpgp-alternatives">
Did you consider using alternatives to OpenPGP for end-to-end -encryption? <a href="#openpgp-alternatives" class="anchor"></a> Did you consider using alternatives to OpenPGP for end-to-end-encryption? <a href="#openpgp-alternatives" class="anchor"></a>
</h3> </h3>
@ -1010,17 +942,15 @@ as defined by the Autocrypt Level 1 specification.</p>
<h3 id="tls"> <h3 id="tls">
Is a message exposed in cleartext if end-to-end encryption is not available? <a href="#tls" class="anchor"></a> Are messages marked with the mail icon exposed on the Internet? <a href="#tls" class="anchor"></a>
</h3> </h3>
<p>Even if your messages are not guaranteed to be end-to-end encrypted, <p>If you are sending or receiving e-mail messages without end-to-end encryption (using a classic e-mail server),
they are still protected from Internet providers like cell or cable companies. they are still protected from cell or cable companies who can not read or modify your e-mail messages.
However, your and your recipients e-mail providers But both your and your recipients e-mail providers
may read, analyze or even modify your messages, may read, analyze or modify your messages, including any attachments.</p>
including any attachments,
if they are not end-to-end encrypted.</p>
<p>Delta Chat by default uses strict <p>Delta Chat by default uses strict
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a> <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a>
@ -1033,10 +963,6 @@ then transport encryption will be enforced between e-mail providers
in which case Delta Chat communications will never be exposed in cleartext to the Internet in which case Delta Chat communications will never be exposed in cleartext to the Internet
even if the message was not end-to-end encrypted.</p> even if the message was not end-to-end encrypted.</p>
<p>Note that <a href="#howtoe2ee">maintaining guaranteed end-to-end encryption</a> on top of TLS encryption
provides pervasive safety between your and the recipients devices.
Not even your e-mail or Internet provider will be able to read or modify your messages.</p>
<h3 id="message-metadata"> <h3 id="message-metadata">
@ -1045,25 +971,25 @@ Not even your e-mail or Internet provider will be able to read or modify your me
</h3> </h3>
<p>Delta Chat protects most message metadata by putting the following information <p>Unlike most other messengers,
into the end-to-end encrypted part of messages:</p> Delta Chat apps do not store any metadata about contacts or groups on servers, also not in encrypted form.
Instead, all group metadata is end-to-end encrypted and stored on end-user devices, only.</p>
<p>E-mail Servers can therefore only see</p>
<ul> <ul>
<li>Subject line</li> <li>
<li>Group avatar and name</li> <p>the message date,</p>
<li>MDN (read receipt) requests (<code class="language-plaintext highlighter-rouge">Chat-Disposition-Notification-To</code>)</li> </li>
<li>Disappearing message timer (<code class="language-plaintext highlighter-rouge">Ephemeral-Timer</code>)</li> <li>
<li><code class="language-plaintext highlighter-rouge">Chat-Group-Member-Removed</code>, <code class="language-plaintext highlighter-rouge">Chat-Group-Member-Added</code></li> <p>sender and receiver addresses</p>
<li><code class="language-plaintext highlighter-rouge">Secure-Join</code> header containing secure join commands</li> </li>
<li>Notification about enabling location streaming</li> <li>
<li>WebRTC room URL</li> <p>and message size.</p>
</li>
</ul> </ul>
<p>E-Mail servers do not get access to this protected metadata <p>All other message, contact and group metadata resides in the end-to-end encrypted part of messages.</p>
but they do see the message date as well as the message size,
and, more importantly, the sender and receiver addresses.
E-mail servers need receiver addresses to route and
deliver messages to recipients devices.</p>
<h3 id="device-seizure"> <h3 id="device-seizure">
@ -1075,96 +1001,34 @@ deliver messages to recipients devices.</p>
<p>Both for protecting against metadata-collecting e-mail servers <p>Both for protecting against metadata-collecting e-mail servers
as well as against the threat of device seizure as well as against the threat of device seizure
we recommend to use a <a href="https://delta.chat/chatmail">chatmail server</a> we recommend to use a <a href="https://chatmail.at/relays">chatmail relay</a>
to create pseudonymous temporary profiles through QR-code scans. to create chat profiles using random e-mail addresses for transport.
Note that Delta Chat apps on all platforms support multiple profiles Note that Delta Chat apps on all platforms support multiple profiles
so you can easily use situation-specific profiles next to your “main” profile so you can easily use situation-specific profiles next to your “main” profile
with the knowledge that all their data, along with all metadata, will be deleted. with the knowledge that all their data, along with all metadata, will be deleted.
Moreover, if a device is seized then contacts using temporary profiles Moreover, if a device is seized then chat contacts using short-lived profiles
can not be identified easily, as compared to messengers which reveal can not be identified easily.</p>
phone numbers in chat groups which in turn are often associated with legal identities.</p>
<h3 id="how-can-i-check-encryption-information"> <h3 id="sealedsender">
How can i check encryption information? <a href="#how-can-i-check-encryption-information" class="anchor"></a> Does Delta Chat support “Sealed Sender”? <a href="#sealedsender" class="anchor"></a>
</h3> </h3>
<p>You may check the end-to-end encryption status manually in the “Encryption” dialog <p>No, not yet.</p>
(user profile on Android/iOS or right-click a users chat-list item on desktop).
Delta Chat shows two fingerprints there.
If the same fingerprints appear on your own and your contacts device,
the connection is safe.</p>
<h3 id="how-can-i-check-the-encryption-status-of-messages"> <p>The Signal messenger introduced <a href="https://signal.org/blog/sealed-sender/">“Sealed Sender” in 2018</a>
to keep their server infrastructure ignorant of who is sending a message to a set of recipients.
It is particularly important because the Signal server knows the mobile number of each account,
which is usually associated with a passport identity.</p>
<p>Even if <a href="https://chatmail.at/relays">chatmail relays</a>
How can I check the encryption status of messages? <a href="#how-can-i-check-the-encryption-status-of-messages" class="anchor"></a> do not ask for any private data (including no phone numbers),
it might still be worthwhile to protect relational metadata between addresses.
We dont foresee bigger problems in using random throw-away e-mail addresses for sealed sending
</h3> but an implementation has not been agreed as a priority yet.</p>
<p>A little <strong>padlock</strong> in a message bubble denotes
that the message was properly end-to-end encrypted from the given sender.
If there is <strong>no padlock</strong>, the message was not properly end-to-end encrypted
most likely because the sender uses an app or webmail interface
without support for end-to-endencryption.</p>
<h3 id="why-do-i-see-unencrypted-messages">
Why do I see unencrypted messages? <a href="#why-do-i-see-unencrypted-messages" class="anchor"></a>
</h3>
<p>If a contact uses a non-Autocrypt e-mail app,
all messages involving this contact (in a group or 1:1 chat)
will not be end-to-end encrypted, and thus not show a “padlock” with messages.
Note that even if your contacts use Delta Chat on their account,
they might also use a non-Autocrypt e-mail app on that account
which then may cause intermittently unencrypted messages.
Replying unencrypted to unencrypted messages is mandated by Autocrypt
to prevent unreadable messages on the side of your contacts
and their non-Autocrypt e-mail app.</p>
<h3 id="how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app">
How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app? <a href="#how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app" class="anchor"></a>
</h3>
<p>If you need a safely end-to-end encrypted chat with a contact
who is using their e-mail account both with Delta Chat and non-Autocrypt apps (e.g. webmail),
its best to setup <a href="#howtoe2ee">guaranteed end-to-end encryption with them</a>
and then create a guaranteed end-to-end encrypted group chat with you two as members.
In this group chat all messages will be end-to-end encrypted
even if the direct chat between you two has a
<a href="#nocryptanymore">“… sent a message from another device”</a> warning.</p>
<h3 id="how-can-i-ensure-message-end-to-end-encryption-and-deletion">
How can I ensure message end-to-end encryption and deletion? <a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion" class="anchor"></a>
</h3>
<p>The best way to ensure every message is end-to-end encrypted,
and metadata deleted as quickly as possible
is <a href="#howtoe2ee">using chats with guaranteed end-to-end encryption</a>
and turning on <a href="#ephemeralmsgs">disappearing messages</a>.</p>
<p>Guaranteed end-to-end encrypted chats protect against <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM attacks</a>
and turning on disappearing messages deletes the messages
on the server after a user-configured time.</p>
<p>If you dont need a longer-lived copy of your messages on the server,
you can also turn on <a href="#delold">“delete messages from server automatically”</a>.</p>
<h3 id="pfs"> <h3 id="pfs">
@ -1174,45 +1038,52 @@ you can also turn on <a href="#delold">“delete messages from server automatica
</h3> </h3>
<p>No, Delta Chat doesnt support Perfect Forward Secrecy (PFS). <p>No, not yet.</p>
This means that if your Delta Chat private decryption key is leaked,
<p>Delta Chat today doesnt support Perfect Forward Secrecy (PFS).
This means that if your private decryption key is leaked,
and someone has collected your prior in-transit messages, and someone has collected your prior in-transit messages,
they will be able to decrypt and read them using the leaked decryption key.</p> they will be able to decrypt and read them using the leaked decryption key.
Note that Forward Secrecy only increases security if you delete messages.
Otherwise, someone obtaining your decryption keys
is typically also able to get all your non-deleted messages
and doesnt even need to decrypt any previously collected messages.</p>
<p>Note, however, that if anyone obtains to your decryption keys, <p>We designed a Forward Secrecy approach that withstood
they will typically also be able to obtain your messages, initial examination from some cryptographers and implementation experts
irrespective if Perfect Forward Secrecy is in place or not. but is pending a more formal write up
The typical real-world situation for leaked decryption keys is device seizure to ascertain it reliably works in federated messaging and with multi-device usage,
which we discuss in our answer <a href="#device-seizure">on metadata and device seizure</a>.</p> before it could be implemented in <a href="https://github.com/chatmail/core">chatmail core</a>,
which would make it available in all <a href="https://chatmail.at/clients">chatmail clients</a>.</p>
<p>It is possible that Delta Chat evolves to support Perfect Forward Secrecy, <h3 id="pqc">
because OpenPGP is just a container for encrypted messages
but encryption key management (and thus key rotation or key “ratcheting”)
could be organized in flexible ways.
See <a href="https://gitlab.com/sequoia-pgp/openpgp-dr">Seqouias PFS prototype</a>
for existing experiments in the OpenPGP implementor community.</p>
<h3 id="is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">
Is end-to-end encryption of Delta Chat as safe as Signal? <a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal" class="anchor"></a> Does Delta Chat support Post-Quantum-Cryptography? <a href="#pqc" class="anchor"></a>
</h3> </h3>
<p>It depends on what is important to you. <p>No, not yet.</p>
Delta Chat <a href="#pfs">does not support PFS</a> like Signal does
but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</a>
that are safe against compromised servers or corrupted networks.
Signal and most other PFS-supporting messengers do not provide
a practical scheme for protecting chat groups from network attacks
which are arguably more worrisome
than a potential attacker who seizes your phone and private encryption setup
but somehow not your messages, yet has a full record of all
past encrypted messages.</p>
<p>In any case, Delta Chats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a> <p>Delta Chat uses the Rust OpenPGP library <a href="https://github.com/rpgp/rpgp">rPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p> which supports the latest <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/">IETF Post-Quantum-Cryptography OpenPGP draft</a>.
We aim to add PQC support in <a href="https://github.com/chatmail/core">chatmail core</a> after the draft is finalized at the IETF
in collaboration with other OpenPGP implementers.</p>
<h3 id="how-can-i-manually-check-encryption-information">
How can I manually check encryption information? <a href="#how-can-i-manually-check-encryption-information" class="anchor"></a>
</h3>
<p>You may check the end-to-end encryption status manually in the “Encryption” dialog
(user profile on Android/iOS or right-click a users chat-list item on desktop).
Delta Chat shows two fingerprints there.
If the same fingerprints appear on your own and your contacts device,
the connection is safe.</p>
<h3 id="importkey"> <h3 id="importkey">
@ -1247,7 +1118,7 @@ from most recent to older:</p>
<li> <li>
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of <p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place. rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat. rPGP serves as the end-to-end encryption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
Two advisories were released related to the findings of this audit:</p> Two advisories were released related to the findings of this audit:</p>
<ul> <ul>
@ -1493,9 +1364,10 @@ copies on the devices of your chat partners. Other than that, its completely
isolated from the Internet.</li> isolated from the Internet.</li>
<li>The privacy a webxdc app offers is the privacy of your chat - as long as you <li>The privacy a webxdc app offers is the privacy of your chat - as long as you
trust the people you chat with, you can trust the webxdc app as well.</li> trust the people you chat with, you can trust the webxdc app as well.</li>
<li>This also means: it can be a privacy risk to open webxdc apps in chats where <li>This also means: it can be a privacy risk to open apps in chats with untrusted members.
you dont trust the members - as you know it from e-mail attachments, where Just like with e-mail attachments, video calls or plain links:
you only open attachments from senders you trust, and not from spammers.</li> open them only from senders you trust, and not from spammers.
Spammers can get to know any data you send to them, as well as your IP address.</li>
</ul> </ul>
<h3 id="where-can-i-get-webxdc-apps"> <h3 id="where-can-i-get-webxdc-apps">
@ -1579,21 +1451,10 @@ zodat er telkens een nieuwe jitsi-kamer als je iemand belt.</li>
</h3> </h3>
<ul> <p>With a Broadcast List you can send a message to many recipients at once;
<li>Met behulp van verzendlijsten kun je berichten naar meerdere ontvangers tegelijk versturen. Als zij vervolgens the recipients cannot reply in that list.
antwoorden, dan wordt het antwoord in het een-op-eengesprek getoond. De Broadcast lists are still highly experimental
ontvangers kunnen elkaar niet zien.</li> and will very probably be replaced by something else, stay tuned :)</p>
<li>Technisch gezien is een verzendlijst een e-mail met meerdere ontvangers in de bcc.</li>
<li>Schakel deze functie in in de sectie experimentele functies in de
geavanceerde instellingen. Vervolgens kun je in het venster Nieuw gesprek een verzendlijst
samenstellen.</li>
<li>Let op: als je gebruikmaakt van meer dan één apparaat, dan worden verzendlijsten momenteel
niet gesynchroniseerd.</li>
<li>Ook zijn zulke berichten niet versleuteld. Versleuteling zou immers de
anonimiteit doorbreken omdat iedereen van elkaar kan zien wie de berichten ontvangt.
(En het versturen van meerdere individuele e-mails tegelijk zou funest zijn voor de beperkingen van sommige e-maildiensten en het
netwerkverbruik).</li>
</ul>
<h3 id="hoe-kan-ik-mijn-locatie-delen-met-anderen"> <h3 id="hoe-kan-ik-mijn-locatie-delen-met-anderen">
@ -1650,6 +1511,11 @@ Normaal doet de Delta Chat-app dit uit zichzelf.</p>
</h3> </h3>
<p>Note:
Changing email addresses is temporarily disabled
because of ongoing changes to the DeltaChat core.
It should be available again in a few months.</p>
<ol> <ol>
<li> <li>
<p>Change your address in “Settings → Advanced → Password and Account” and <p>Change your address in “Settings → Advanced → Password and Account” and
@ -1751,19 +1617,19 @@ Delta Chat doet het volgende met deze rechten:</p>
Sommige providers verwachten echter bepaalde opties. Bekijk hiervoor het <a href="https://providers.delta.chat">provideroverzicht</a></li> Sommige providers verwachten echter bepaalde opties. Bekijk hiervoor het <a href="https://providers.delta.chat">provideroverzicht</a></li>
</ul> </ul>
<h3 id="ik-wil-mijn-eigen-e-mailserver-opzetten-hoe-kan-ik-dat-het-beste-doen"> <h3 id="i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">
Ik wil mijn eigen e-mailserver opzetten. Hoe kan ik dat het beste doen? <a href="#ik-wil-mijn-eigen-e-mailserver-opzetten-hoe-kan-ik-dat-het-beste-doen" class="anchor"></a> I want to manage my own server for Delta Chat. What do you recommend? <a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend" class="anchor"></a>
</h3> </h3>
<ul> <ul>
<li>De meeste e-mailservers werken prima, maar wij raden een <li>Most mail servers will work well. But what we personally recommend is a
combinatie van mailcow en mailadm aan, zoals uitgelegd op <a href="https://delta.chat/en/2023-01-27-upcoming-mail-server-workshops">ons chatmail relay server, as described <a href="https://delta.chat/en/2023-12-13-chatmail">in this
blog</a>.</li> blogpost</a>.</li>
<li>In de <a href="https://delta.chat/nl/serverguide">installatiehandleiding op onze website</a> lees je hoe je dit opzet.</li> <li>You can find an <a href="https://github.com/chatmail/relay">installation guide on GitHub</a>.</li>
</ul> </ul>
<h3 id="waarom-moet-ik-mijn-e-mailwachtwoord-invoeren-in-delta-chat-is-dat-wel-veilig"> <h3 id="waarom-moet-ik-mijn-e-mailwachtwoord-invoeren-in-delta-chat-is-dat-wel-veilig">

View file

@ -36,27 +36,24 @@
<li><a href="#dlaczego-delta-chat-integruje-się-ze-scentralizowanymi-zastrzeżonymi-usługami-push-applegoogle">Dlaczego Delta Chat integruje się ze scentralizowanymi, zastrzeżonymi usługami push Apple/Google?</a></li> <li><a href="#dlaczego-delta-chat-integruje-się-ze-scentralizowanymi-zastrzeżonymi-usługami-push-applegoogle">Dlaczego Delta Chat integruje się ze scentralizowanymi, zastrzeżonymi usługami push Apple/Google?</a></li>
</ul> </ul>
</li> </li>
<li><a href="#szyfrowanie-i-bezpieczeństwo">Szyfrowanie i bezpieczeństwo</a> <li><a href="#e2ee">Szyfrowanie i bezpieczeństwo</a>
<ul> <ul>
<li><a href="#jakie-standardy-są-stosowane-do-szyfrowania-end-to-end">Jakie standardy są stosowane do szyfrowania end-to-end?</a></li> <li><a href="#jakie-standardy-są-stosowane-do-szyfrowania-end-to-end">Jakie standardy są stosowane do szyfrowania end-to-end?</a></li>
<li><a href="#whene2e">Skąd mogę wiedzieć, czy wiadomości są szyfrowane metodą e2e?</a></li> <li><a href="#whene2e">Skąd mogę wiedzieć, czy wiadomości są szyfrowane metodą e2e?</a></li>
<li><a href="#howtoe2ee">Jak mogę uzyskać gwarancję kompleksowego szyfrowania i zielone znaczniki wyboru?</a></li> <li><a href="#czy-nadal-mogę-odbierać-lub-wysyłać-wiadomości-bez-szyfrowania-end-to-end">Czy nadal mogę odbierać lub wysyłać wiadomości bez szyfrowania end-to-end?</a></li>
<li><a href="#e2eeguarantee">Co oznacza zielony znacznik wyboru i „gwarantowane kompleksowe szyfrowanie”?</a></li> <li><a href="#howtoe2ee">Jak mogę nawiązać czat z nowym kontaktem?</a></li>
<li><a href="#nocryptanymore">Kontakt „wysłał wiadomość z innego urządzenia”, co mogę zrobić?</a></li> <li><a href="#e2eeguarantee">Co oznacza zielony znacznik wyboru w profilu kontaktu?</a></li>
<li><a href="#czy-załączniki-zdjęcia-pliki-pliki-audio-itp-są-szyfrowane-metodą-end-to-end">Czy załączniki (zdjęcia, pliki, pliki audio itp.) są szyfrowane metodą end-to-end?</a></li> <li><a href="#czy-załączniki-zdjęcia-pliki-pliki-audio-itp-są-szyfrowane-metodą-end-to-end">Czy załączniki (zdjęcia, pliki, pliki audio itp.) są szyfrowane metodą end-to-end?</a></li>
<li><a href="#openpgp-secure">Czy OpenPGP jest bezpieczny?</a></li> <li><a href="#openpgp-secure">Czy OpenPGP jest bezpieczny?</a></li>
<li><a href="#openpgp-alternatives">Czy rozważałeś użycie alternatyw dla OpenPGP do szyfrowania typu end-to-end?</a></li> <li><a href="#openpgp-alternatives">Czy rozważałeś użycie alternatyw dla OpenPGP do szyfrowania typu end-to-end?</a></li>
<li><a href="#czy-delta-chat-jest-podatny-na-efail">Czy Delta Chat jest podatny na EFAIL?</a></li> <li><a href="#czy-delta-chat-jest-podatny-na-efail">Czy Delta Chat jest podatny na EFAIL?</a></li>
<li><a href="#tls">Czy wiadomość jest udostępniana w postaci zwykłego tekstu, jeśli szyfrowanie end-to-end nie jest dostępne?</a></li> <li><a href="#tls">Czy wiadomości oznaczone ikoną poczty są widoczne w internecie?</a></li>
<li><a href="#message-metadata">W jaki sposób Delta Chat chroni metadane w wiadomościach?</a></li> <li><a href="#message-metadata">W jaki sposób Delta Chat chroni metadane w wiadomościach?</a></li>
<li><a href="#device-seizure">Jak chronić metadane i kontakty w przypadku przejęcia urządzenia?</a></li> <li><a href="#device-seizure">Jak chronić metadane i kontakty w przypadku przejęcia urządzenia?</a></li>
<li><a href="#jak-mogę-sprawdzić-informacje-o-szyfrowaniu">Jak mogę sprawdzić informacje o szyfrowaniu?</a></li> <li><a href="#sealedsender">Czy Delta Chat obsługuje funkcję „Sealed Sender”?</a></li>
<li><a href="#jak-mogę-sprawdzić-stan-szyfrowania-wiadomości">Jak mogę sprawdzić stan szyfrowania wiadomości?</a></li>
<li><a href="#dlaczego-widzę-niezaszyfrowane-wiadomości">Dlaczego widzę niezaszyfrowane wiadomości?</a></li>
<li><a href="#jak-mogę-uzyskać-zaszyfrowany-ened-to-end-czat-z-kontaktem-delta-chat-który-czasami-korzysta-z-poczty-internetowej-lub-innej-aplikacji-e-mail-bez-autocrypt">Jak mogę uzyskać zaszyfrowany ened-to-end czat z kontaktem Delta Chat, który czasami korzysta z poczty internetowej lub innej aplikacji e-mail bez Autocrypt?</a></li>
<li><a href="#jak-mogę-zapewnić-kompleksowe-szyfrowanie-i-usuwanie-wiadomości">Jak mogę zapewnić kompleksowe szyfrowanie i usuwanie wiadomości?</a></li>
<li><a href="#pfs">Czy Delta Chat obsługuje funkcję Perfect Forward Secrecy?</a></li> <li><a href="#pfs">Czy Delta Chat obsługuje funkcję Perfect Forward Secrecy?</a></li>
<li><a href="#czy-szyfrowanie-end-to-end-delta-chat-jest-tak-samo-bezpieczne-jak-signal">Czy szyfrowanie end-to-end Delta Chat jest tak samo bezpieczne jak Signal?</a></li> <li><a href="#pqc">Czy Delta Chat obsługuje kryptografię postkwantową?</a></li>
<li><a href="#jak-mogę-ręcznie-sprawdzić-informacje-o-szyfrowaniu">Jak mogę ręcznie sprawdzić informacje o szyfrowaniu?</a></li>
<li><a href="#importkey">Czy mogę ponownie wykorzystać mój istniejący klucz prywatny?</a></li> <li><a href="#importkey">Czy mogę ponownie wykorzystać mój istniejący klucz prywatny?</a></li>
<li><a href="#security-audits">Czy Delta Chat był niezależnie kontrolowany pod kątem luk w zabezpieczeniach?</a></li> <li><a href="#security-audits">Czy Delta Chat był niezależnie kontrolowany pod kątem luk w zabezpieczeniach?</a></li>
</ul> </ul>
@ -90,7 +87,7 @@
<ul> <ul>
<li><a href="#jakich-uprawnień-potrzebuje-delta-chat">Jakich uprawnień potrzebuje Delta Chat?</a></li> <li><a href="#jakich-uprawnień-potrzebuje-delta-chat">Jakich uprawnień potrzebuje Delta Chat?</a></li>
<li><a href="#czy-delta-chat-działa-z-moim-dostawcą-poczty-e-mail">Czy Delta Chat działa z <em>moim</em> dostawcą poczty e-mail?</a></li> <li><a href="#czy-delta-chat-działa-z-moim-dostawcą-poczty-e-mail">Czy Delta Chat działa z <em>moim</em> dostawcą poczty e-mail?</a></li>
<li><a href="#chcę-zarządzać-własnym-serwerem-e-mail-dla-delta-chat-co-polecacie">Chcę zarządzać własnym serwerem e-mail dla Delta Chat. Co polecacie?</a></li> <li><a href="#chcę-zarządzać-własnym-serwerem-dla-delta-chat-co-polecacie">Chcę zarządzać własnym serwerem dla Delta Chat. Co polecacie?</a></li>
<li><a href="#dlaczego-muszę-wpisać-moje-hasło-e-mail-do-delta-chat-czy-to-jest-bezpieczne">Dlaczego muszę wpisać moje hasło e-mail do Delta Chat? Czy to jest bezpieczne?</a></li> <li><a href="#dlaczego-muszę-wpisać-moje-hasło-e-mail-do-delta-chat-czy-to-jest-bezpieczne">Dlaczego muszę wpisać moje hasło e-mail do Delta Chat? Czy to jest bezpieczne?</a></li>
<li><a href="#jakie-wiadomości-pojawiają-się-w-delta-chat">Jakie wiadomości pojawiają się w Delta Chat?</a></li> <li><a href="#jakie-wiadomości-pojawiają-się-w-delta-chat">Jakie wiadomości pojawiają się w Delta Chat?</a></li>
<li><a href="#czy-delta-chat-obsługuje-wiadomości-e-mail-w-formacie-html">Czy Delta Chat obsługuje wiadomości e-mail w formacie HTML?</a></li> <li><a href="#czy-delta-chat-obsługuje-wiadomości-e-mail-w-formacie-html">Czy Delta Chat obsługuje wiadomości e-mail w formacie HTML?</a></li>
@ -589,10 +586,10 @@ nadal będziesz mógł pisać, ale nie będziesz już powiadamiany o żadnych no
<p>Pamiętaj, że Delta Chat posiada <a href="#privacy-notifications">mały i chroniący prywatność system powiadomień push</a>, który zapewnia „natychmiastowe dostarczanie” wiadomości ze wszystkich serwerów chatmail, w tym potencjalnego, który <a href="https://delta.chat/chatmail#selfhosted">możesz skonfigurować samodzielnie bez naszej zgody</a>. Witamy w potędze interoperacyjnego i ogromnego systemu chatmail i e-mail :)</p> <p>Pamiętaj, że Delta Chat posiada <a href="#privacy-notifications">mały i chroniący prywatność system powiadomień push</a>, który zapewnia „natychmiastowe dostarczanie” wiadomości ze wszystkich serwerów chatmail, w tym potencjalnego, który <a href="https://delta.chat/chatmail#selfhosted">możesz skonfigurować samodzielnie bez naszej zgody</a>. Witamy w potędze interoperacyjnego i ogromnego systemu chatmail i e-mail :)</p>
<h2 id="szyfrowanie-i-bezpieczeństwo"> <h2 id="e2ee">
Szyfrowanie i bezpieczeństwo <a href="#szyfrowanie-i-bezpieczeństwo" class="anchor"></a> Szyfrowanie i bezpieczeństwo <a href="#e2ee" class="anchor"></a>
</h2> </h2>
@ -605,9 +602,21 @@ nadal będziesz mógł pisać, ale nie będziesz już powiadamiany o żadnych no
</h3> </h3>
<p><a href="https://autocrypt.org">Autocrypt</a> służy do automatycznego ustanawiania szyfrowania end-to-end kontaktów i czatów grupowych. Autocrypt wykorzystuje ograniczony i <a href="#openpgp-secure">bezpieczny podzbiór standardu OpenPGP</a>. W pełni zaszyfrowane wiadomości są oznaczone kłódką <img style="vertical-align:middle; width:1.2em; margin:1px" src="../lock-icon.png" alt="padlock" />.</p> <p>Delta Chat wykorzystuje <a href="#openpgp-secure">bezpieczny podzbiór standardu OpenPGP</a> do automatycznego szyfrowania typu end-to-end za pomocą następujących protokołów:</p>
<p><a href="https://securejoin.delta.chat/en/latest/new.html">Protokoły Secure-Join</a> służą do nawiązywania rozmów z gwarantowanym szyfrowaniem typu end-to-end, które chroni przed atakami sieciowymi i zagrożonymi serwerami. Czaty oznaczone zielonym znacznikiem wyboru <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> gwarantują szyfrowanie end-to-end wiadomości.</p> <ul>
<li>
<p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join</a> do wymiany informacji o konfiguracji szyfrowania poprzez skanowanie kodów QR lub „linki zaproszeń”.</p>
</li>
<li>
<p><a href="https://autocrypt.org">Autocrypt</a> służy do automatycznego ustanawiania szyfrowania typu end-to-end między kontaktami a wszystkimi członkami czatu grupowego.</p>
</li>
<li>
<p><a href="https://github.com/chatmail/core/blob/main/spec.md#attaching-a-contact-to-a-message">Udostępnienie kontaktu na czacie</a> umożliwia odbiorcom korzystanie z szyfrowania typu end-to-end z tym kontaktem.</p>
</li>
</ul>
<p>Delta Chat nie wysyła zapytań, nie publikuje ani nie wchodzi w interakcję z żadnymi serwerami kluczy OpenPGP.</p>
<h3 id="whene2e"> <h3 id="whene2e">
@ -617,100 +626,66 @@ nadal będziesz mógł pisać, ale nie będziesz już powiadamiany o żadnych no
</h3> </h3>
<p>Wszystkie całkowicie zaszyfrowane wiadomości są oznaczone kłódką:</p> <p>Wszystkie wiadomości w Delta Chat są <strong>domyślnie szyfrowane metodą end-to-end</strong>. Od wydania Delta Chat w wersji 2 (lipiec 2025 r.) nie ma już blokad ani podobnych znaczników na wiadomościach szyfrowanych metodą end-to-end.</p>
<p><img style="width:160px; margin:1px" src="../lock-screenshot.png" alt="padlock in bubble" /></p> <h3 id="czy-nadal-mogę-odbierać-lub-wysyłać-wiadomości-bez-szyfrowania-end-to-end">
<p>Pełne szyfrowanie jest gwarantowane, jeśli obok tytułu czatu znajduje się zielony znacznik wyboru:</p>
<p><img style="width:211px; margin:1px" src="../green-checkmark-screenshot.png" alt="green checkmark in title" /></p>
<h3 id="howtoe2ee">
Jak mogę uzyskać gwarancję kompleksowego szyfrowania i zielone znaczniki wyboru? <a href="#howtoe2ee" class="anchor"></a> Czy nadal mogę odbierać lub wysyłać wiadomości bez szyfrowania end-to-end? <a href="#czy-nadal-mogę-odbierać-lub-wysyłać-wiadomości-bez-szyfrowania-end-to-end" class="anchor"></a>
</h3> </h3>
<p>Jeśli masz drugi kanał komunikacji ze swoim partnerem na czacie, np. czat wideo lub inny komunikator, możesz wygenerować link zaproszenia.</p> <p>Jeśli korzystasz z domyślnych <a href="https://chatmail.at/relays">przekaźników chatmail</a>, odbieranie ani wysyłanie wiadomości bez szyfrowania end-to-end jest niemożliwe.</p>
<p>Jeśli jesteście razem osobiście, możesz pokazać kod QR swojemu rozmówcy.</p> <p>Jeśli zamiast tego utworzysz profil przy użyciu klasycznego serwera poczty e-mail, możesz wysyłać i odbierać wiadomości bez szyfrowania end-to-end. Takie wiadomości bez szyfrowania end-to-end są oznaczone ikoną e-mail <img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
<h3 id="howtoe2ee">
Jak mogę nawiązać czat z nowym kontaktem? <a href="#howtoe2ee" class="anchor"></a>
</h3>
<p>Możesz wysłać link z zaproszeniem za pośrednictwem innego prywatnego czatu, wyświetlić kod QR zaproszenia, gdy kontakty znajdują się obok siebie lub w rozmowie wideo, albo dotknąć „kontakt”, który został udostępniony na czacie.</p>
<ul> <ul>
<li> <li>
<p>W przypadku <strong>zaproszeń grupowych</strong> dotknij tytułu czatu grupy, aby wyświetlić listę jej członków, i wybierz „Kod QR zaproszenia”.</p> <p>W przypadku <strong>zaproszeń grupowych</strong> dotknij tytułu czatu grupy, aby wyświetlić listę jej członków, i wybierz „Kod QR zaproszenia”.</p>
</li> </li>
<li> <li>
<p>Aby uzyskać <strong>bezpośrednie zaproszenia na czat 1:1</strong>, dotknij ikony kodu QR <img style="vertical-align:middle; width:1.8em; margin:1px" src="../qr-icon.png" /> na ekranie głównym aplikacji Delta Chat.</p> <p>Aby <strong>wysłać zaproszenie do czatu 1:1</strong>, dotknij ikony kodu QR <img style="vertical-align:middle; width:1.8em; margin:1px" src="../qr-icon.png" /> na ekranie głównym aplikacji Delta Chat.</p>
</li> </li>
</ul> </ul>
<p>Pozwól swojemu partnerowi czatu zeskanować obraz QR za pomocą aplikacji Delta Chat lub dotknij „Kopiuj” lub „Udostępnij”, aby utworzyć link zaproszenia i udostępnić go swojemu partnerowi czatu.</p> <p>Poproś rozmówcę o zeskanowanie obrazu QR za pomocą aplikacji Delta Chat lub dotknij „Kopiuj” lub „Udostępnij”, aby utworzyć link zaproszenia i udostępnić go rozmówcy.</p>
<p>Teraz poczekaj, aż między obydwoma urządzeniami <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">nastąpi wymiana wiadomości sieciowych Secure-Join</a>.</p> <p>Poczekaj, aż <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">szyfrowanie typu end-to-end zostanie nawiązane</a>.</p>
<ul> <ul>
<li> <li>
<p>Jeśli oba urządzenia są w trybie online, obie strony ostatecznie zobaczą czat (grupowy lub bezpośredni) z zielonym znacznikiem wyboru <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> obok tytułu.</p> <p>Jeśli obie strony są online, wkrótce zobaczą czat (grupowy lub bezpośredni) i będą mogły bezpiecznie wysyłać wiadomości.</p>
</li> </li>
<li> <li>
<p>Jeśli jedno z urządzeń jest w trybie offline, zielone znaczniki wyboru pojawią się później, dopiero gdy urządzenie zostanie ponownie połączone z Internetem i zostanie zrealizowany protokół sieciowy Secure-Join.</p> <p>Jeśli jedna ze stron jest offline lub ma słaby zasięg, możliwość czatowania zostanie wstrzymana do czasu przywrócenia połączenia.</p>
</li> </li>
</ul> </ul>
<p>Gratulacje! Teraz będziecie automatycznie korzystać z gwarantowanego kompleksowego szyfrowania tego kontaktu i oboje będziecie mogli dodawać się nawzajem do grup oznaczonych zielonym znacznikiem wyboru <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> , w ten sposób automatycznie rozpowszechniając gwarantowane kompleksowe szyfrowanie wśród swoich członków.</p> <p>Gratulacje! Teraz będziesz automatycznie korzystać z szyfrowania typu end-to-end dla tego kontaktu. Jeśli dodacie się nawzajem do czatów grupowych, szyfrowanie typu end-to-end zostanie nawiązane między wszystkimi członkami.</p>
<h3 id="e2eeguarantee"> <h3 id="e2eeguarantee">
Co oznacza zielony znacznik wyboru i „gwarantowane kompleksowe szyfrowanie”? <a href="#e2eeguarantee" class="anchor"></a> Co oznacza zielony znacznik wyboru w profilu kontaktu? <a href="#e2eeguarantee" class="anchor"></a>
</h3> </h3>
<p>Tytuły czatów z zielonymi znacznikami wyboru <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> oznaczają, że wszystkie wiadomości na czacie będą w pełni szyfrowane i nie będą mogły zostać odczytane ani zmodyfikowane przez zhakowane serwery poczty e-mail lub dostawców Internetu. Dołączanie do czatów grupowych oznaczonych zielonym znacznikiem bezpiecznie rozpowszechnia informacje o szyfrowaniu wszystkich osób (i zielone znaczniki wyboru) w sposób gwarantujący kompleksowe szyfrowanie w grupie i pomiędzy członkami.</p> <p>Profil kontaktu może wyświetlać zielony znacznik wyboru <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> i wiersz „Zweryfikowano przez…”. Każdy kontakt oznaczony zielonym znacznikiem albo wykonał z tobą bezpośrednie <a href="#howtoe2ee">skanowanie QR</a>, albo został zweryfikowany przez inny kontakt oznaczony zielonym znacznikiem. Weryfikacje odbywają się automatycznie podczas dodawania członków do grup. Osoba, która doda kontakt oznaczony zielonym znacznikiem wyboru do grupy zawierającej wyłącznie członków oznaczonych zielonym znacznikiem wyboru, staje się osobą weryfikującą. W profilu kontaktu możesz wielokrotnie dotykać tekstu „Zweryfikowano przez…”, aż dojdziesz do osoby, z którą bezpośrednio wykonałeś <a href="#howtoe2ee">skanowanie QR</a>.</p>
<p>Profile kontaktów z zielonymi znacznikami wyboru <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> oznaczają, że obecnie gwarantujemy, że wiadomości kontaktu będą szyfrowane metodą end-to-end. Każdy kontakt oznaczony zielonym znacznikiem albo wykonał z tobą bezpośrednie <a href="#howtoe2ee">skanowanie QR</a>, albo został zweryfikowany przez inny kontakt oznaczony zielonym znacznikiem. Weryfikacje odbywają się automatycznie podczas dodawania członków do grup. Ktokolwiek doda kontakt do grupy oznaczonej zielonym znacznikiem, staje się osobą weryfikującą dla tych członków, którzy jeszcze nie wiedzieli o dodanym kontakcie. W profilu kontaktu możesz wielokrotnie dotykać tekstu „Zweryfikowano przez…”, aż dojdziesz do osoby, z którą bezpośrednio wykonałeś <a href="#howtoe2ee">skanowanie QR</a>.</p>
<p>Pamiętaj, że w profilu kontaktu możesz widzieć i klikać osoby weryfikujące, ale w tytule profilu nie ma zielonego znacznika wyboru. Zwykle oznacza to, że kontakt <a href="#nocryptanymore">„wysłał wiadomość z innego urządzenia”</a>.</p>
<p>Aby uzyskać bardziej szczegółowe omówienie „gwarantowanego szyfrowania typu end-to-end”, zobacz <a href="https://securejoin.delta.chat/en/latest/new.html">Protokoły Secure-Join</a>, a w szczególności przeczytaj o „zweryfikowanych grupach”, technicznym określeniu tak zwanego tutaj „zielonego znacznika wyboru” lub „gwarantowanego szyfrowania end-to-end” czatów.</p> <p>Aby uzyskać bardziej szczegółowe omówienie „gwarantowanego szyfrowania typu end-to-end”, zobacz <a href="https://securejoin.delta.chat/en/latest/new.html">Protokoły Secure-Join</a>, a w szczególności przeczytaj o „zweryfikowanych grupach”, technicznym określeniu tak zwanego tutaj „zielonego znacznika wyboru” lub „gwarantowanego szyfrowania end-to-end” czatów.</p>
<h3 id="nocryptanymore">
Kontakt „wysłał wiadomość z innego urządzenia”, co mogę zrobić? <a href="#nocryptanymore" class="anchor"></a>
</h3>
<p>Twój czat z kontaktem utracił gwarantowane szyfrowanie typu end-to-end. Gdy zobaczysz to ostrzeżenie, zielony znacznik wyboru dla tego czatu i kontaktu został usunięty. <strong>Jeśli zdziwi cię nagły spadek gwarantowanego szyfrowania end-to-end tego kontaktu, nie akceptuj ostrzeżenia!</strong> Zamiast tego skontaktuj się ze swoim kontaktem za pośrednictwem drugiego kanału, takiego jak rozmowa wideo, inny komunikator lub rozmowa telefoniczna, aby dowiedzieć się, co się stało.</p>
<p>Jeśli twój kontakt rzeczywiście spowodował spadek gwarantowanego szyfrowania typu end-to-end, zapoznaj się z kolejnymi akapitami, aby poznać typowe przyczyny i sposoby ich łagodzenia. Niezależnie od tego, wszystkie inne czaty oznaczone zielonym znacznikiem są w pełni szyfrowane, nawet jeśli kontakt jest ich członkiem.</p>
<p><strong>Twój kontakt korzysta z Delta Chat na drugim urządzeniu (telefonie lub laptopie)</strong></p>
<p>Jeśli ma inne urządzenie z uruchomioną aplikacją Delta Chat, powinien usunąć konto z nowego urządzenia i dodać je <a href="#multiclient">jako drugie urządzenie zgodnie z opisem tutaj</a>. Gdy tylko skontaktuje się z tobą później, ostrzeżenie zniknie, a na obu urządzeniach twojego kontaktu zostanie ustanowione gwarantowane szyfrowanie.</p>
<p><strong>Twój kontakt ponownie zainstalował Delta Chat, używając swojego starego loginu do konta</strong></p>
<p>Jeśli ma <a href="#backup">plik kopii zapasowej</a>, powinien usunąć konto z nowego urządzenia i zamiast tego zaimportować plik kopii zapasowej, aby ponownie utworzyć konto. Gdy tylko skontaktuje się z tobą później, ostrzeżenie zniknie, a dla tego kontaktu zostanie przywrócone gwarantowane szyfrowanie.</p>
<p>Jeśli nie ma pliku kopii zapasowej, najlepiej wykonać <a href="#howtoe2ee">skanowanie QR</a> ze swoim partnerem czatu, aby przywrócić gwarantowane szyfrowanie end-to-end.</p>
<p><strong>Twój kontakt wysłał wiadomość e-mail za pośrednictwem interfejsu poczty internetowej lub innej aplikacji e-mail i wkrótce ponownie zacznie korzystać z Delta Chat.</strong></p>
<p>Jeśli masz pewność, że kontakt czasami korzysta z poczty internetowej lub innej aplikacji pocztowej, która nie zapewnia szyfrowania end-to-end, możesz zaakceptować ostrzeżenie. Gdy tylko twój kontakt ponownie skorzysta z Delta Chat, gwarantowane szyfrowanie end-to-end zostanie automatycznie przywrócone.</p>
<p><strong>Twój kontakt całkowicie przestał korzystać z Delta Chat</strong></p>
<p>Czasami utrzymanie kontaktu jest ważniejsze niż szyfrowanie end-to-end. <a href="#tls">„Szyfrowanie warstwy transportowej” (TLS)</a> może w dalszym ciągu w znaczący sposób chronić poufność wiadomości przesyłanych między urządzeniem a serwerem poczty e-mail. Jednak bez kompleksowego szyfrowania Ty i Twój kontakt ufacie swojemu serwerowi poczty e-mail, że nie będzie czytać ani manipulować waszymi wiadomościami i nie będzie przekazywać ich osobom trzecim.</p>
<p>W każdym razie nie możesz zrobić nic innego, jak zaakceptować ostrzeżenie. Usuń także kontakt z aktywnej grupy oznaczonej zielonym znacznikiem, którą znajdziesz w sekcji „Współdzielone czaty” w profilu kontaktu. Dzięki temu twój kontakt nie otrzyma „nieczytelnych” wiadomości.</p>
<p>Jeśli kontakt usunął Delta Chat z powodu błędów lub niepożądanego zachowania, rozważ opublikowanie postu na naszym <a href="https://support.delta.chat">forum pomocy</a>, aby pomóc nam zidentyfikować i rozwiązać typowe problemy. Dzięki!</p>
<h3 id="czy-załączniki-zdjęcia-pliki-pliki-audio-itp-są-szyfrowane-metodą-end-to-end"> <h3 id="czy-załączniki-zdjęcia-pliki-pliki-audio-itp-są-szyfrowane-metodą-end-to-end">
@ -731,7 +706,7 @@ nadal będziesz mógł pisać, ale nie będziesz już powiadamiany o żadnych no
</h3> </h3>
<p>Tak, Delta Chat korzysta z bezpiecznego podzbioru OpenPGP i wyświetla wskaźnik bezpieczeństwa kłódki na wiadomości tylko wtedy, gdy cała wiadomość jest prawidłowo zaszyfrowana i podpisana. Na przykład „Odłączone podpisy” nie są traktowane jako bezpieczne.</p> <p>Tak, Delta Chat korzysta z bezpiecznego podzbioru OpenPGP, który wymaga prawidłowego zaszyfrowania i podpisania całej wiadomości. Na przykład „Odłączone podpisy” nie są traktowane jako bezpieczne.</p>
<p>OpenPGP samo w sobie nie jest niebezpieczne. Większość publicznie omawianych problemów związanych z bezpieczeństwem OpenPGP tak naprawdę wynika ze złej użyteczności lub złej implementacji narzędzi, lub aplikacji (lub obu). Szczególnie ważne jest rozróżnienie pomiędzy OpenPGP, standardem szyfrowania IETF, a GnuPG (GPG), narzędziem wiersza poleceń implementującym OpenPGP. Wiele publicznych komentarzy krytycznych na temat OpenPGP tak naprawdę omawia GnuPG, którego Delta Chat nigdy nie używał. Delta Chat korzysta raczej z implementacji OpenPGP Rust <a href="https://github.com/rpgp/rpgp">rPGP</a>, dostępnej jako <a href="https://crates.io/crates/pgp">niezależny pakiet „pgp”</a> i poddanej <a href="#security-audits">audytowi bezpieczeństwa w 2019 i 2024 roku</a>.</p> <p>OpenPGP samo w sobie nie jest niebezpieczne. Większość publicznie omawianych problemów związanych z bezpieczeństwem OpenPGP tak naprawdę wynika ze złej użyteczności lub złej implementacji narzędzi, lub aplikacji (lub obu). Szczególnie ważne jest rozróżnienie pomiędzy OpenPGP, standardem szyfrowania IETF, a GnuPG (GPG), narzędziem wiersza poleceń implementującym OpenPGP. Wiele publicznych komentarzy krytycznych na temat OpenPGP tak naprawdę omawia GnuPG, którego Delta Chat nigdy nie używał. Delta Chat korzysta raczej z implementacji OpenPGP Rust <a href="https://github.com/rpgp/rpgp">rPGP</a>, dostępnej jako <a href="https://crates.io/crates/pgp">niezależny pakiet „pgp”</a> i poddanej <a href="#security-audits">audytowi bezpieczeństwa w 2019 i 2024 roku</a>.</p>
@ -764,17 +739,15 @@ nadal będziesz mógł pisać, ale nie będziesz już powiadamiany o żadnych no
<h3 id="tls"> <h3 id="tls">
Czy wiadomość jest udostępniana w postaci zwykłego tekstu, jeśli szyfrowanie end-to-end nie jest dostępne? <a href="#tls" class="anchor"></a> Czy wiadomości oznaczone ikoną poczty są widoczne w internecie? <a href="#tls" class="anchor"></a>
</h3> </h3>
<p>Nawet jeśli nie ma gwarancji, że twoje wiadomości będą zaszyfrowane metodą end-to-end, nadal są chronione przed dostawcami Internetu, takimi jak operatorzy komórkowi lub telewizji kablowej. Jednakże dostawcy poczty e-mail zarówno twoi, jak i twojego odbiorcy mogą czytać, analizować, a nawet modyfikować twoje wiadomości, w tym wszelkie załączniki, jeśli nie są one w pełni zaszyfrowane.</p> <p>Jeśli wysyłasz lub odbierasz wiadomości e-mail bez szyfrowania end-to-end (korzystając z klasycznego serwera poczty), są one nadal chronione przed operatorami komórkowymi lub kablowymi, którzy nie mogą ich czytać ani modyfikować. Jednak zarówno twoi dostawcy poczty e-mail, jak i dostawcy poczty e-mail odbiorcy mogą czytać, analizować lub modyfikować twoje wiadomości, w tym wszelkie załączniki.</p>
<p>Delta Chat domyślnie korzysta ze ścisłego <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">szyfrowania TLS</a>, które zabezpiecza połączenia pomiędzy twoim urządzeniem a dostawcą poczty e-mail. Cała obsługa TLS Delta Chat została poddana niezależnemu <a href="#security-audits">audytowi bezpieczeństwa</a>. Co więcej, połączenie między tobą a dostawcą poczty e-mail odbiorcy będzie zazwyczaj również szyfrowane. Jeśli zaangażowane serwery poczty e-mail obsługują <a href="https://datatracker.ietf.org/doc/html/rfc8461">MTA-STS</a>, pomiędzy dostawcami poczty e-mail będzie egzekwowane szyfrowanie transportu. W takim przypadku komunikacja Delta Chat nigdy nie będzie udostępniana w Internecie w postaci zwykłego tekstu, nawet jeśli wiadomość nie została zaszyfrowana metodą end-to-end.</p> <p>Delta Chat domyślnie korzysta ze ścisłego <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">szyfrowania TLS</a>, które zabezpiecza połączenia pomiędzy twoim urządzeniem a dostawcą poczty e-mail. Cała obsługa TLS Delta Chat została poddana niezależnemu <a href="#security-audits">audytowi bezpieczeństwa</a>. Co więcej, połączenie między tobą a dostawcą poczty e-mail odbiorcy będzie zazwyczaj również szyfrowane. Jeśli zaangażowane serwery poczty e-mail obsługują <a href="https://datatracker.ietf.org/doc/html/rfc8461">MTA-STS</a>, pomiędzy dostawcami poczty e-mail będzie egzekwowane szyfrowanie transportu. W takim przypadku komunikacja Delta Chat nigdy nie będzie udostępniana w Internecie w postaci zwykłego tekstu, nawet jeśli wiadomość nie została zaszyfrowana metodą end-to-end.</p>
<p>Pamiętaj, że <a href="#howtoe2ee">utrzymywanie gwarantowanego szyfrowania typu end-to-end</a> oprócz szyfrowania TLS zapewnia wszechstronne bezpieczeństwo między urządzeniami twoimi i odbiorców. Nawet twój dostawca poczty e-mail lub Internetu nie będzie w stanie przeczytać ani zmodyfikować twoich wiadomości.</p>
<h3 id="message-metadata"> <h3 id="message-metadata">
@ -783,20 +756,23 @@ nadal będziesz mógł pisać, ale nie będziesz już powiadamiany o żadnych no
</h3> </h3>
<p>Delta Chat chroni większość metadanych wiadomości, umieszczając następujące informacje w całkowicie zaszyfrowanej części wiadomości:</p> <p>W przeciwieństwie do większości innych komunikatorów, aplikacje Delta Chat nie przechowują żadnych metadanych dotyczących kontaktów ani grup na serwerach, również w formie zaszyfrowanej. Zamiast tego wszystkie metadane grup są szyfrowane metodą end-to-end i przechowywane wyłącznie na urządzeniach użytkowników końcowych.</p>
<p>Serwery poczty e-mail widzą zatem tylko:</p>
<ul> <ul>
<li>Wiersz tematu</li> <li>
<li>Awatar i nazwa grupy</li> <p>datę wysłania wiadomości,</p>
<li>Żądania MDN (potwierdzenie odczytu) (<code class="language-plaintext highlighter-rouge">Chat-Disposition-Notification-To</code>)</li> </li>
<li>Licznik czasu znikania wiadomości (<code class="language-plaintext highlighter-rouge">Ephemeral-Timer</code>)</li> <li>
<li><code class="language-plaintext highlighter-rouge">Chat-Group-Member-Removed</code>, <code class="language-plaintext highlighter-rouge">Chat-Group-Member-Added</code></li> <p>adresy nadawcy i odbiorcy,</p>
<li>Nagłówek <code class="language-plaintext highlighter-rouge">Secure-Join</code> zawierający polecenia bezpiecznego łączenia</li> </li>
<li>Powiadomienie o włączeniu przesyłania strumieniowego lokalizacji</li> <li>
<li>Adres URL pokoju WebRTC</li> <p>oraz rozmiar wiadomości.</p>
</li>
</ul> </ul>
<p>Serwery poczty e-mail nie mają dostępu do chronionych metadanych, ale widzą datę wiadomości, jej rozmiar oraz, co ważniejsze, adresy nadawcy i odbiorcy. Serwery poczty e-mail potrzebują adresów odbiorców, aby kierować i dostarczać wiadomości do urządzeń odbiorców.</p> <p>Wszystkie pozostałe metadane dotyczące wiadomości, kontaktów i grup znajdują się w zaszyfrowanej metodą end-to-end części wiadomości.</p>
<h3 id="device-seizure"> <h3 id="device-seizure">
@ -806,61 +782,21 @@ nadal będziesz mógł pisać, ale nie będziesz już powiadamiany o żadnych no
</h3> </h3>
<p>Zarówno w celu ochrony przed serwerami poczty e-mail gromadzącymi metadane, jak i przed zagrożeniem przejęcia urządzenia, zalecamy użycie zoptymalizowanej <a href="https://delta.chat/pl/serverguide">instancji serwera poczty e-mail</a> Delta Chat w celu tworzenia pseudonimowych kont tymczasowych poprzez skanowanie kodów QR. Pamiętaj, że aplikacje Delta Chat na wszystkich platformach obsługują wiele kont, dzięki czemu możesz z łatwością korzystać z kont „1-tygodniowych” lub „1-miesięcznych” związanych z konkretnymi działaniami obok konta „głównego”, wiedząc, że wszystkie tymczasowe dane konta wraz ze wszystkimi metadanymi zostaną usunięte. Co więcej, jeśli urządzenie zostanie przejęte, nie będzie można łatwo zidentyfikować kontaktów korzystających z tymczasowych kont e-mail, w porównaniu z komunikatorami, które ujawniają numery telefonów w grupach czatów, które z kolei często są powiązane z tożsamością prawną.</p> <p>Zarówno w celu ochrony przed serwerami poczty e-mail gromadzącymi metadane, jak i przed zagrożeniem przejęcia urządzenia, zalecamy użycie <a href="https://chatmail.at/relays">przełącznika chatmail</a> do tworzenia profili czatu z losowymi adresami e-mail do przesyłania. Pamiętaj, że aplikacje Delta Chat na wszystkich platformach obsługują wiele kont, dzięki czemu możesz z łatwością korzystać z kont „1-tygodniowych” lub „1-miesięcznych” związanych z konkretnymi działaniami obok konta „głównego”, wiedząc, że wszystkie tymczasowe dane konta wraz ze wszystkimi metadanymi zostaną usunięte. Co więcej, jeśli urządzenie zostanie przejęte, kontakty czatu korzystające z profili krótkotrwałych nie będą mogły zostać łatwo zidentyfikowane.</p>
<h3 id="jak-mogę-sprawdzić-informacje-o-szyfrowaniu"> <h3 id="sealedsender">
Jak mogę sprawdzić informacje o szyfrowaniu? <a href="#jak-mogę-sprawdzić-informacje-o-szyfrowaniu" class="anchor"></a> Czy Delta Chat obsługuje funkcję „Sealed Sender”? <a href="#sealedsender" class="anchor"></a>
</h3> </h3>
<p>Możesz sprawdzić stan szyfrowania end-to-end ręcznie w oknie dialogowym „Szyfrowanie” (profil użytkownika w systemie Android/iOS lub kliknij prawym przyciskiem myszy element listy czatu użytkownika na komputerze). Delta Chat pokazuje tam dwa odciski palców. Jeśli te same odciski palców pojawią się u ciebie i urządzeniu twojego kontaktu, połączenie jest bezpieczne.</p> <p>Nie, jeszcze nie.</p>
<h3 id="jak-mogę-sprawdzić-stan-szyfrowania-wiadomości"> <p>Komunikator Signal wprowadził funkcję <a href="https://signal.org/blog/sealed-sender/">„Sealed Sender”</a> w 2018 roku, aby infrastruktura serwerowa nie wiedziała, kto wysyła wiadomość do grupy odbiorców. Jest to szczególnie ważne, ponieważ serwer Signal zna numer telefonu komórkowego każdego konta, który zazwyczaj jest powiązany z identyfikatorem paszportu.</p>
<p>Nawet jeśli <a href="https://chatmail.at/relays">przekaźniki chatmail</a> nie proszą o żadne prywatne dane (w tym numery telefonów), warto chronić metadane relacji między adresami. Nie przewidujemy poważniejszych problemów w korzystaniu z losowych, jednorazowych adresów e-mail do wysyłania wiadomości w tajemnicy, ale wdrożenie tej funkcji nie zostało jeszcze uznane za priorytetowe.</p>
Jak mogę sprawdzić stan szyfrowania wiadomości? <a href="#jak-mogę-sprawdzić-stan-szyfrowania-wiadomości" class="anchor"></a>
</h3>
<p>Mała <strong>kłódka</strong> w dymku wiadomości oznacza, że wiadomość od danego nadawcy została prawidłowo zaszyfrowana. Jeśli <strong>nie ma kłódki</strong>, wiadomość nie została prawidłowo zaszyfrowana metodą end-to-end, najprawdopodobniej dlatego, że nadawca korzysta z aplikacji lub interfejsu poczty internetowej bez obsługi szyfrowania typu end-to-end.</p>
<h3 id="dlaczego-widzę-niezaszyfrowane-wiadomości">
Dlaczego widzę niezaszyfrowane wiadomości? <a href="#dlaczego-widzę-niezaszyfrowane-wiadomości" class="anchor"></a>
</h3>
<p>Jeśli kontakt korzysta z aplikacji e-mail bez Autocrypt, wszystkie wiadomości od tego kontaktu (w czacie grupowym lub 1:1) nie będą w pełni szyfrowane, w związku z czym nie będą wyświetlane z „kłódką” przy wiadomościach. Pamiętaj, że nawet jeśli twoje kontakty korzystają z Delta Chat na swoim koncie, mogą również używać na tym koncie aplikacji e-mail bez Autocrypt, co może powodować sporadyczne wysyłanie niezaszyfrowanych wiadomości. Odpowiadanie niezaszyfrowanych wiadomości na niezaszyfrowane wiadomości jest wymagane przez funkcję Autocrypt, aby zapobiec nieczytelnym wiadomościom po stronie twoich kontaktów i ich aplikacji e-mail bez Autocrypt.</p>
<h3 id="jak-mogę-uzyskać-zaszyfrowany-ened-to-end-czat-z-kontaktem-delta-chat-który-czasami-korzysta-z-poczty-internetowej-lub-innej-aplikacji-e-mail-bez-autocrypt">
Jak mogę uzyskać zaszyfrowany ened-to-end czat z kontaktem Delta Chat, który czasami korzysta z poczty internetowej lub innej aplikacji e-mail bez Autocrypt? <a href="#jak-mogę-uzyskać-zaszyfrowany-ened-to-end-czat-z-kontaktem-delta-chat-który-czasami-korzysta-z-poczty-internetowej-lub-innej-aplikacji-e-mail-bez-autocrypt" class="anchor"></a>
</h3>
<p>Jeśli potrzebujesz bezpiecznie, kompleksowo zaszyfrowanego czatu z kontaktem, który korzysta ze swojego konta zarówno w Delta Chat, jak i w aplikacjach bez Autocrypt (np. poczta internetowa), najlepiej skonfigurować z nim gwarantowane szyfrowanie typu end-to-end, a następnie utworzyć <a href="#howtoe2ee">gwarantowany zaszyfrowany end-to-end</a> czat grupowy z wami dwoma jako członkami. W tym czacie grupowym wszystkie wiadomości będą w pełni szyfrowane, nawet jeśli bezpośredni czat między wami zawiera ostrzeżenie <a href="#nocryptanymore">„…wysłano wiadomość z innego urządzenia”</a>.</p>
<h3 id="jak-mogę-zapewnić-kompleksowe-szyfrowanie-i-usuwanie-wiadomości">
Jak mogę zapewnić kompleksowe szyfrowanie i usuwanie wiadomości? <a href="#jak-mogę-zapewnić-kompleksowe-szyfrowanie-i-usuwanie-wiadomości" class="anchor"></a>
</h3>
<p>Najlepszym sposobem, aby mieć pewność, że każda wiadomość jest kompleksowo zaszyfrowana, a metadane usunięte tak szybko, jak to możliwe, jest <a href="#howtoe2ee">korzystanie z czatów z gwarantowanym szyfrowaniem end-to-end</a> i włączonymi <a href="#ephemeralmsgs">znikającymi wiadomościami</a>.</p>
<p>Gwarantowane szyfrowane metodą end-to-end czaty chronią przed atakami <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM attacks</a>, a włączenie znikających wiadomości powoduje usunięcie wiadomości z serwera po upływie czasu skonfigurowanego przez użytkownika.</p>
<p>Jeśli nie potrzebujesz dłuższej kopii wiadomości na serwerze, możesz także włączyć opcję <a href="#delold">„automatycznie usuń wiadomości z serwera”</a>.</p>
<h3 id="pfs"> <h3 id="pfs">
@ -870,23 +806,33 @@ nadal będziesz mógł pisać, ale nie będziesz już powiadamiany o żadnych no
</h3> </h3>
<p>Nie, Delta Chat nie obsługuje funkcji Perfect Forward Secrecy (PFS). Oznacza to, że jeśli twój prywatny klucz deszyfrujący Delta Chat wycieknie i ktoś zdobędzie twoje wcześniejsze wiadomości w trakcie przesyłania, będzie mógł je odszyfrować i odczytać przy użyciu ujawnionego klucza deszyfrowania.</p> <p>Nie, jeszcze nie.</p>
<p>Należy jednak pamiętać, że jeśli ktoś zdobędzie twoje klucze deszyfrujące, zazwyczaj będzie mógł również uzyskać twoje wiadomości, niezależnie od tego, czy obowiązuje zasada Perfect Forward Secrecy, czy nie. Typową sytuacją w świecie rzeczywistym w przypadku wycieku kluczy deszyfrujących jest przejęcie urządzenia, które omawiamy w naszej odpowiedzi na temat <a href="#device-seizure">przejęcia metadanych i urządzenia</a>.</p> <p>Delta Chat obecnie nie obsługuje mechanizmu Perfect Forward Secrecy (PFS). Oznacza to, że jeśli twój prywatny klucz deszyfrujący zostanie ujawniony, a ktoś zdobędzie twoje wcześniejsze wiadomości w trakcie transmisji, będzie mógł je odszyfrować i odczytać za pomocą ujawnionego klucza deszyfrującego. Należy pamiętać, że mechanizm Forward Secrecy zwiększa bezpieczeństwo tylko w przypadku usuwania wiadomości. W przeciwnym razie osoba, która uzyska twoje klucze deszyfrujące, zazwyczaj będzie mogła uzyskać dostęp do wszystkich nieusuniętych wiadomości i nie będzie musiała odszyfrowywać żadnych wcześniej zebranych wiadomości.</p>
<p>Możliwe, że Delta Chat ewoluuje, aby wspierać Perfect Forward Secrecy, ponieważ OpenPGP to tylko kontener na zaszyfrowane wiadomości, ale zarządzanie kluczami szyfrowania (a tym samym rotacja kluczy lub „zapadanie kluczy”) mogłoby być zorganizowane w elastyczny sposób. Zobacz <a href="https://gitlab.com/sequoia-pgp/openpgp-dr">prototyp PFS firmy Seqouia</a>, aby zapoznać się z istniejącymi eksperymentami w społeczności implementatorów OpenPGP.</p> <p>Opracowaliśmy metodę Forward Secrecy, która przeszła wstępną analizę niektórych kryptografów i ekspertów ds. wdrożeń, ale oczekuje na bardziej formalne opracowanie, które potwierdzi jej niezawodne działanie w federacyjnym przesyłaniu wiadomości i w przypadku korzystania z wielu urządzeń, zanim zostanie zaimplementowana w <a href="https://github.com/chatmail/core">rdzeniu chatmail</a>, co uczyniłoby ją dostępną we wszystkich <a href="https://chatmail.at/clients">klientach chatmail</a>.</p>
<h3 id="czy-szyfrowanie-end-to-end-delta-chat-jest-tak-samo-bezpieczne-jak-signal"> <h3 id="pqc">
Czy szyfrowanie end-to-end Delta Chat jest tak samo bezpieczne jak Signal? <a href="#czy-szyfrowanie-end-to-end-delta-chat-jest-tak-samo-bezpieczne-jak-signal" class="anchor"></a> Czy Delta Chat obsługuje kryptografię postkwantową? <a href="#pqc" class="anchor"></a>
</h3> </h3>
<p>To zależy od tego, co jest dla ciebie ważne. Delta Chat <a href="#pfs">nie obsługuje PFS</a> tak jak Signal, ale zapewnia <a href="#e2eeguarantee">gwarantowane szyfrowane end-to-end czatów</a>, które jest zabezpieczeniem przed zaatakowanymi serwerami lub uszkodzonymi sieciami. Signal i większość innych komunikatorów obsługujących PFS nie zapewniają praktycznego schematu ochrony czatów grupowych przed atakami sieciowymi, które są prawdopodobnie bardziej niepokojące niż potencjalny atakujący, który przejmuje twój telefon i prywatne ustawienia szyfrowania i w ten sposób nie twoje wiadomości i mimo to ma pełny zapis wszystkich poprzednio zaszyfrowanych wiadomości.</p> <p>Nie, jeszcze nie.</p>
<p>W każdym razie szyfrowanie end-to-end Delta Chat wykorzystuje <a href="#openpgp-secure">bezpieczny podzbiór OpenPGP</a>, który został poddany <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">niezależnemu audytowi bezpieczeństwa</a>.</p> <p>Delta Chat korzysta z biblioteki Rust OpenPGP <a href="https://github.com/rpgp/rpgp">rPGP</a>, która obsługuje najnowszy <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/">projekt OpenPGP IETF Post-Quantum-Cryptography</a>. Planujemy dodać obsługę PQC do <a href="https://github.com/chatmail/core">rdzenia chatmail</a> po sfinalizowaniu projektu w IETF we współpracy z innymi implementatorami OpenPGP.</p>
<h3 id="jak-mogę-ręcznie-sprawdzić-informacje-o-szyfrowaniu">
Jak mogę ręcznie sprawdzić informacje o szyfrowaniu? <a href="#jak-mogę-ręcznie-sprawdzić-informacje-o-szyfrowaniu" class="anchor"></a>
</h3>
<p>Możesz sprawdzić stan szyfrowania end-to-end ręcznie w oknie dialogowym „Szyfrowanie” (profil użytkownika w systemie Android/iOS lub kliknij prawym przyciskiem myszy element listy czatu użytkownika na komputerze). Delta Chat pokazuje tam dwa odciski palców. Jeśli te same odciski palców pojawią się u ciebie i urządzeniu twojego kontaktu, połączenie jest bezpieczne.</p>
<h3 id="importkey"> <h3 id="importkey">
@ -1094,7 +1040,7 @@ od najnowszych do najstarszych:</p>
<li>Aplikacje webxdc nie mogą wysyłać danych do Internetu ani niczego pobierać.</li> <li>Aplikacje webxdc nie mogą wysyłać danych do Internetu ani niczego pobierać.</li>
<li>Aplikacja webxdc może wymieniać dane wyłącznie w ramach czatu Delta Chat, a ich kopie znajdują się na urządzeniach twoich partnerów czatu. Poza tym jest całkowicie odizolowana od Internetu.</li> <li>Aplikacja webxdc może wymieniać dane wyłącznie w ramach czatu Delta Chat, a ich kopie znajdują się na urządzeniach twoich partnerów czatu. Poza tym jest całkowicie odizolowana od Internetu.</li>
<li>Prywatność, jaką oferuje aplikacja webxdc, to prywatność twojego czatu jeśli ufasz osobom, z którymi rozmawiasz, możesz ufać także aplikacji webxdc.</li> <li>Prywatność, jaką oferuje aplikacja webxdc, to prywatność twojego czatu jeśli ufasz osobom, z którymi rozmawiasz, możesz ufać także aplikacji webxdc.</li>
<li>Oznacza to również: otwieranie aplikacji webxdc na czatach, w przypadku których nie ufa się członkom, może stanowić ryzyko dla prywatności tak jak załączniki do wiadomości e-mail, gdzie otwiera się tylko załączniki od nadawców, którym ufasz, a nie od spamerów.</li> <li>Oznacza to również: otwieranie aplikacji w czatach z niezaufanymi członkami, co może stanowić ryzyko dla prywatności. Podobnie jak w przypadku załączników do wiadomości e-mail, połączeń wideo lub zwykłych linków: otwieraj je tylko od nadawców, którym ufasz, a nie od spamerów. Spamerzy mogą poznać wszelkie dane, które im wysyłasz, a także twój adres IP.</li>
</ul> </ul>
<h3 id="gdzie-mogę-zdobyć-aplikacje-webxdc"> <h3 id="gdzie-mogę-zdobyć-aplikacje-webxdc">
@ -1161,13 +1107,8 @@ od najnowszych do najstarszych:</p>
</h3> </h3>
<ul> <p>Za pomocą listy rozgłoszeniowej możesz wysłać wiadomość do wielu odbiorców naraz; odbiorcy nie mogą odpowiedzieć na tej liście.
<li>Dzięki liście rozgłoszeniowej możesz wysłać wiadomość do wielu odbiorców jednocześnie; kiedy ci odpowiedzą, otrzymasz odpowiedź w bezpośrednim czacie 1: 1 z nimi. Odbiorcy nie widzą siebie nawzajem.</li> Listy rozgłoszeniowe są nadal wysoce eksperymentalne i bardzo prawdopodobne, że zostaną zastąpione czymś innym, bądźcie czujni :)</p>
<li>Technicznie, jest to e-mail z wieloma odbiorcami w „ukrytej kopii”.</li>
<li>Możesz włączyć tę funkcję w sekcji „Funkcje eksperymentalne” w ustawieniach zaawansowanych. Następnie możesz utworzyć listę rozgłoszeniową z okna dialogowego „Nowy czat”.</li>
<li>Jeśli używasz więcej niż jednego urządzenia, listy rozgłoszeniowe nie są obecnie synchronizowane między nimi.</li>
<li>Wiadomości wysyłane do list rozgłoszeniowych nie są szyfrowane. Szyfrowanie złamałoby anonimowość, ponieważ wtedy wszyscy odbiorcy wiedzieliby, kto jeszcze je otrzymał (wysyłanie indywidualnych wiadomości do wszystkich byłoby gorsze z powodu limitu prędkości i zużycia sieci).</li>
</ul>
<h3 id="jak-mogę-udostępnić-swoją-lokalizację-moim-rozmówcom"> <h3 id="jak-mogę-udostępnić-swoją-lokalizację-moim-rozmówcom">
@ -1213,6 +1154,10 @@ od najnowszych do najstarszych:</p>
</h3> </h3>
<p>Uwaga: Zmiana adresów e-mail jest tymczasowo wyłączona
z powodu trwających zmian w rdzeniu DeltaChat.
Powinna być ponownie dostępna za kilka miesięcy.</p>
<ol> <ol>
<li> <li>
<p>Zmień swój adres w „Ustawienia → Zaawansowane → Hasło i konto” i wprowadź hasło do swojego nowego konta (i jeśli to konieczne, ustawienia serwera). Otrzymasz informację o przeniesieniu na nowy adres. Dodatkowe powiadomienie pojawi się również na czacie „Komunikaty urządzenia”.</p> <p>Zmień swój adres w „Ustawienia → Zaawansowane → Hasło i konto” i wprowadź hasło do swojego nowego konta (i jeśli to konieczne, ustawienia serwera). Otrzymasz informację o przeniesieniu na nowy adres. Dodatkowe powiadomienie pojawi się również na czacie „Komunikaty urządzenia”.</p>
@ -1286,17 +1231,17 @@ Oto, co robi Delta Chat z tymi uprawnieniami:</p>
Jednak niektórzy dostawcy potrzebują specjalnych opcji, aby działać poprawnie, zobacz <a href="https://providers.delta.chat">Przegląd dostawców</a></li> Jednak niektórzy dostawcy potrzebują specjalnych opcji, aby działać poprawnie, zobacz <a href="https://providers.delta.chat">Przegląd dostawców</a></li>
</ul> </ul>
<h3 id="chcę-zarządzać-własnym-serwerem-e-mail-dla-delta-chat-co-polecacie"> <h3 id="chcę-zarządzać-własnym-serwerem-dla-delta-chat-co-polecacie">
Chcę zarządzać własnym serwerem e-mail dla Delta Chat. Co polecacie? <a href="#chcę-zarządzać-własnym-serwerem-e-mail-dla-delta-chat-co-polecacie" class="anchor"></a> Chcę zarządzać własnym serwerem dla Delta Chat. Co polecacie? <a href="#chcę-zarządzać-własnym-serwerem-dla-delta-chat-co-polecacie" class="anchor"></a>
</h3> </h3>
<ul> <ul>
<li>Większość serwerów pocztowych będzie działać dobrze. Ale to, co osobiście polecamy, to połączenie mailcow i mailadm, jak opisano <a href="https://delta.chat/en/2023-01-27-upcoming-mail-server-workshops">w tym poście na blogu</a>.</li> <li>Większość serwerów pocztowych będzie działać dobrze. Ale my osobiście polecamy serwer przekaźnikowy chatmail, jak opisano <a href="https://delta.chat/en/2023-12-13-chatmail">w tym wpisie na blogu</a>.</li>
<li>Instrukcję instalacji można znaleźć <a href="https://delta.chat/pl/serverguide">na naszej stronie internetowej</a>.</li> <li>Możesz znaleźć <a href="https://github.com/chatmail/relay">przewodnik instalacji na GitHub</a>.</li>
</ul> </ul>
<h3 id="dlaczego-muszę-wpisać-moje-hasło-e-mail-do-delta-chat-czy-to-jest-bezpieczne"> <h3 id="dlaczego-muszę-wpisać-moje-hasło-e-mail-do-delta-chat-czy-to-jest-bezpieczne">

View file

@ -36,27 +36,24 @@
<li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li> <li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li>
</ul> </ul>
</li> </li>
<li><a href="#encryption-and-security">Encryption and Security</a> <li><a href="#e2ee">Encryption and Security</a>
<ul> <ul>
<li><a href="#which-standards-are-used-for-end-to-end-encryption">Which standards are used for end-to-end encryption?</a></li> <li><a href="#which-standards-are-used-for-end-to-end-encryption">Which standards are used for end-to-end encryption?</a></li>
<li><a href="#whene2e">How can i know if messages are end-to-end encrypted?</a></li> <li><a href="#whene2e">How can i know if messages are end-to-end encrypted?</a></li>
<li><a href="#howtoe2ee">How can I get guaranteed end-to-end encryption and green checkmarks?</a></li> <li><a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption">Can i still receive or send mails without end-to-end encryption?</a></li>
<li><a href="#e2eeguarantee">What does the green checkmark and “guaranteed end-to-end encryption” mean?</a></li> <li><a href="#howtoe2ee">How can I establish a chat with a new contact?</a></li>
<li><a href="#nocryptanymore">A contact “sent a message from another device”, what can i do?</a></li> <li><a href="#e2eeguarantee">What does the green checkmark in a contact profile mean?</a></li>
<li><a href="#are-attachments-pictures-files-audio-etc-end-to-end-encrypted">Are attachments (pictures, files, audio etc.) end-to-end encrypted?</a></li> <li><a href="#are-attachments-pictures-files-audio-etc-end-to-end-encrypted">Are attachments (pictures, files, audio etc.) end-to-end encrypted?</a></li>
<li><a href="#openpgp-secure">Is OpenPGP secure?</a></li> <li><a href="#openpgp-secure">Is OpenPGP secure?</a></li>
<li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end -encryption?</a></li> <li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end-encryption?</a></li>
<li><a href="#is-delta-chat-vulnerable-to-efail">Is Delta Chat vulnerable to EFAIL?</a></li> <li><a href="#is-delta-chat-vulnerable-to-efail">Is Delta Chat vulnerable to EFAIL?</a></li>
<li><a href="#tls">Is a message exposed in cleartext if end-to-end encryption is not available?</a></li> <li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
<li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li> <li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li>
<li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li> <li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li>
<li><a href="#how-can-i-check-encryption-information">How can i check encryption information?</a></li> <li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
<li><a href="#how-can-i-check-the-encryption-status-of-messages">How can I check the encryption status of messages?</a></li>
<li><a href="#why-do-i-see-unencrypted-messages">Why do I see unencrypted messages?</a></li>
<li><a href="#how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app">How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app?</a></li>
<li><a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion">How can I ensure message end-to-end encryption and deletion?</a></li>
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li> <li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of Delta Chat as safe as Signal?</a></li> <li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
<li><a href="#how-can-i-manually-check-encryption-information">How can I manually check encryption information?</a></li>
<li><a href="#importkey">Posso reutilizar minha chave privada existente?</a></li> <li><a href="#importkey">Posso reutilizar minha chave privada existente?</a></li>
<li><a href="#security-audits">Was Delta Chat independently audited for security vulnerabilities?</a></li> <li><a href="#security-audits">Was Delta Chat independently audited for security vulnerabilities?</a></li>
</ul> </ul>
@ -90,7 +87,7 @@
<ul> <ul>
<li><a href="#quais-permissões-o-delta-chat-precisa">Quais permissões o Delta Chat precisa?</a></li> <li><a href="#quais-permissões-o-delta-chat-precisa">Quais permissões o Delta Chat precisa?</a></li>
<li><a href="#o-delta-chat-funciona-com-meu-provedor-de-e-mail">O Delta Chat funciona com <em>meu</em> provedor de e-mail?</a></li> <li><a href="#o-delta-chat-funciona-com-meu-provedor-de-e-mail">O Delta Chat funciona com <em>meu</em> provedor de e-mail?</a></li>
<li><a href="#i-want-to-manage-my-own-e-mail-server-for-delta-chat-what-do-you-recommend">I want to manage my own e-mail server for Delta Chat. What do you recommend?</a></li> <li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
<li><a href="#por-que-preciso-entrar-com-a-senha-do-meu-email-no-delta-chat-isso-é-seguro">Por que preciso entrar com a senha do meu email no Delta Chat? Isso é seguro?</a></li> <li><a href="#por-que-preciso-entrar-com-a-senha-do-meu-email-no-delta-chat-isso-é-seguro">Por que preciso entrar com a senha do meu email no Delta Chat? Isso é seguro?</a></li>
<li><a href="#quais-mensagens-aparecem-no-delta-chat">Quais mensagens aparecem no Delta Chat?</a></li> <li><a href="#quais-mensagens-aparecem-no-delta-chat">Quais mensagens aparecem no Delta Chat?</a></li>
<li><a href="#o-delta-chat-suporta-emails-html">O Delta Chat suporta emails HTML?</a></li> <li><a href="#o-delta-chat-suporta-emails-html">O Delta Chat suporta emails HTML?</a></li>
@ -720,10 +717,10 @@ that achieves “instant delivery” of messages for all chatmail servers
including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>. including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>.
Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p> Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p>
<h2 id="encryption-and-security"> <h2 id="e2ee">
Encryption and Security <a href="#encryption-and-security" class="anchor"></a> Encryption and Security <a href="#e2ee" class="anchor"></a>
</h2> </h2>
@ -736,18 +733,26 @@ Welcome to the power of the interoperable and massive chatmail and e-mail system
</h3> </h3>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically <p>Delta Chat uses a <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>
establishing end-to-end encryption with contacts and group chats. to provide automatic end-to-end encryption using these protocols:</p>
Autocrypt uses a limited and <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>.
End-to-End encrypted messages are marked with a padlock
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../lock-icon.png" alt="padlock" />.</p>
<p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a> <ul>
are used for establishing chats with guaranteed end-to-end encryption <li>
which protects against network attacks and compromised servers. <p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join</a>
Chats marked with a green checkmark to exchange encryption setup information through QR-code scanning or “invite links”.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> </li>
guarantee end-to-end encrypted messages.</p> <li>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically
establishing end-to-end encryption between contacts and all members of a group chat.</p>
</li>
<li>
<p><a href="https://github.com/chatmail/core/blob/main/spec.md#attaching-a-contact-to-a-message">Sharing a contact to a
chat</a>
enables receivers to use end-to-end encryption with the contact.</p>
</li>
</ul>
<p>Delta Chat does not query, publish or interact with any OpenPGP key servers.</p>
<h3 id="whene2e"> <h3 id="whene2e">
@ -757,28 +762,37 @@ guarantee end-to-end encrypted messages.</p>
</h3> </h3>
<p>All end-to-end encrypted messages carry a padlock:</p> <p>All messages in Delta Chat are <strong>end-to-end encrypted by default</strong>.
Since the Delta Chat Version 2 release series (July 2025)
there are no lock or similar markers on end-to-end encrypted messages, anymore.</p>
<p><img style="width:160px; margin:1px" src="../lock-screenshot.png" alt="padlock in bubble" /></p> <h3 id="can-i-still-receive-or-send-mails-without-end-to-end-encryption">
<p>End-to-end encryption is guaranteed if there is a green checkmark next to the chat title:</p>
<p><img style="width:211px; margin:1px" src="../green-checkmark-screenshot.png" alt="green checkmark in title" /></p>
<h3 id="howtoe2ee">
How can I get guaranteed end-to-end encryption and green checkmarks? <a href="#howtoe2ee" class="anchor"></a> Can i still receive or send mails without end-to-end encryption? <a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption" class="anchor"></a>
</h3> </h3>
<p>If you have a second communication channel with your chat partner, <p>If you use default <a href="https://chatmail.at/relays">chatmail relays</a>,
like a video chat or a different messenger, it is impossible to receive or send messages without end-to-end encryption.</p>
you can generate an invite link.</p>
<p>If you are together in person, <p>If you instead create a profile using a classic e-mail server,
you can show a QR code to your chat partner.</p> you can send and receive messages without end-to-end encryption.
Such messages lacking end-to-end encryption are marked with an e-mail icon
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
<h3 id="howtoe2ee">
How can I establish a chat with a new contact? <a href="#howtoe2ee" class="anchor"></a>
</h3>
<p>You can send an invite link through another private chat,
show an invitation QR code when next to each other or in a video call,
or click on a “contact” that was shared in a chat.</p>
<ul> <ul>
<li> <li>
@ -793,135 +807,54 @@ on the Delta Chat app main screen.</p>
</li> </li>
</ul> </ul>
<p>Let your chat partner scan the QR image <p>Ask your chat partner to scan the QR image
with their Delta Chat app, with their Delta Chat app,
or click “Copy” or “Share” to create an invite link or click “Copy” or “Share” to create an invite link
and share it with your chat partner.</p> and share it with your chat partner.</p>
<p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">Secure-Join network messages are exchanged</a> between both devices.</p> <p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">end-to-end encryption is getting established</a>.</p>
<ul> <ul>
<li> <li>
<p>If both devices are online, <p>If both sides are online, they will soon see a (group or direct) chat
both sides will eventually see a (group or direct) chat with a green checkmark and can start messaging securely.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
next to the title.</p>
</li> </li>
<li> <li>
<p>If one of the devices is offline, the green checkmarks will only <p>If one side is offline or in bad network,
appear later when the device is internet-connected again the ability to chat is delayed until connectivity is restored.</p>
and the Secure-Join network protocol completed.</p>
</li> </li>
</ul> </ul>
<p>Congratulations! <p>Congratulations!
You now will automatically use guaranteed end-to-end encryption You now will automatically use end-to-end encryption
with this contact and both of you can add each other to green-checkmarked groups with this contact.
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />, If you add each other to chat groups,
thereby automatically spreading guaranteed end-to-end encryption among its members.</p> end-to-end encryption will be established among all members.</p>
<h3 id="e2eeguarantee"> <h3 id="e2eeguarantee">
What does the green checkmark and “guaranteed end-to-end encryption” mean? <a href="#e2eeguarantee" class="anchor"></a> What does the green checkmark in a contact profile mean? <a href="#e2eeguarantee" class="anchor"></a>
</h3> </h3>
<p>Chat titles with green checkmarks <p>A contact profile might show a green checkmark
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
mean that all messages in the chat will be end-to-end encrypted and an “Introduced by” line.
and can not be read or altered by compromised e-mail servers or Internet providers.
Joining green-checkmarked group chats
safely spreads everybodys encryption information (and green checkmarks)
in a manner that guarantees end-to-end encryption in the group and among members.</p>
<p>Contact profiles with green checkmarks
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
mean that messaging a contact is currently guaranteed to be end-to-end encrypted.
Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you
or was introduced by a another green-checkmarked contact. or was introduced by a another green-checkmarked contact.
Introductions happen automatically when adding members to groups. Introductions happen automatically when adding members to groups.
Whoever adds a contact to a green-checkmarked group becomes an introducer Whoever adds a green-checkmarked contact to a group with only green-checkmarked members
to those members who didnt yet know about the added contact. becomes an introducer.
In a contact profile you can tap on the “Introduced by …” text repeatedly In a contact profile you can tap on the “Introduced by …” text repeatedly
until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p> until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p>
<p>Note that in a contact profile you may see and tap introducers
but there is no green checkmark in the profile title.
This usually means that the contact <a href="#nocryptanymore">“sent a message from another device”</a>.</p>
<p>For more in-depth discussion of “guaranteed end-to-end encryption” <p>For more in-depth discussion of “guaranteed end-to-end encryption”
please see <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a> please see <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a>
and specifically read about “Verified Groups”, the technical term and specifically read about “Verified Groups”, the technical term
of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.</p> of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.</p>
<h3 id="nocryptanymore">
A contact “sent a message from another device”, what can i do? <a href="#nocryptanymore" class="anchor"></a>
</h3>
<p>Your chat with a contact lost guaranteed end-to-end encryption.
The green checkmark was removed for this chat and contact when you see this warning.
<strong>If you find the sudden drop of guaranteed end-to-end encryption
surprising for this contact then dont accept the warning!</strong>
Instead check with your contact through a second channel
like a video call, other messenger or a phone call,
to find out what happened.</p>
<p>If your contact actually caused the drop of guaranteed end-to-end encryption
please see the next paragraphs for common reasons and their mitigations.
Regardless, all other green-checkmarked chats remain guaranteed end-to-end encrypted
even if the contact is a member there.</p>
<p><strong>Your contact is using Delta Chat on a second device (phone or laptop)</strong></p>
<p>If they have another device with a Delta Chat app running,
they should remove the profile from the new device
and add it <a href="#multiclient">as a second device as described here</a>.
As soon as they message you afterwards, the warning will be gone
and guaranteed encryption is established with both devices of your contact.</p>
<p><strong>Your contact reinstalled Delta Chat using their old account login</strong></p>
<p>If they have <a href="#backup">a backup file</a>,
they should remove the profile from the new device
and rather import the backup file to re-create their profile.
As soon as they message you afterwards, the warning will be gone
and guaranteed encryption is re-established for this contact.</p>
<p>If they dont have a backup file, its best to perform a <a href="#howtoe2ee">QR scan</a>
with your chat partner to re-establish guaranteed end-to-end encryption.</p>
<p><strong>Your contact sent a mail through a webmail interface or another e-mail app
and will get back to using Delta Chat soon again.</strong></p>
<p>If you are sure that the contact sometimes uses webmail,
or another mail app lacking end-to-end encryption,
then you may accept the warning.
As soon as your contact uses Delta Chat again,
guaranteed end-to-end encryption will be automatically re-established.</p>
<p><strong>Your contact stopped using Delta Chat entirely</strong></p>
<p>Sometimes remaining in contact is more important than end-to-end encryption.
<a href="#tls">“Transport Layer Encryption” (TLS)</a> may still meaningfully protect
the confidentiality of your messages between your device and the e-mail server.
But without end-to-end encryption you and your contact are trusting your e-mail server
to not read or manipulate your messages, and to not hand them to third parties.</p>
<p>In any case, you can not do much else than accept the warning.
Please also remove the contact from any active green-checkmarked group
which you can find in “Shared chats” in the Contact profile.
This spares your contact from getting “unreadable” messages.</p>
<p>If the contact removed Delta Chat because of buggy or undesirable behaviour,
please consider posting to our <a href="https://support.delta.chat">support forum</a>
to help us identify and address common problems. Thanks!</p>
<h3 id="are-attachments-pictures-files-audio-etc-end-to-end-encrypted"> <h3 id="are-attachments-pictures-files-audio-etc-end-to-end-encrypted">
@ -946,8 +879,7 @@ and attachment metadata such as filenames.</p>
</h3> </h3>
<p>Yes, Delta Chat uses a secure subset of OpenPGP <p>Yes, Delta Chat uses a secure subset of OpenPGP
and only displays a padlock security indicator on a message requiring the whole message to be properly encrypted and signed.
if the whole message is properly encrypted and signed.
For example, “Detached signatures” are not treated as secure.</p> For example, “Detached signatures” are not treated as secure.</p>
<p>OpenPGP is not insecure by itself. <p>OpenPGP is not insecure by itself.
@ -968,7 +900,7 @@ which was thankfully adopted in summer 2023.</p>
<h3 id="openpgp-alternatives"> <h3 id="openpgp-alternatives">
Did you consider using alternatives to OpenPGP for end-to-end -encryption? <a href="#openpgp-alternatives" class="anchor"></a> Did you consider using alternatives to OpenPGP for end-to-end-encryption? <a href="#openpgp-alternatives" class="anchor"></a>
</h3> </h3>
@ -1011,17 +943,15 @@ as defined by the Autocrypt Level 1 specification.</p>
<h3 id="tls"> <h3 id="tls">
Is a message exposed in cleartext if end-to-end encryption is not available? <a href="#tls" class="anchor"></a> Are messages marked with the mail icon exposed on the Internet? <a href="#tls" class="anchor"></a>
</h3> </h3>
<p>Even if your messages are not guaranteed to be end-to-end encrypted, <p>If you are sending or receiving e-mail messages without end-to-end encryption (using a classic e-mail server),
they are still protected from Internet providers like cell or cable companies. they are still protected from cell or cable companies who can not read or modify your e-mail messages.
However, your and your recipients e-mail providers But both your and your recipients e-mail providers
may read, analyze or even modify your messages, may read, analyze or modify your messages, including any attachments.</p>
including any attachments,
if they are not end-to-end encrypted.</p>
<p>Delta Chat by default uses strict <p>Delta Chat by default uses strict
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a> <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a>
@ -1034,10 +964,6 @@ then transport encryption will be enforced between e-mail providers
in which case Delta Chat communications will never be exposed in cleartext to the Internet in which case Delta Chat communications will never be exposed in cleartext to the Internet
even if the message was not end-to-end encrypted.</p> even if the message was not end-to-end encrypted.</p>
<p>Note that <a href="#howtoe2ee">maintaining guaranteed end-to-end encryption</a> on top of TLS encryption
provides pervasive safety between your and the recipients devices.
Not even your e-mail or Internet provider will be able to read or modify your messages.</p>
<h3 id="message-metadata"> <h3 id="message-metadata">
@ -1046,25 +972,25 @@ Not even your e-mail or Internet provider will be able to read or modify your me
</h3> </h3>
<p>Delta Chat protects most message metadata by putting the following information <p>Unlike most other messengers,
into the end-to-end encrypted part of messages:</p> Delta Chat apps do not store any metadata about contacts or groups on servers, also not in encrypted form.
Instead, all group metadata is end-to-end encrypted and stored on end-user devices, only.</p>
<p>E-mail Servers can therefore only see</p>
<ul> <ul>
<li>Subject line</li> <li>
<li>Group avatar and name</li> <p>the message date,</p>
<li>MDN (read receipt) requests (<code class="language-plaintext highlighter-rouge">Chat-Disposition-Notification-To</code>)</li> </li>
<li>Disappearing message timer (<code class="language-plaintext highlighter-rouge">Ephemeral-Timer</code>)</li> <li>
<li><code class="language-plaintext highlighter-rouge">Chat-Group-Member-Removed</code>, <code class="language-plaintext highlighter-rouge">Chat-Group-Member-Added</code></li> <p>sender and receiver addresses</p>
<li><code class="language-plaintext highlighter-rouge">Secure-Join</code> header containing secure join commands</li> </li>
<li>Notification about enabling location streaming</li> <li>
<li>WebRTC room URL</li> <p>and message size.</p>
</li>
</ul> </ul>
<p>E-Mail servers do not get access to this protected metadata <p>All other message, contact and group metadata resides in the end-to-end encrypted part of messages.</p>
but they do see the message date as well as the message size,
and, more importantly, the sender and receiver addresses.
E-mail servers need receiver addresses to route and
deliver messages to recipients devices.</p>
<h3 id="device-seizure"> <h3 id="device-seizure">
@ -1076,96 +1002,34 @@ deliver messages to recipients devices.</p>
<p>Both for protecting against metadata-collecting e-mail servers <p>Both for protecting against metadata-collecting e-mail servers
as well as against the threat of device seizure as well as against the threat of device seizure
we recommend to use a <a href="https://delta.chat/chatmail">chatmail server</a> we recommend to use a <a href="https://chatmail.at/relays">chatmail relay</a>
to create pseudonymous temporary profiles through QR-code scans. to create chat profiles using random e-mail addresses for transport.
Note that Delta Chat apps on all platforms support multiple profiles Note that Delta Chat apps on all platforms support multiple profiles
so you can easily use situation-specific profiles next to your “main” profile so you can easily use situation-specific profiles next to your “main” profile
with the knowledge that all their data, along with all metadata, will be deleted. with the knowledge that all their data, along with all metadata, will be deleted.
Moreover, if a device is seized then contacts using temporary profiles Moreover, if a device is seized then chat contacts using short-lived profiles
can not be identified easily, as compared to messengers which reveal can not be identified easily.</p>
phone numbers in chat groups which in turn are often associated with legal identities.</p>
<h3 id="how-can-i-check-encryption-information"> <h3 id="sealedsender">
How can i check encryption information? <a href="#how-can-i-check-encryption-information" class="anchor"></a> Does Delta Chat support “Sealed Sender”? <a href="#sealedsender" class="anchor"></a>
</h3> </h3>
<p>You may check the end-to-end encryption status manually in the “Encryption” dialog <p>No, not yet.</p>
(user profile on Android/iOS or right-click a users chat-list item on desktop).
Delta Chat shows two fingerprints there.
If the same fingerprints appear on your own and your contacts device,
the connection is safe.</p>
<h3 id="how-can-i-check-the-encryption-status-of-messages"> <p>The Signal messenger introduced <a href="https://signal.org/blog/sealed-sender/">“Sealed Sender” in 2018</a>
to keep their server infrastructure ignorant of who is sending a message to a set of recipients.
It is particularly important because the Signal server knows the mobile number of each account,
which is usually associated with a passport identity.</p>
<p>Even if <a href="https://chatmail.at/relays">chatmail relays</a>
How can I check the encryption status of messages? <a href="#how-can-i-check-the-encryption-status-of-messages" class="anchor"></a> do not ask for any private data (including no phone numbers),
it might still be worthwhile to protect relational metadata between addresses.
We dont foresee bigger problems in using random throw-away e-mail addresses for sealed sending
</h3> but an implementation has not been agreed as a priority yet.</p>
<p>A little <strong>padlock</strong> in a message bubble denotes
that the message was properly end-to-end encrypted from the given sender.
If there is <strong>no padlock</strong>, the message was not properly end-to-end encrypted
most likely because the sender uses an app or webmail interface
without support for end-to-endencryption.</p>
<h3 id="why-do-i-see-unencrypted-messages">
Why do I see unencrypted messages? <a href="#why-do-i-see-unencrypted-messages" class="anchor"></a>
</h3>
<p>If a contact uses a non-Autocrypt e-mail app,
all messages involving this contact (in a group or 1:1 chat)
will not be end-to-end encrypted, and thus not show a “padlock” with messages.
Note that even if your contacts use Delta Chat on their account,
they might also use a non-Autocrypt e-mail app on that account
which then may cause intermittently unencrypted messages.
Replying unencrypted to unencrypted messages is mandated by Autocrypt
to prevent unreadable messages on the side of your contacts
and their non-Autocrypt e-mail app.</p>
<h3 id="how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app">
How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app? <a href="#how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app" class="anchor"></a>
</h3>
<p>If you need a safely end-to-end encrypted chat with a contact
who is using their e-mail account both with Delta Chat and non-Autocrypt apps (e.g. webmail),
its best to setup <a href="#howtoe2ee">guaranteed end-to-end encryption with them</a>
and then create a guaranteed end-to-end encrypted group chat with you two as members.
In this group chat all messages will be end-to-end encrypted
even if the direct chat between you two has a
<a href="#nocryptanymore">“… sent a message from another device”</a> warning.</p>
<h3 id="how-can-i-ensure-message-end-to-end-encryption-and-deletion">
How can I ensure message end-to-end encryption and deletion? <a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion" class="anchor"></a>
</h3>
<p>The best way to ensure every message is end-to-end encrypted,
and metadata deleted as quickly as possible
is <a href="#howtoe2ee">using chats with guaranteed end-to-end encryption</a>
and turning on <a href="#ephemeralmsgs">disappearing messages</a>.</p>
<p>Guaranteed end-to-end encrypted chats protect against <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM attacks</a>
and turning on disappearing messages deletes the messages
on the server after a user-configured time.</p>
<p>If you dont need a longer-lived copy of your messages on the server,
you can also turn on <a href="#delold">“delete messages from server automatically”</a>.</p>
<h3 id="pfs"> <h3 id="pfs">
@ -1175,45 +1039,52 @@ you can also turn on <a href="#delold">“delete messages from server automatica
</h3> </h3>
<p>No, Delta Chat doesnt support Perfect Forward Secrecy (PFS). <p>No, not yet.</p>
This means that if your Delta Chat private decryption key is leaked,
<p>Delta Chat today doesnt support Perfect Forward Secrecy (PFS).
This means that if your private decryption key is leaked,
and someone has collected your prior in-transit messages, and someone has collected your prior in-transit messages,
they will be able to decrypt and read them using the leaked decryption key.</p> they will be able to decrypt and read them using the leaked decryption key.
Note that Forward Secrecy only increases security if you delete messages.
Otherwise, someone obtaining your decryption keys
is typically also able to get all your non-deleted messages
and doesnt even need to decrypt any previously collected messages.</p>
<p>Note, however, that if anyone obtains to your decryption keys, <p>We designed a Forward Secrecy approach that withstood
they will typically also be able to obtain your messages, initial examination from some cryptographers and implementation experts
irrespective if Perfect Forward Secrecy is in place or not. but is pending a more formal write up
The typical real-world situation for leaked decryption keys is device seizure to ascertain it reliably works in federated messaging and with multi-device usage,
which we discuss in our answer <a href="#device-seizure">on metadata and device seizure</a>.</p> before it could be implemented in <a href="https://github.com/chatmail/core">chatmail core</a>,
which would make it available in all <a href="https://chatmail.at/clients">chatmail clients</a>.</p>
<p>It is possible that Delta Chat evolves to support Perfect Forward Secrecy, <h3 id="pqc">
because OpenPGP is just a container for encrypted messages
but encryption key management (and thus key rotation or key “ratcheting”)
could be organized in flexible ways.
See <a href="https://gitlab.com/sequoia-pgp/openpgp-dr">Seqouias PFS prototype</a>
for existing experiments in the OpenPGP implementor community.</p>
<h3 id="is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">
Is end-to-end encryption of Delta Chat as safe as Signal? <a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal" class="anchor"></a> Does Delta Chat support Post-Quantum-Cryptography? <a href="#pqc" class="anchor"></a>
</h3> </h3>
<p>It depends on what is important to you. <p>No, not yet.</p>
Delta Chat <a href="#pfs">does not support PFS</a> like Signal does
but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</a>
that are safe against compromised servers or corrupted networks.
Signal and most other PFS-supporting messengers do not provide
a practical scheme for protecting chat groups from network attacks
which are arguably more worrisome
than a potential attacker who seizes your phone and private encryption setup
but somehow not your messages, yet has a full record of all
past encrypted messages.</p>
<p>In any case, Delta Chats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a> <p>Delta Chat uses the Rust OpenPGP library <a href="https://github.com/rpgp/rpgp">rPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p> which supports the latest <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/">IETF Post-Quantum-Cryptography OpenPGP draft</a>.
We aim to add PQC support in <a href="https://github.com/chatmail/core">chatmail core</a> after the draft is finalized at the IETF
in collaboration with other OpenPGP implementers.</p>
<h3 id="how-can-i-manually-check-encryption-information">
How can I manually check encryption information? <a href="#how-can-i-manually-check-encryption-information" class="anchor"></a>
</h3>
<p>You may check the end-to-end encryption status manually in the “Encryption” dialog
(user profile on Android/iOS or right-click a users chat-list item on desktop).
Delta Chat shows two fingerprints there.
If the same fingerprints appear on your own and your contacts device,
the connection is safe.</p>
<h3 id="importkey"> <h3 id="importkey">
@ -1248,7 +1119,7 @@ from most recent to older:</p>
<li> <li>
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of <p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place. rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat. rPGP serves as the end-to-end encryption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
Two advisories were released related to the findings of this audit:</p> Two advisories were released related to the findings of this audit:</p>
<ul> <ul>
@ -1495,9 +1366,10 @@ copies on the devices of your chat partners. Other than that, its completely
isolated from the Internet.</li> isolated from the Internet.</li>
<li>The privacy a webxdc app offers is the privacy of your chat - as long as you <li>The privacy a webxdc app offers is the privacy of your chat - as long as you
trust the people you chat with, you can trust the webxdc app as well.</li> trust the people you chat with, you can trust the webxdc app as well.</li>
<li>This also means: it can be a privacy risk to open webxdc apps in chats where <li>This also means: it can be a privacy risk to open apps in chats with untrusted members.
you dont trust the members - as you know it from e-mail attachments, where Just like with e-mail attachments, video calls or plain links:
you only open attachments from senders you trust, and not from spammers.</li> open them only from senders you trust, and not from spammers.
Spammers can get to know any data you send to them, as well as your IP address.</li>
</ul> </ul>
<h3 id="where-can-i-get-webxdc-apps"> <h3 id="where-can-i-get-webxdc-apps">
@ -1581,21 +1453,10 @@ this way, you will have a new random Jitsi room every time you call someone.</li
</h3> </h3>
<ul> <p>With a Broadcast List you can send a message to many recipients at once;
<li>With a Broadcast List you can send a message to many recipients at once; when the recipients cannot reply in that list.
they reply to you, you get the reply in your direct 1:1 chat with them. The Broadcast lists are still highly experimental
recipients cant see each other.</li> and will very probably be replaced by something else, stay tuned :)</p>
<li>Technically, it is an E-Mail with many recipients in BCC.</li>
<li>You can turn on the feature in the “experimental features” section in the
advanced settings. Then you can create a Broadcast List from the “New Chat”
dialog.</li>
<li>In case you are using more than one device, Broadcast Lists are currently not
synced between them.</li>
<li>Messages sent to broadcast lists are not encrypted. Encryption would break
anonymity, because then all recipients would know who else received it
(Sending individual mails to everyone would be worse for rate limit and network
consumption reason).</li>
</ul>
<h3 id="how-can-i-share-my-location-with-my-chat-partners"> <h3 id="how-can-i-share-my-location-with-my-chat-partners">
@ -1652,6 +1513,11 @@ seria feito pelo aplicativo Delta Chat.</p>
</h3> </h3>
<p>Note:
Changing email addresses is temporarily disabled
because of ongoing changes to the DeltaChat core.
It should be available again in a few months.</p>
<ol> <ol>
<li> <li>
<p>Change your address in “Settings → Advanced → Password and Account” and <p>Change your address in “Settings → Advanced → Password and Account” and
@ -1752,19 +1618,19 @@ No entanto, alguns provedores precisam de opções especiais para funcionar corr
ver <a href="https://providers.delta.chat">Visão Geral dos Provedores</a></li> ver <a href="https://providers.delta.chat">Visão Geral dos Provedores</a></li>
</ul> </ul>
<h3 id="i-want-to-manage-my-own-e-mail-server-for-delta-chat-what-do-you-recommend"> <h3 id="i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">
I want to manage my own e-mail server for Delta Chat. What do you recommend? <a href="#i-want-to-manage-my-own-e-mail-server-for-delta-chat-what-do-you-recommend" class="anchor"></a> I want to manage my own server for Delta Chat. What do you recommend? <a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend" class="anchor"></a>
</h3> </h3>
<ul> <ul>
<li>Most mail servers will work well. But what we personally recommend is a <li>Most mail servers will work well. But what we personally recommend is a
combination of mailcow and mailadm, as described <a href="https://delta.chat/en/2023-01-27-upcoming-mail-server-workshops">in this chatmail relay server, as described <a href="https://delta.chat/en/2023-12-13-chatmail">in this
blogpost</a>.</li> blogpost</a>.</li>
<li>You can find an <a href="https://delta.chat/pt/serverguide">installation guide on our website</a>.</li> <li>You can find an <a href="https://github.com/chatmail/relay">installation guide on GitHub</a>.</li>
</ul> </ul>
<h3 id="por-que-preciso-entrar-com-a-senha-do-meu-email-no-delta-chat-isso-é-seguro"> <h3 id="por-que-preciso-entrar-com-a-senha-do-meu-email-no-delta-chat-isso-é-seguro">

View file

@ -36,27 +36,24 @@
<li><a href="#почему-delta-chat-интегрируется-с-централизованными-проприетарными-push-сервисами-applegoogle">Почему Delta Chat интегрируется с централизованными проприетарными Push-сервисами Apple/Google?</a></li> <li><a href="#почему-delta-chat-интегрируется-с-централизованными-проприетарными-push-сервисами-applegoogle">Почему Delta Chat интегрируется с централизованными проприетарными Push-сервисами Apple/Google?</a></li>
</ul> </ul>
</li> </li>
<li><a href="#шифрование-и-безопасность">Шифрование и безопасность</a> <li><a href="#e2ee">Шифрование и безопасность</a>
<ul> <ul>
<li><a href="#какие-стандарты-используются-для-сквозного-шифрования">Какие стандарты используются для сквозного шифрования?</a></li> <li><a href="#какие-стандарты-используются-для-сквозного-шифрования">Какие стандарты используются для сквозного шифрования?</a></li>
<li><a href="#whene2e">Как узнать зашифрованы ли сообщения сквозным шифрованием?</a></li> <li><a href="#whene2e">Как узнать зашифрованы ли сообщения сквозным шифрованием?</a></li>
<li><a href="#howtoe2ee">Как получить гарантированное сквозное шифрование и зелёные галочки?</a></li> <li><a href="#могу-ли-я-получать-или-отправлять-письма-без-сквозного-шифрования">Могу ли я получать или отправлять письма без сквозного шифрования?</a></li>
<li><a href="#e2eeguarantee">Что означает зелёная галочка и “гарантированное сквозное шифрование”?</a></li> <li><a href="#howtoe2ee">Как мне установить чат с новым контактом?</a></li>
<li><a href="#nocryptanymore">Контакт “отправил сообщение с другого устройства”, что делать?</a></li> <li><a href="#e2eeguarantee">Что означает зеленая галочка в профиле контакта?</a></li>
<li><a href="#зашифрованы-ли-вложения-изображения-файлы-аудио-и-т-д-сквозным-шифрованием">Зашифрованы ли вложения (изображения, файлы, аудио и т. д.) сквозным шифрованием?</a></li> <li><a href="#зашифрованы-ли-вложения-изображения-файлы-аудио-и-т-д-сквозным-шифрованием">Зашифрованы ли вложения (изображения, файлы, аудио и т. д.) сквозным шифрованием?</a></li>
<li><a href="#openpgp-secure">OpenPGP безопасен?</a></li> <li><a href="#openpgp-secure">OpenPGP безопасен?</a></li>
<li><a href="#openpgp-alternatives">Рассматривали ли вы альтернативы OpenPGP для сквозного шифрования?</a></li> <li><a href="#openpgp-alternatives">Рассматривали ли вы альтернативы OpenPGP для сквозного шифрования?</a></li>
<li><a href="#подвержен-ли-delta-chat-уязвимости-efail">Подвержен ли Delta Chat уязвимости EFAIL?</a></li> <li><a href="#подвержен-ли-delta-chat-уязвимости-efail">Подвержен ли Delta Chat уязвимости EFAIL?</a></li>
<li><a href="#tls">Будет ли сообщение передано в открытом виде, если сквозное шифрование недоступно?</a></li> <li><a href="#tls">Видны ли в Интернете сообщения, отмеченные значком почты?</a></li>
<li><a href="#message-metadata">Как Delta Chat защищает метаданные в сообщениях?</a></li> <li><a href="#message-metadata">Как Delta Chat защищает метаданные в сообщениях?</a></li>
<li><a href="#device-seizure">Как защитить метаданные и контакты при изъятии устройства?</a></li> <li><a href="#device-seizure">Как защитить метаданные и контакты при изъятии устройства?</a></li>
<li><a href="#как-я-могу-проверить-информацию-о-шифровании">Как я могу проверить информацию о шифровании?</a></li> <li><a href="#sealedsender">Поддерживает ли Delta Chat функцию “Sealed Sender” (Засекреченный отправитель)?</a></li>
<li><a href="#как-я-могу-проверить-статус-шифрования-сообщений">Как я могу проверить статус шифрования сообщений?</a></li> <li><a href="#pfs">Поддерживает ли Delta Chat свойство Perfect forward secrecy, PFS (Совершенную прямую секретность)?</a></li>
<li><a href="#почему-я-вижу-незашифрованные-сообщения">Почему я вижу незашифрованные сообщения?</a></li> <li><a href="#pqc">Поддерживает ли Delta Chat Post-Quantum-Cryptography (Постквантовую криптографию)?</a></li>
<li><a href="#как-я-могу-получить-зашифрованный-сквозным-шифрованием-чат-с-контактом-delta-chat-который-иногда-использует-веб-почту-или-другое-приложение-электронной-почты-не-поддерживающее-autocrypt">Как я могу получить зашифрованный сквозным шифрованием чат с контактом Delta Chat, который иногда использует веб-почту или другое приложение электронной почты, не поддерживающее Autocrypt?</a></li> <li><a href="#как-можно-вручную-проверить-информацию-о-шифровании">Как можно вручную проверить информацию о шифровании?</a></li>
<li><a href="#как-я-могу-обеспечить-сквозное-шифрование-и-удаление-сообщений">Как я могу обеспечить сквозное шифрование и удаление сообщений?</a></li>
<li><a href="#pfs">Поддерживает ли Delta Chat совершенную прямую секретность (Perfect forward secrecy, PFS)?</a></li>
<li><a href="#является-ли-сквозное-шифрование-delta-chat-таким-же-безопасным-как-signal">Является ли сквозное шифрование Delta Chat таким же безопасным как Signal?</a></li>
<li><a href="#importkey">Можно ли повторно использовать существующий секретный ключ?</a></li> <li><a href="#importkey">Можно ли повторно использовать существующий секретный ключ?</a></li>
<li><a href="#security-audits">Проходил ли Delta Chat независимую проверку на наличие уязвимостей безопасности?</a></li> <li><a href="#security-audits">Проходил ли Delta Chat независимую проверку на наличие уязвимостей безопасности?</a></li>
</ul> </ul>
@ -90,7 +87,7 @@
<ul> <ul>
<li><a href="#какие-разрешения-нужны-delta-chat">Какие разрешения нужны Delta Chat?</a></li> <li><a href="#какие-разрешения-нужны-delta-chat">Какие разрешения нужны Delta Chat?</a></li>
<li><a href="#работает-ли-delta-chat-с-моим-провайдером-электронной-почты">Работает ли Delta Chat с <em>моим</em> провайдером электронной почты?</a></li> <li><a href="#работает-ли-delta-chat-с-моим-провайдером-электронной-почты">Работает ли Delta Chat с <em>моим</em> провайдером электронной почты?</a></li>
<li><a href="#я-хочу-управлять-своим-собственным-почтовым-сервером-для-delta-chat-что-вы-посоветуете">Я хочу управлять своим собственным почтовым сервером для Delta Chat. Что вы посоветуете?</a></li> <li><a href="#я-хочу-управлять-своим-собственным-сервером-для-delta-chat-что-вы-посоветуете">Я хочу управлять своим собственным сервером для Delta Chat. Что вы посоветуете?</a></li>
<li><a href="#почему-я-должен-вводить-свой-пароль-от-электронной-почты-в-delta-chat-это-безопасно">Почему я должен вводить свой пароль от электронной почты в Delta Chat? Это безопасно?</a></li> <li><a href="#почему-я-должен-вводить-свой-пароль-от-электронной-почты-в-delta-chat-это-безопасно">Почему я должен вводить свой пароль от электронной почты в Delta Chat? Это безопасно?</a></li>
<li><a href="#какие-сообщения-отображаются-в-delta-chat">Какие сообщения отображаются в Delta Chat?</a></li> <li><a href="#какие-сообщения-отображаются-в-delta-chat">Какие сообщения отображаются в Delta Chat?</a></li>
<li><a href="#может-ли-delta-chat-работать-с-электронными-письмами-в-формате-html">Может ли Delta Chat работать с электронными письмами в формате HTML?</a></li> <li><a href="#может-ли-delta-chat-работать-с-электронными-письмами-в-формате-html">Может ли Delta Chat работать с электронными письмами в формате HTML?</a></li>
@ -719,10 +716,10 @@ Push-уведомления недоступны.</p>
включая потенциальный сервер, который <a href="https://delta.chat/chatmail#selfhosted">вы можете настроить самостоятельно без нашего разрешения.</a>. включая потенциальный сервер, который <a href="https://delta.chat/chatmail#selfhosted">вы можете настроить самостоятельно без нашего разрешения.</a>.
Добро пожаловать в мир мощной и совместимой системы chatmail и электронной почты :)</p> Добро пожаловать в мир мощной и совместимой системы chatmail и электронной почты :)</p>
<h2 id="шифрование-и-безопасность"> <h2 id="e2ee">
Шифрование и безопасность <a href="#шифрование-и-безопасность" class="anchor"></a> Шифрование и безопасность <a href="#e2ee" class="anchor"></a>
</h2> </h2>
@ -735,18 +732,26 @@ Push-уведомления недоступны.</p>
</h3> </h3>
<p><a href="https://autocrypt.org">Autocrypt</a> используется для автоматической <p>Delta Chat использует <a href="#openpgp-secure">безопасное подмножество стандарта OpenPGP</a>
установки сквозного шифрования при работе с контактами и групповыми чатами. для реализации автоматического сквозного шифрования c помощью следующих протоколов:</p>
Autocrypt использует ограниченное и <a href="#openpgp-secure">безопасное подмножество стандарта OpenPGP</a>.
Сообщения, зашифрованные сквозным шифрованием, помечаются замком
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../lock-icon.png" alt="padlock" />.</p>
<p><a href="https://securejoin.delta.chat/en/latest/new.html">Протоколы Secure-Join</a> <ul>
используются для создания чатов с гарантированным сквозным шифрованием, <li>
которое защищает от сетевых атак и скомпрометированных серверов. <p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join</a>
Чаты, отмеченные зелёной галочкой для обмена информацией о настройке шифрования через сканирование QR-кода или “ссылок-приглашений”.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> </li>
гарантируют сквозное шифрование сообщений.</p> <li>
<p><a href="https://autocrypt.org">Autocrypt</a> используется для автоматической
настройки сквозного шифрования между контактами и всеми членами группового чата.</p>
</li>
<li>
<p><a href="https://github.com/chatmail/core/blob/main/spec.md#attaching-a-contact-to-a-message">Обмен контактом в
чате</a>
позволяет получателям настроить сквозное шифрование с этим контактом.</p>
</li>
</ul>
<p>Delta Chat не запрашивает, не публикует и не взаимодействует с какими-либо серверами ключей OpenPGP.</p>
<h3 id="whene2e"> <h3 id="whene2e">
@ -756,28 +761,37 @@ Autocrypt использует ограниченное и <a href="#openpgp-sec
</h3> </h3>
<p>Все сообщения, зашифрованные сквозным шифрованием, имеют значок замка:</p> <p>Все сообщения в Delta Chat <strong>по умолчанию шифруются сквозным шифрованием</strong>.
С момента выхода серии релизов Delta Chat версии 2 (июль 2025 года)
на сообщениях со сквозным шифрованием больше не отображаются замки или другие подобные индикаторы.</p>
<p><img style="width:160px; margin:1px" src="../lock-screenshot.png" alt="Значок замка в пузырьке" /></p> <h3 id="могу-ли-я-получать-или-отправлять-письма-без-сквозного-шифрования">
<p>Сквозное шифрование гарантировано, если рядом с заголовком чата стоит зелёная галочка:</p>
<p><img style="width:211px; margin:1px" src="../green-checkmark-screenshot.png" alt="Зелёная галочка в заголовке" /></p>
<h3 id="howtoe2ee">
Как получить гарантированное сквозное шифрование и зелёные галочки? <a href="#howtoe2ee" class="anchor"></a> Могу ли я получать или отправлять письма без сквозного шифрования? <a href="#могу-ли-я-получать-или-отправлять-письма-без-сквозного-шифрования" class="anchor"></a>
</h3> </h3>
<p>Если у вас есть второй канал связи с вашим собеседником, <p>Если вы используете стандартные <a href="https://chatmail.at/relays">ретрансляторы chatmail</a>,
например, видеочат или другой мессенджер, невозможно получать или отправлять сообщения без сквозного шифрования.</p>
вы можете создать ссылку-приглашение.</p>
<p>Если вы встретились лично с собеседником, <p>Если же вы создаёте профиль с использованием обычного почтового сервера,
вы можете показать ему свой QR-код.</p> то можете отправлять и получать сообщения без сквозного шифрования.
Такие сообщения, не имеющие сквозного шифрования, отмечаются значком электронной почты
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
<h3 id="howtoe2ee">
Как мне установить чат с новым контактом? <a href="#howtoe2ee" class="anchor"></a>
</h3>
<p>Вы можете отправить ссылку-приглашение через другой личный чат,
показать QR-код приглашения, когда вы рядом или во время видеозвонка,
или нажать на “контакт”, которым поделились в чате.</p>
<ul> <ul>
<li> <li>
@ -792,135 +806,53 @@ Autocrypt использует ограниченное и <a href="#openpgp-sec
</li> </li>
</ul> </ul>
<p>Позвольте вашему собеседнику отсканировать QR-код <p>Попросите вашего собеседника отсканировать QR-код
с помощью приложения Delta Chat, с помощью приложения Delta Chat,
или нажмите “Копировать” или “Поделиться”, чтобы создать ссылку-приглашение или нажмите “Копировать” или “Поделиться”, чтобы создать ссылку-приглашение
и отправьте её вашему собеседнику.</p> и отправьте её вашему собеседнику.</p>
<p>Теперь ожидайте, пока <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">сообщения Secure-Join</a> будут переданы между обоими устройствами.</p> <p>Теперь дождитесь, <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">пока устанавливается сквозное шифрование</a>.</p>
<ul> <ul>
<li> <li>
<p>Если оба устройства находятся в сети, <p>Если оба участника онлайн, они вскоре увидят (групповой или прямой) чат
обе стороны в конечном итоге увидят (групповой или прямой) чат с зелёной галочкой и смогут начать защищённую переписку.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="зелёная галочка" />
рядом с названием.</p>
</li> </li>
<li> <li>
<p>Если одно из устройств не подключено к сети, зелёные галочки появятся только после того, <p>Если одна из сторон не в сети или имеет плохое соединение,
как устройство снова подключится к Интернету возможность переписки будет отложена до восстановления связи.</p>
и сетевой протокол Secure-Join будет завершён.</p>
</li> </li>
</ul> </ul>
<p>Поздравляем! <p>Поздравляем!
Теперь вы будете автоматически использовать гарантированное сквозное шифрование Теперь вы автоматически будете использовать сквозное шифрование с данным контактом.
с этим контактом, и вы оба сможете добавлять друг друга в группы, отмеченные зелёной галочкой Если вы добавите друг друга в групповые чаты,
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="зелёная галочка" />, сквозное шифрование будет настроено для всех участников.</p>
тем самым автоматически распространяя гарантированное сквозное шифрование среди её участников.</p>
<h3 id="e2eeguarantee"> <h3 id="e2eeguarantee">
Что означает зелёная галочка и “гарантированное сквозное шифрование”? <a href="#e2eeguarantee" class="anchor"></a> Что означает зеленая галочка в профиле контакта? <a href="#e2eeguarantee" class="anchor"></a>
</h3> </h3>
<p>Чаты, помеченные зелёными галочками <p>В профиле контакта может отображаться зелёная галочка
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="зелёная галочка" /> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="зелёная галочка" />
означают, что все сообщения в чате будут зашифрованы сквозным шифрованием и строка “Подтверждён пользователем”.
и не могут быть прочитаны или изменены скомпрометированными серверами электронной почты или интернет-провайдерами. Каждый контакт с зелёной галочкой либо выполнил непосредственное сканирование <a href="#howtoe2ee">QR-кода</a> с вами,
Присоединение к групповым чатам с зелёной галочкой либо был подтверждён другим контактом с зелёной галочкой.
безопасно распространяет информацию о шифровании всех участников (и зелёные галочки) Подтверждения происходят автоматически при добавлении участников в группы.
таким образом, чтобы гарантировать сквозное шифрование в группе и между её участниками.</p> Тот, кто добавляет контакт с зелёной галочкой в группу, где только участники с зелёными галочками,
становится подтверждающим.
<p>Профили контактов с зелёной галочкой В профиле контакта вы можете последовательно нажимать на текст “Подтверждён …” до тех пор,
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="зелёная галочка" /> пока не дойдёте до того, с кем вы напрямую выполнили сканирование <a href="#howtoe2ee">QR-кода</a>.</p>
означают, что отправка сообщений контакту в настоящее время гарантированно зашифрована сквозным шифрованием.
Каждый контакт с зелёной галочкой либо совершил с вами прямое <a href="#howtoe2ee">QR-сканирование</a>,
либо был представлен другим контактом с зелёной галочкой.
Знакомство происходит автоматически при добавлении участников в группы.
Тот, кто добавляет контакт в группу, отмеченную зелёной галочкой, становится представителем
для тех участников, которые еще не знают о добавленном контакте.
В профиле контакта можно несколько раз нажать на текст “Представлен …” несколько раз
пока не дойдёте до того, с кем вы непосредственно провели <a href="#howtoe2ee">QR-сканирование</a>.</p>
<p>Обратите внимание, что в профиле контакта вы можете увидеть и присоединённых знакомых,
но в заголовке профиля нет зелёной галочки.
Обычно это означает, что контакт <a href="#nocryptanymore">“отправил сообщение с другого устройства”</a>.</p>
<p>Для более подробного обсуждения “гарантированного сквозного шифрования” <p>Для более подробного обсуждения “гарантированного сквозного шифрования”
пожалуйста, обратитесь к <a href="https://securejoin.delta.chat/en/latest/new.html">протоколам Secure-Join</a> пожалуйста, обратитесь к <a href="https://securejoin.delta.chat/en/latest/new.html">протоколам Secure-Join</a>
и прочитайте о “Проверенных группах”, техническом термине, и прочитайте о “Проверенных группах”, техническом термине,
который здесь называется “группами с зелёной галочкой” или чатами с “гарантированным сквозным шифрованием”.</p> который здесь называется “группами с зелёной галочкой” или чатами с “гарантированным сквозным шифрованием”.</p>
<h3 id="nocryptanymore">
Контакт “отправил сообщение с другого устройства”, что делать? <a href="#nocryptanymore" class="anchor"></a>
</h3>
<p>Ваш чат с контактом утратил гарантированное сквозное шифрование.
Зелёная галочка была удалена для этого чата и контакта, и когда вы увидели предупреждение.
<strong>Если вы обнаружили внезапное прекращение гарантированного сквозного шифрования
для этого контакта, не принимайте предупреждение!</strong>
Вместо этого свяжитесь со своим контактом по второму каналу,
например, видеозвонок, другой мессенджер или телефонный звонок,
чтобы узнать, что произошло.</p>
<p>Если ваш контакт стал причиной потери гарантированного сквозного шифрования,
пожалуйста, ознакомьтесь с распространёнными причинами и способами их устранения в следующих параграфах.
Независимо от этого, все остальные чаты, отмеченные зелёной галочкой, остаются гарантированно зашифрованными сквозным шифрованием,
даже если этот контакт является его участником.</p>
<p><strong>Ваш контакт использует Delta Chat на втором устройстве (телефоне или ноутбуке)</strong></p>
<p>Если у него есть другое устройство с запущенным приложением Delta Chat,
ему следует удалить учётную запись с нового устройства
и добавить его <a href="#multiclient">как второе устройство, как описано здесь</a>.
После того, как он отправит вам сообщение, предупреждение исчезнет
и гарантированное шифрование будет установлено на обоих устройствах вашего собеседника.</p>
<p><strong>Ваш контакт переустановил Delta Chat, используя старые учетные данные для входа</strong></p>
<p>Если у него есть <a href="#backup">файл резервной копии</a>,
ему следует удалить профиль с нового устройства
и вместо этого импортировать резервную копию для восстановления своего профиля.
После того, как он отправит вам сообщение, предупреждение исчезнет,
и гарантированное шифрование будет восстановлено для этого контакта.</p>
<p>Если у него нет файла резервной копии, лучше всего выполнить <a href="#howtoe2ee">сканирование QR-кода</a>
с вашим собеседником, чтобы восстановить гарантированное сквозное шифрование.</p>
<p><strong>Ваш контакт отправил письмо через интерфейс веб-почты или другое приложение электронной почты
и снова вернулся к использованию Delta Chat.</strong></p>
<p>Если вы уверены, что ваш контакт иногда использует веб-почту
или другое приложение электронной почты, в котором отсутствует сквозное шифрование,
то вы можете принять предупреждение.
Как только контакт снова начнёт использовать Delta Chat,
гарантированное сквозное шифрование будет автоматически восстановлено.</p>
<p><strong>Ваш контакт полностью прекратил использование Delta Chat</strong></p>
<p>Иногда оставаться на связи важнее, чем сквозное шифрование.
<a href="#tls">“Протокол защиты транспортного уровня” (TLS)</a> всё ещё может существенно защитить
конфиденциальность ваших сообщений между вашим устройством и сервером электронной почты.
Но без сквозного шифрования вы и ваш контакт должны доверять серверу электронной почты,
который не должен читать и манипулировать вашими сообщениями, и не передавать их третьим лицам.</p>
<p>В любом случае, вы ничего не можете сделать, кроме как принять предупреждение.
Также удалите контакт из любой активной группы, отмеченной зелёной галочкой,
которую можно найти в разделе “Общие чаты” в профиле контакта.
Это избавит ваш контакт от получения “не читаемых” сообщений.</p>
<p>Если контакт удалил Delta Chat из-за ошибок или нежелательного поведения,
пожалуйста, подумайте о том, чтобы поделиться этой информацией на нашем <a href="https://support.delta.chat">форуме поддержки</a>,
чтобы помочь нам выявить и устранить общие проблемы. Спасибо!</p>
<h3 id="зашифрованы-ли-вложения-изображения-файлы-аудио-и-т-д-сквозным-шифрованием"> <h3 id="зашифрованы-ли-вложения-изображения-файлы-аудио-и-т-д-сквозным-шифрованием">
@ -945,9 +877,8 @@ Autocrypt использует ограниченное и <a href="#openpgp-sec
</h3> </h3>
<p>Да, Delta Chat использует безопасное подмножество OpenPGP <p>Да, Delta Chat использует безопасное подмножество OpenPGP
и отображает индикатор безопасности в виде замка только, требующее, чтобы всё сообщение было правильно зашифровано и подписано.
если всё сообщение правильно зашифровано и подписано. Например, “Отделённые подписи” не считаются безопасными.</p>
Например, “Отдельные подписи” не считаются безопасными.</p>
<p>OpenPGP сам по себе не является небезопасным. <p>OpenPGP сам по себе не является небезопасным.
Большинство обсуждаемых в публичной сфере проблем безопасности OpenPGP Большинство обсуждаемых в публичной сфере проблем безопасности OpenPGP
@ -1010,17 +941,15 @@ Delta Chat вместо этого использует реализацию Ope
<h3 id="tls"> <h3 id="tls">
Будет ли сообщение передано в открытом виде, если сквозное шифрование недоступно? <a href="#tls" class="anchor"></a> Видны ли в Интернете сообщения, отмеченные значком почты? <a href="#tls" class="anchor"></a>
</h3> </h3>
<p>Даже если не гарантируется сквозное шифрование ваших сообщений, <p>Если вы отправляете или получаете электронные сообщения без сквозного шифрования (используя классический почтовый сервер),
они все равно защищены от интернет-провайдеров, сотовых операторов или кабельных компаний. они всё равно защищены от операторов сотовой связи или интернет-провайдеров, которые не могут прочитать или изменить ваши электронные сообщения.
Однако провайдеры электронной почты, ваш и ваших получателей Однако и ваш почтовый провайдер, и почтовый провайдер вашего получателя
могут читать, анализировать или даже изменять ваши сообщения, могут читать, анализировать или изменять ваши сообщения, включая любые вложения.</p>
включая любые вложения,
если они не зашифрованы сквозным шифрованием.</p>
<p>Delta Chat по умолчанию использует строгое <p>Delta Chat по умолчанию использует строгое
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS-шифрование</a>, <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS-шифрование</a>,
@ -1033,10 +962,6 @@ Delta Chat вместо этого использует реализацию Ope
В этом случае сообщения Delta Chat никогда не будут переданы в открытом виде через Интернет, В этом случае сообщения Delta Chat никогда не будут переданы в открытом виде через Интернет,
даже если сообщение не было зашифровано сквозным шифрованием.</p> даже если сообщение не было зашифровано сквозным шифрованием.</p>
<p>Обратите внимание, что <a href="#howtoe2ee">поддержание гарантированного сквозного шифрования</a> поверх шифрования TLS
обеспечивает полную безопасность между вашими устройствами и устройствами получателя.
Ни ваш провайдер электронной почты, ни провайдер Интернета не смогут прочитать или изменить ваши сообщения.</p>
<h3 id="message-metadata"> <h3 id="message-metadata">
@ -1045,25 +970,25 @@ Delta Chat вместо этого использует реализацию Ope
</h3> </h3>
<p>Delta Chat защищает большинство метаданных сообщений, помещая следующую информацию, <p>В отличие от большинства других мессенджеров,
в зашифрованную сквозным шифрованием часть сообщений:</p> приложения Delta Chat не сохраняют никакие метаданные о контактах или группах на серверах, даже в зашифрованной форме.
Вместо этого все групповые метаданные шифруются сквозным шифрованием и хранятся исключительно на устройствах конечных пользователей.</p>
<p>Поэтому, почтовые серверы имеют доступ только к</p>
<ul> <ul>
<li>Тема сообщения</li> <li>
<li>Аватар и название группы</li> <p>дате сообщения,</p>
<li>Запросы MDN (уведомление о прочтении) (<code class="language-plaintext highlighter-rouge">Chat-Disposition-Notification-To</code>)</li> </li>
<li>Таймер исчезающих сообщений (<code class="language-plaintext highlighter-rouge">Ephemeral-Timer</code>)</li> <li>
<li>Участник-группы-чата-удалён (<code class="language-plaintext highlighter-rouge">Chat-Group-Member-Removed</code>); Участник-группы-чата-добавлен (<code class="language-plaintext highlighter-rouge">Chat-Group-Member-Added</code>)</li> <p>адресам отправителя и получателя</p>
<li>Заголовок <code class="language-plaintext highlighter-rouge">Secure-Join</code>, содержащий команды безопасного соединения</li> </li>
<li>Уведомление о включении потоковой передачи местоположения</li> <li>
<li>URL-адрес комнаты WebRTC</li> <p>и размеру сообщения.</p>
</li>
</ul> </ul>
<p>Серверы электронной почты не получают доступ к этим защищённым метаданным, <p>Все прочие метаданные сообщений, контактов и групп содержатся в части сообщений, защищённой сквозным шифрованием.</p>
но они видят дату сообщения, а также его размер,
и, что более важно, адреса отправителя и получателя.
Серверам электронной почты нужны адреса получателей для маршрутизации и
доставки сообщений на устройства получателей.</p>
<h3 id="device-seizure"> <h3 id="device-seizure">
@ -1075,20 +1000,80 @@ Delta Chat вместо этого использует реализацию Ope
<p>Для защиты от серверов электронной почты, собирающих метаданные, <p>Для защиты от серверов электронной почты, собирающих метаданные,
а также от угрозы конфискации устройства, а также от угрозы конфискации устройства,
мы рекомендуем использовать <a href="https://delta.chat/chatmail">сервер chatmail</a>, мы рекомендуем использовать <a href="https://chatmail.at/relays">релей chatmail</a>
для создания безымянных (псевдонимных), временных профилей через сканирование QR-кодов. для создания чат-профилей с использованием случайных электронных адресов для передачи сообщений.
Обратите внимание, что приложения Delta Chat на всех платформах поддерживают несколько профилей, Обратите внимание, что приложения Delta Chat на всех платформах поддерживают несколько профилей,
так что вы можете легко использовать отдельные профили, для конкретной ситуации, так что вы можете легко использовать отдельные профили, для конкретной ситуации, помимо вашего “основного” профиля,
помимо вашего “основного” профиля,
зная, что все их данные, вместе с метаданными, будут удалены. зная, что все их данные, вместе с метаданными, будут удалены.
Кроме того, если устройство будет конфисковано, контакты, использующие временные профили, Кроме того, если устройство изъято, контакты, использующие временные профили,
не могут быть легко идентифицированы, в отличие от мессенджеров, которые раскрывают не могут быть легко идентифицированы.</p>
номера телефонов в групповых чатах, которые часто связаны с реальными личностями.</p>
<h3 id="как-я-могу-проверить-информацию-о-шифровании"> <h3 id="sealedsender">
Как я могу проверить информацию о шифровании? <a href="#как-я-могу-проверить-информацию-о-шифровании" class="anchor"></a> Поддерживает ли Delta Chat функцию “Sealed Sender” (Засекреченный отправитель)? <a href="#sealedsender" class="anchor"></a>
</h3>
<p>Нет, пока нет.</p>
<p>Мессенджер Signal внедрил функцию <a href="https://signal.org/blog/sealed-sender/">“Sealed Sender” (Засекреченный отправитель) в 2018 году</a>,
чтобы их серверная инфраструктура не имела информации о том, кто отправляет сообщение группе получателей.
Это особенно важно, поскольку сервер Signal знает мобильный номер каждого аккаунта,
который обычно привязан к паспортным данным.</p>
<p>Даже если <a href="https://chatmail.at/relays">релеи chatmail</a>
не запрашивают никаких личных данных (включая телефонные номера),
всё равно может быть полезно защитить реляционные метаданные между адресами
Мы не видим серьёзных проблем в использовании случайных одноразовых электронных адресов для функции sealed sender,
но реализация пока не определена как приоритетная задача.</p>
<h3 id="pfs">
Поддерживает ли Delta Chat свойство Perfect forward secrecy, PFS (Совершенную прямую секретность)? <a href="#pfs" class="anchor"></a>
</h3>
<p>Нет, пока нет.</p>
<p>На данный момент, Delta Chat не поддерживает Perfect Forward Secrecy (PFS) (Совершенную прямую секретность).
Это означает, что если ваш приватный ключ дешифрования будет скомпрометирован,
и кто-то собрал ваши предыдущие сообщения во время передачи,
они смогут расшифровать и прочитать их, используя скомпрометированный ключ дешифрования.
Обратите внимание, что Forward Secrecy (Прямая секретность) повышает безопасность только если вы удаляете сообщения.
В противном случае, тот, кто получает ваши ключи дешифрования
также может получить все ваши не удалённые сообщения
и ему даже не нужно расшифровывать какие-либо ранее собранные сообщения.</p>
<p>Мы разработали подход к Forward Secrecy (Прямой секретности), который прошёл
первичную проверку некоторыми криптографами и экспертами по реализации
но требует более формального описания
чтобы убедиться, что он надёжно работает в федеративном обмене сообщениями и при использовании нескольких устройств,
прежде чем он может быть внедрён в <a href="https://github.com/chatmail/core">ядро chatmail</a>,
что сделает его доступным во всех <a href="https://chatmail.at/clients">клиентах clients</a>.</p>
<h3 id="pqc">
Поддерживает ли Delta Chat Post-Quantum-Cryptography (Постквантовую криптографию)? <a href="#pqc" class="anchor"></a>
</h3>
<p>Нет, пока нет.</p>
<p>Delta Chat использует библиотеку OpenPGP на Rust <a href="https://github.com/rpgp/rpgp">rPGP</a>,
которая поддерживает последний <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/">черновик IETF Post-Quantum-Cryptography OpenPGP</a>.
Мы планируем добавить поддержку PQC в <a href="https://github.com/chatmail/core">ядро chatmail</a> после того, как черновик будет окончательно утвержден в IETF
в сотрудничестве с другими разработчиками OpenPGP.</p>
<h3 id="как-можно-вручную-проверить-информацию-о-шифровании">
Как можно вручную проверить информацию о шифровании? <a href="#как-можно-вручную-проверить-информацию-о-шифровании" class="anchor"></a>
</h3> </h3>
@ -1099,121 +1084,6 @@ Delta Chat показывает там два отпечатка.
Если на вашем устройстве и на устройстве вашего контакта показаны одинаковые отпечатки, Если на вашем устройстве и на устройстве вашего контакта показаны одинаковые отпечатки,
соединение безопасно.</p> соединение безопасно.</p>
<h3 id="как-я-могу-проверить-статус-шифрования-сообщений">
Как я могу проверить статус шифрования сообщений? <a href="#как-я-могу-проверить-статус-шифрования-сообщений" class="anchor"></a>
</h3>
<p>Маленький <strong>значок замка</strong> в сообщении означает,
что сообщение было правильно зашифровано сквозным шифрованием от данного отправителя.
Если <strong>замка нет</strong>, сообщение не было правильно зашифровано,
возможно, потому что отправитель использует приложение или веб-интерфейс электронной почты
без поддержки сквозного шифрования.</p>
<h3 id="почему-я-вижу-незашифрованные-сообщения">
Почему я вижу незашифрованные сообщения? <a href="#почему-я-вижу-незашифрованные-сообщения" class="anchor"></a>
</h3>
<p>Если контакт использует приложение электронной почты, не поддерживающее Autocrypt,
все сообщения, включающие этого контакта (в групповом или личном 1:1 чате),
не будут зашифрованы сквозным шифрованием, и поэтому не будут иметь “значок замка” в сообщениях.
Обратите внимание, что даже если ваши контакты используют Delta Chat на своем аккаунте,
они также могут использовать приложение электронной почты, не поддерживающее Autocrypt,
на том же аккаунте, что может привести к периодически незашифрованным сообщениям.
Ответ на незашифрованные сообщения незашифрованным сообщением является обязательным в Autocrypt,
чтобы предотвратить появление нечитаемых сообщений на стороне ваших контактов
и их приложении электронной почты, которое не поддерживает Autocrypt.</p>
<h3 id="как-я-могу-получить-зашифрованный-сквозным-шифрованием-чат-с-контактом-delta-chat-который-иногда-использует-веб-почту-или-другое-приложение-электронной-почты-не-поддерживающее-autocrypt">
Как я могу получить зашифрованный сквозным шифрованием чат с контактом Delta Chat, который иногда использует веб-почту или другое приложение электронной почты, не поддерживающее Autocrypt? <a href="#как-я-могу-получить-зашифрованный-сквозным-шифрованием-чат-с-контактом-delta-chat-который-иногда-использует-веб-почту-или-другое-приложение-электронной-почты-не-поддерживающее-autocrypt" class="anchor"></a>
</h3>
<p>Если вам нужен зашифрованный сквозным шифрованием чат с контактом,
который использует свой адрес электронной почты как с Delta Chat, так и с приложениями, не поддерживающими Autocrypt (например, веб-почтой),
лучше всего настроить с ним <a href="#howtoe2ee">гарантированное сквозное шифрование</a>
и затем создать гарантированно зашифрованный сквозным шифрованием групповой чат с вами двумя как участниками.
В этом групповом чате все сообщения будут зашифрованы сквозным шифрованием,
даже если прямой чат между вами двумя имеет предупреждение
<a href="#nocryptanymore">“… отправил сообщение с другого устройства”</a>.</p>
<h3 id="как-я-могу-обеспечить-сквозное-шифрование-и-удаление-сообщений">
Как я могу обеспечить сквозное шифрование и удаление сообщений? <a href="#как-я-могу-обеспечить-сквозное-шифрование-и-удаление-сообщений" class="anchor"></a>
</h3>
<p>Лучший способ обеспечить сквозное шифрование каждого сообщения,
где метаданные удаляются как можно быстрее,
это <a href="#howtoe2ee">использовать чаты с гарантированным сквозным шифрованием</a>
и включить <a href="#ephemeralmsgs">исчезающие сообщения</a>.</p>
<p>Чаты с гарантированным сквозным шифрованием защищают от <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">атак “человек посередине”</a>,
а включение исчезающих сообщений удаляет сообщения
на сервере через заданное пользователем время.</p>
<p>Если вам не нужна долгоживущая копия ваших сообщений на сервере,
вы также можете включить <a href="#delold">“удалять сообщения с сервера автоматически”</a>.</p>
<h3 id="pfs">
Поддерживает ли Delta Chat совершенную прямую секретность (Perfect forward secrecy, PFS)? <a href="#pfs" class="anchor"></a>
</h3>
<p>Нет, Delta Chat не поддерживает совершенную прямую секретность (PFS).
Это означает, что если ваш личный ключ дешифрования Delta Chat будет скомпрометирован,
и кто-то собрал ваши предыдущие сообщения, переданные по сети,
то они смогут расшифровать и прочитать их с помощью скомпрометированного ключа дешифрования.</p>
<p>Обратите внимание, если кто-то получит доступ к вашим ключам дешифрования,
они, как правило, также смогут получить доступ к вашим сообщениям,
независимо от того, используется ли совершенная прямая секретность или нет.
Типичная реальная ситуация для утечки ключей дешифрования - это изъятие устройства,
о чём мы говорим в нашем ответе <a href="#device-seizure">о метаданных и изъятии устройства</a>.</p>
<p>Возможно, Delta Chat будет развиваться в направлении поддержки совершенной прямой секретности (PFS),
поскольку OpenPGP является всего лишь контейнером для зашифрованных сообщений,
но управление ключами шифрования (и, следовательно, ротация ключей или “переключение” ключей)
могут быть организованы гибкими способами.
См. <a href="https://gitlab.com/sequoia-pgp/openpgp-dr">прототип PFS Seqouia</a>
для существующих экспериментов в сообществе разработчиков OpenPGP.</p>
<h3 id="является-ли-сквозное-шифрование-delta-chat-таким-же-безопасным-как-signal">
Является ли сквозное шифрование Delta Chat таким же безопасным как Signal? <a href="#является-ли-сквозное-шифрование-delta-chat-таким-же-безопасным-как-signal" class="anchor"></a>
</h3>
<p>Это зависит от того, что для вас важно.
Delta Chat <a href="#pfs">не поддерживает PFS</a>, как Signal,
но обеспечивает <a href="#e2eeguarantee">гарантированно зашифрованные сквозным шифрованием чаты</a>
защищенные от скомпрометированных серверов или поврежденных сетей.
Signal и большинство других мессенджеров, поддерживающих PFS,
не предоставляют практической схемы защиты групповых чатов от сетевых атак,
которые, возможно, вызывают большее беспокойство,
чем потенциальный злоумышленник, который захватывает ваш телефон и настройки персонального шифрования,
но почему-то не ваши сообщения, но при этом имеет полный отчет обо всех прошлых зашифрованных сообщениях.</p>
<p>В любом случае, сквозное шифрование Delta Chat использует <a href="#openpgp-secure">безопасное подмножество OpenPGP</a>
которое прошло <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">независимую проверку безопасности</a>.</p>
<h3 id="importkey"> <h3 id="importkey">
@ -1488,16 +1358,16 @@ PIN-код разблокировки экрана, графический кл
</h3> </h3>
<ul> <ul>
<li>Приложения webxdc не могут отправлять данные в Интернет или скачивать что-либо.</li> <li>Приложения webxdc не имеют доступа к Интернету и не могут ничего загружать.</li>
<li>Приложение webxdc может обмениваться данными только внутри чата Delta Chat, с его <li>Обмен данными в webxdc-приложении возможен только внутри чата Delta Chat, между
копиями на устройствах ваших собеседников по чату. копиями приложения на устройствах участников чата. В остальном оно полностью
В остальном, оно полностью
изолировано от Интернета.</li> изолировано от Интернета.</li>
<li>Конфиденциальность, которую обеспечивает приложение webxdc — это конфиденциальность вашего чата - пока <li>Уровень приватности webxdc-приложения соответствует приватности вашего чата — если вы
вы доверяете людям, с которыми вы общаетесь, вы можете доверять приложению webxdc.</li> доверяете собеседникам, можете доверять и приложению.</li>
<li>Это также означает, что открытие приложений webxdc в чатах с участниками, которым вы <li>Это значит, что открывать такие приложения в чатах с незнакомыми или подозрительными участниками может быть небезопасно.
не доверяете, тоже самое, что и с вложениями электронной почты, когда вы открываете Как и с вложениями, видеозвонками или ссылками:
вложения только от тех отправителей, которым доверяете, а не от спамеров.</li> открывайте их только от тех, кому доверяете, и не открывайте от спамеров.
Спамеры могут получить любые данные, которые вы им отправите, а также узнать ваш IP-адрес.</li>
</ul> </ul>
<h3 id="где-я-могу-получить-приложения-webxdc"> <h3 id="где-я-могу-получить-приложения-webxdc">
@ -1580,20 +1450,10 @@ Delta Chat</a>.</li>
</h3> </h3>
<ul> <p>Список рассылки позволяет отправлять сообщения сразу нескольким адресатам;
<li>С помощью списка рассылки вы можете отправить сообщение сразу нескольким получателям; когда получатели не могут отвечать в этом списке.
они ответят вам, вы получите ответ в прямом чате с ними 1:1. Функция списков рассылки пока что экспериментальная
Получатели не смогут видеть друг друга.</li> и, скорее всего, в будущем будет заменена на что-то другое — следите за новостями. :)</p>
<li>Технически, это электронное письмо с несколькими получателями в поле BCC (скрытая копия).</li>
<li>Включить функцию можно в разделе “Экспериментальные функции” в
“Дополнительных параметрах”. Затем вы можете создать список рассылки в диалоге “Новый чат”.</li>
<li>Если вы используете более одного устройства, списки рассылки в настоящее время не
синхронизируются между ними.</li>
<li>Сообщения, отправленные в списки рассылки, не шифруются. Шифрование нарушит
анонимность, потому что тогда все получатели узнают, кто еще получил сообщение.
(Отправка отдельных писем каждому будет хуже из-за ограничений скорости и
потребления сети).</li>
</ul>
<h3 id="как-я-могу-поделиться-своим-местоположением-с-собеседниками-в-чате"> <h3 id="как-я-могу-поделиться-своим-местоположением-с-собеседниками-в-чате">
@ -1650,6 +1510,11 @@ Delta Chat</a>.</li>
</h3> </h3>
<p>Примечание:
Смена электронных адресов временно отключена
из-за продолжающихся изменений в ядре DeltaChat.
Функция должна снова заработать через несколько месяцев.</p>
<ol> <ol>
<li> <li>
<p>Измените свой адрес в разделе “Настройки → Дополнительные параметры → Пароль и аккаунт” и <p>Измените свой адрес в разделе “Настройки → Дополнительные параметры → Пароль и аккаунт” и
@ -1751,19 +1616,19 @@ Delta Chat</a>.</li>
см. <a href="https://providers.delta.chat">Обзор провайдеров</a></li> см. <a href="https://providers.delta.chat">Обзор провайдеров</a></li>
</ul> </ul>
<h3 id="я-хочу-управлять-своим-собственным-почтовым-сервером-для-delta-chat-что-вы-посоветуете"> <h3 id="я-хочу-управлять-своим-собственным-сервером-для-delta-chat-что-вы-посоветуете">
Я хочу управлять своим собственным почтовым сервером для Delta Chat. Что вы посоветуете? <a href="#я-хочу-управлять-своим-собственным-почтовым-сервером-для-delta-chat-что-вы-посоветуете" class="anchor"></a> Я хочу управлять своим собственным сервером для Delta Chat. Что вы посоветуете? <a href="#я-хочу-управлять-своим-собственным-сервером-для-delta-chat-что-вы-посоветуете" class="anchor"></a>
</h3> </h3>
<ul> <ul>
<li>Большинство почтовых серверов будут работать хорошо. Но лично мы рекомендуем, <li>Большинство почтовых серверов будут работать хорошо. Однако мы советуем использовать,
это сочетание mailcow и mailadm, как описано <a href="https://delta.chat/en/2023-01-27-upcoming-mail-server-workshops">в этом relay-сервер chatmail, как описано <a href="https://delta.chat/en/2023-12-13-chatmail">в этом
блоге</a>.</li> блоге</a>.</li>
<li>Вы можете найти <a href="https://delta.chat/ru/serverguide">руководство по установке на нашем сайте</a>.</li> <li>Вы можете найти <a href="https://github.com/chatmail/relay">руководство по установке на GitHub</a>.</li>
</ul> </ul>
<h3 id="почему-я-должен-вводить-свой-пароль-от-электронной-почты-в-delta-chat-это-безопасно"> <h3 id="почему-я-должен-вводить-свой-пароль-от-электронной-почты-в-delta-chat-это-безопасно">

View file

@ -36,27 +36,24 @@
<li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li> <li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li>
</ul> </ul>
</li> </li>
<li><a href="#encryption-and-security">Encryption and Security</a> <li><a href="#e2ee">Encryption and Security</a>
<ul> <ul>
<li><a href="#which-standards-are-used-for-end-to-end-encryption">Which standards are used for end-to-end encryption?</a></li> <li><a href="#which-standards-are-used-for-end-to-end-encryption">Which standards are used for end-to-end encryption?</a></li>
<li><a href="#whene2e">How can i know if messages are end-to-end encrypted?</a></li> <li><a href="#whene2e">How can i know if messages are end-to-end encrypted?</a></li>
<li><a href="#howtoe2ee">How can I get guaranteed end-to-end encryption and green checkmarks?</a></li> <li><a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption">Can i still receive or send mails without end-to-end encryption?</a></li>
<li><a href="#e2eeguarantee">What does the green checkmark and “guaranteed end-to-end encryption” mean?</a></li> <li><a href="#howtoe2ee">How can I establish a chat with a new contact?</a></li>
<li><a href="#nocryptanymore">A contact “sent a message from another device”, what can i do?</a></li> <li><a href="#e2eeguarantee">What does the green checkmark in a contact profile mean?</a></li>
<li><a href="#are-attachments-pictures-files-audio-etc-end-to-end-encrypted">Are attachments (pictures, files, audio etc.) end-to-end encrypted?</a></li> <li><a href="#are-attachments-pictures-files-audio-etc-end-to-end-encrypted">Are attachments (pictures, files, audio etc.) end-to-end encrypted?</a></li>
<li><a href="#openpgp-secure">Is OpenPGP secure?</a></li> <li><a href="#openpgp-secure">Is OpenPGP secure?</a></li>
<li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end -encryption?</a></li> <li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end-encryption?</a></li>
<li><a href="#is-delta-chat-vulnerable-to-efail">Is Delta Chat vulnerable to EFAIL?</a></li> <li><a href="#is-delta-chat-vulnerable-to-efail">Is Delta Chat vulnerable to EFAIL?</a></li>
<li><a href="#tls">Is a message exposed in cleartext if end-to-end encryption is not available?</a></li> <li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
<li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li> <li><a href="#message-metadata">How does Delta Chat protect metadata in messages?</a></li>
<li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li> <li><a href="#device-seizure">How to protect metadata and contacts when a device is seized?</a></li>
<li><a href="#how-can-i-check-encryption-information">How can i check encryption information?</a></li> <li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
<li><a href="#how-can-i-check-the-encryption-status-of-messages">How can I check the encryption status of messages?</a></li>
<li><a href="#why-do-i-see-unencrypted-messages">Why do I see unencrypted messages?</a></li>
<li><a href="#how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app">How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app?</a></li>
<li><a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion">How can I ensure message end-to-end encryption and deletion?</a></li>
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li> <li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of Delta Chat as safe as Signal?</a></li> <li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
<li><a href="#how-can-i-manually-check-encryption-information">How can I manually check encryption information?</a></li>
<li><a href="#importkey">Môžem znova použiť svoj existujúci súkromný kľúč?</a></li> <li><a href="#importkey">Môžem znova použiť svoj existujúci súkromný kľúč?</a></li>
<li><a href="#security-audits">Was Delta Chat independently audited for security vulnerabilities?</a></li> <li><a href="#security-audits">Was Delta Chat independently audited for security vulnerabilities?</a></li>
</ul> </ul>
@ -90,7 +87,7 @@
<ul> <ul>
<li><a href="#aké-povolenia-potrebuje-delta-chat">Aké povolenia potrebuje Delta Chat?</a></li> <li><a href="#aké-povolenia-potrebuje-delta-chat">Aké povolenia potrebuje Delta Chat?</a></li>
<li><a href="#funguje-delta-chat-s-mojím-poskytovateľom-e-mailov">Funguje Delta Chat s mojím poskytovateľom e-mailov?</a></li> <li><a href="#funguje-delta-chat-s-mojím-poskytovateľom-e-mailov">Funguje Delta Chat s mojím poskytovateľom e-mailov?</a></li>
<li><a href="#i-want-to-manage-my-own-e-mail-server-for-delta-chat-what-do-you-recommend">I want to manage my own e-mail server for Delta Chat. What do you recommend?</a></li> <li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
<li><a href="#prečo-musím-zadávať-svoje-e-mailové-heslo-do-delta-chat-je-to-bezpečné">Prečo musím zadávať svoje e-mailové heslo do Delta Chat? Je to bezpečné?</a></li> <li><a href="#prečo-musím-zadávať-svoje-e-mailové-heslo-do-delta-chat-je-to-bezpečné">Prečo musím zadávať svoje e-mailové heslo do Delta Chat? Je to bezpečné?</a></li>
<li><a href="#ktoré-správy-sa-zobrazujú-v-delta-chate">Ktoré správy sa zobrazujú v Delta Chate?</a></li> <li><a href="#ktoré-správy-sa-zobrazujú-v-delta-chate">Ktoré správy sa zobrazujú v Delta Chate?</a></li>
<li><a href="#podporuje-delta-chat-e-maily-html">Podporuje Delta Chat e-maily HTML?</a></li> <li><a href="#podporuje-delta-chat-e-maily-html">Podporuje Delta Chat e-maily HTML?</a></li>
@ -723,10 +720,10 @@ that achieves “instant delivery” of messages for all chatmail servers
including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>. including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>.
Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p> Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p>
<h2 id="encryption-and-security"> <h2 id="e2ee">
Encryption and Security <a href="#encryption-and-security" class="anchor"></a> Encryption and Security <a href="#e2ee" class="anchor"></a>
</h2> </h2>
@ -739,18 +736,26 @@ Welcome to the power of the interoperable and massive chatmail and e-mail system
</h3> </h3>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically <p>Delta Chat uses a <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>
establishing end-to-end encryption with contacts and group chats. to provide automatic end-to-end encryption using these protocols:</p>
Autocrypt uses a limited and <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>.
End-to-End encrypted messages are marked with a padlock
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../lock-icon.png" alt="padlock" />.</p>
<p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a> <ul>
are used for establishing chats with guaranteed end-to-end encryption <li>
which protects against network attacks and compromised servers. <p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join</a>
Chats marked with a green checkmark to exchange encryption setup information through QR-code scanning or “invite links”.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> </li>
guarantee end-to-end encrypted messages.</p> <li>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically
establishing end-to-end encryption between contacts and all members of a group chat.</p>
</li>
<li>
<p><a href="https://github.com/chatmail/core/blob/main/spec.md#attaching-a-contact-to-a-message">Sharing a contact to a
chat</a>
enables receivers to use end-to-end encryption with the contact.</p>
</li>
</ul>
<p>Delta Chat does not query, publish or interact with any OpenPGP key servers.</p>
<h3 id="whene2e"> <h3 id="whene2e">
@ -760,28 +765,37 @@ guarantee end-to-end encrypted messages.</p>
</h3> </h3>
<p>All end-to-end encrypted messages carry a padlock:</p> <p>All messages in Delta Chat are <strong>end-to-end encrypted by default</strong>.
Since the Delta Chat Version 2 release series (July 2025)
there are no lock or similar markers on end-to-end encrypted messages, anymore.</p>
<p><img style="width:160px; margin:1px" src="../lock-screenshot.png" alt="padlock in bubble" /></p> <h3 id="can-i-still-receive-or-send-mails-without-end-to-end-encryption">
<p>End-to-end encryption is guaranteed if there is a green checkmark next to the chat title:</p>
<p><img style="width:211px; margin:1px" src="../green-checkmark-screenshot.png" alt="green checkmark in title" /></p>
<h3 id="howtoe2ee">
How can I get guaranteed end-to-end encryption and green checkmarks? <a href="#howtoe2ee" class="anchor"></a> Can i still receive or send mails without end-to-end encryption? <a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption" class="anchor"></a>
</h3> </h3>
<p>If you have a second communication channel with your chat partner, <p>If you use default <a href="https://chatmail.at/relays">chatmail relays</a>,
like a video chat or a different messenger, it is impossible to receive or send messages without end-to-end encryption.</p>
you can generate an invite link.</p>
<p>If you are together in person, <p>If you instead create a profile using a classic e-mail server,
you can show a QR code to your chat partner.</p> you can send and receive messages without end-to-end encryption.
Such messages lacking end-to-end encryption are marked with an e-mail icon
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
<h3 id="howtoe2ee">
How can I establish a chat with a new contact? <a href="#howtoe2ee" class="anchor"></a>
</h3>
<p>You can send an invite link through another private chat,
show an invitation QR code when next to each other or in a video call,
or click on a “contact” that was shared in a chat.</p>
<ul> <ul>
<li> <li>
@ -796,135 +810,54 @@ on the Delta Chat app main screen.</p>
</li> </li>
</ul> </ul>
<p>Let your chat partner scan the QR image <p>Ask your chat partner to scan the QR image
with their Delta Chat app, with their Delta Chat app,
or click “Copy” or “Share” to create an invite link or click “Copy” or “Share” to create an invite link
and share it with your chat partner.</p> and share it with your chat partner.</p>
<p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">Secure-Join network messages are exchanged</a> between both devices.</p> <p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">end-to-end encryption is getting established</a>.</p>
<ul> <ul>
<li> <li>
<p>If both devices are online, <p>If both sides are online, they will soon see a (group or direct) chat
both sides will eventually see a (group or direct) chat with a green checkmark and can start messaging securely.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
next to the title.</p>
</li> </li>
<li> <li>
<p>If one of the devices is offline, the green checkmarks will only <p>If one side is offline or in bad network,
appear later when the device is internet-connected again the ability to chat is delayed until connectivity is restored.</p>
and the Secure-Join network protocol completed.</p>
</li> </li>
</ul> </ul>
<p>Congratulations! <p>Congratulations!
You now will automatically use guaranteed end-to-end encryption You now will automatically use end-to-end encryption
with this contact and both of you can add each other to green-checkmarked groups with this contact.
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />, If you add each other to chat groups,
thereby automatically spreading guaranteed end-to-end encryption among its members.</p> end-to-end encryption will be established among all members.</p>
<h3 id="e2eeguarantee"> <h3 id="e2eeguarantee">
What does the green checkmark and “guaranteed end-to-end encryption” mean? <a href="#e2eeguarantee" class="anchor"></a> What does the green checkmark in a contact profile mean? <a href="#e2eeguarantee" class="anchor"></a>
</h3> </h3>
<p>Chat titles with green checkmarks <p>A contact profile might show a green checkmark
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
mean that all messages in the chat will be end-to-end encrypted and an “Introduced by” line.
and can not be read or altered by compromised e-mail servers or Internet providers.
Joining green-checkmarked group chats
safely spreads everybodys encryption information (and green checkmarks)
in a manner that guarantees end-to-end encryption in the group and among members.</p>
<p>Contact profiles with green checkmarks
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
mean that messaging a contact is currently guaranteed to be end-to-end encrypted.
Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you
or was introduced by a another green-checkmarked contact. or was introduced by a another green-checkmarked contact.
Introductions happen automatically when adding members to groups. Introductions happen automatically when adding members to groups.
Whoever adds a contact to a green-checkmarked group becomes an introducer Whoever adds a green-checkmarked contact to a group with only green-checkmarked members
to those members who didnt yet know about the added contact. becomes an introducer.
In a contact profile you can tap on the “Introduced by …” text repeatedly In a contact profile you can tap on the “Introduced by …” text repeatedly
until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p> until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p>
<p>Note that in a contact profile you may see and tap introducers
but there is no green checkmark in the profile title.
This usually means that the contact <a href="#nocryptanymore">“sent a message from another device”</a>.</p>
<p>For more in-depth discussion of “guaranteed end-to-end encryption” <p>For more in-depth discussion of “guaranteed end-to-end encryption”
please see <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a> please see <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a>
and specifically read about “Verified Groups”, the technical term and specifically read about “Verified Groups”, the technical term
of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.</p> of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.</p>
<h3 id="nocryptanymore">
A contact “sent a message from another device”, what can i do? <a href="#nocryptanymore" class="anchor"></a>
</h3>
<p>Your chat with a contact lost guaranteed end-to-end encryption.
The green checkmark was removed for this chat and contact when you see this warning.
<strong>If you find the sudden drop of guaranteed end-to-end encryption
surprising for this contact then dont accept the warning!</strong>
Instead check with your contact through a second channel
like a video call, other messenger or a phone call,
to find out what happened.</p>
<p>If your contact actually caused the drop of guaranteed end-to-end encryption
please see the next paragraphs for common reasons and their mitigations.
Regardless, all other green-checkmarked chats remain guaranteed end-to-end encrypted
even if the contact is a member there.</p>
<p><strong>Your contact is using Delta Chat on a second device (phone or laptop)</strong></p>
<p>If they have another device with a Delta Chat app running,
they should remove the profile from the new device
and add it <a href="#multiclient">as a second device as described here</a>.
As soon as they message you afterwards, the warning will be gone
and guaranteed encryption is established with both devices of your contact.</p>
<p><strong>Your contact reinstalled Delta Chat using their old account login</strong></p>
<p>If they have <a href="#backup">a backup file</a>,
they should remove the profile from the new device
and rather import the backup file to re-create their profile.
As soon as they message you afterwards, the warning will be gone
and guaranteed encryption is re-established for this contact.</p>
<p>If they dont have a backup file, its best to perform a <a href="#howtoe2ee">QR scan</a>
with your chat partner to re-establish guaranteed end-to-end encryption.</p>
<p><strong>Your contact sent a mail through a webmail interface or another e-mail app
and will get back to using Delta Chat soon again.</strong></p>
<p>If you are sure that the contact sometimes uses webmail,
or another mail app lacking end-to-end encryption,
then you may accept the warning.
As soon as your contact uses Delta Chat again,
guaranteed end-to-end encryption will be automatically re-established.</p>
<p><strong>Your contact stopped using Delta Chat entirely</strong></p>
<p>Sometimes remaining in contact is more important than end-to-end encryption.
<a href="#tls">“Transport Layer Encryption” (TLS)</a> may still meaningfully protect
the confidentiality of your messages between your device and the e-mail server.
But without end-to-end encryption you and your contact are trusting your e-mail server
to not read or manipulate your messages, and to not hand them to third parties.</p>
<p>In any case, you can not do much else than accept the warning.
Please also remove the contact from any active green-checkmarked group
which you can find in “Shared chats” in the Contact profile.
This spares your contact from getting “unreadable” messages.</p>
<p>If the contact removed Delta Chat because of buggy or undesirable behaviour,
please consider posting to our <a href="https://support.delta.chat">support forum</a>
to help us identify and address common problems. Thanks!</p>
<h3 id="are-attachments-pictures-files-audio-etc-end-to-end-encrypted"> <h3 id="are-attachments-pictures-files-audio-etc-end-to-end-encrypted">
@ -949,8 +882,7 @@ and attachment metadata such as filenames.</p>
</h3> </h3>
<p>Yes, Delta Chat uses a secure subset of OpenPGP <p>Yes, Delta Chat uses a secure subset of OpenPGP
and only displays a padlock security indicator on a message requiring the whole message to be properly encrypted and signed.
if the whole message is properly encrypted and signed.
For example, “Detached signatures” are not treated as secure.</p> For example, “Detached signatures” are not treated as secure.</p>
<p>OpenPGP is not insecure by itself. <p>OpenPGP is not insecure by itself.
@ -971,7 +903,7 @@ which was thankfully adopted in summer 2023.</p>
<h3 id="openpgp-alternatives"> <h3 id="openpgp-alternatives">
Did you consider using alternatives to OpenPGP for end-to-end -encryption? <a href="#openpgp-alternatives" class="anchor"></a> Did you consider using alternatives to OpenPGP for end-to-end-encryption? <a href="#openpgp-alternatives" class="anchor"></a>
</h3> </h3>
@ -1014,17 +946,15 @@ as defined by the Autocrypt Level 1 specification.</p>
<h3 id="tls"> <h3 id="tls">
Is a message exposed in cleartext if end-to-end encryption is not available? <a href="#tls" class="anchor"></a> Are messages marked with the mail icon exposed on the Internet? <a href="#tls" class="anchor"></a>
</h3> </h3>
<p>Even if your messages are not guaranteed to be end-to-end encrypted, <p>If you are sending or receiving e-mail messages without end-to-end encryption (using a classic e-mail server),
they are still protected from Internet providers like cell or cable companies. they are still protected from cell or cable companies who can not read or modify your e-mail messages.
However, your and your recipients e-mail providers But both your and your recipients e-mail providers
may read, analyze or even modify your messages, may read, analyze or modify your messages, including any attachments.</p>
including any attachments,
if they are not end-to-end encrypted.</p>
<p>Delta Chat by default uses strict <p>Delta Chat by default uses strict
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a> <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a>
@ -1037,10 +967,6 @@ then transport encryption will be enforced between e-mail providers
in which case Delta Chat communications will never be exposed in cleartext to the Internet in which case Delta Chat communications will never be exposed in cleartext to the Internet
even if the message was not end-to-end encrypted.</p> even if the message was not end-to-end encrypted.</p>
<p>Note that <a href="#howtoe2ee">maintaining guaranteed end-to-end encryption</a> on top of TLS encryption
provides pervasive safety between your and the recipients devices.
Not even your e-mail or Internet provider will be able to read or modify your messages.</p>
<h3 id="message-metadata"> <h3 id="message-metadata">
@ -1049,25 +975,25 @@ Not even your e-mail or Internet provider will be able to read or modify your me
</h3> </h3>
<p>Delta Chat protects most message metadata by putting the following information <p>Unlike most other messengers,
into the end-to-end encrypted part of messages:</p> Delta Chat apps do not store any metadata about contacts or groups on servers, also not in encrypted form.
Instead, all group metadata is end-to-end encrypted and stored on end-user devices, only.</p>
<p>E-mail Servers can therefore only see</p>
<ul> <ul>
<li>Subject line</li> <li>
<li>Group avatar and name</li> <p>the message date,</p>
<li>MDN (read receipt) requests (<code class="language-plaintext highlighter-rouge">Chat-Disposition-Notification-To</code>)</li> </li>
<li>Disappearing message timer (<code class="language-plaintext highlighter-rouge">Ephemeral-Timer</code>)</li> <li>
<li><code class="language-plaintext highlighter-rouge">Chat-Group-Member-Removed</code>, <code class="language-plaintext highlighter-rouge">Chat-Group-Member-Added</code></li> <p>sender and receiver addresses</p>
<li><code class="language-plaintext highlighter-rouge">Secure-Join</code> header containing secure join commands</li> </li>
<li>Notification about enabling location streaming</li> <li>
<li>WebRTC room URL</li> <p>and message size.</p>
</li>
</ul> </ul>
<p>E-Mail servers do not get access to this protected metadata <p>All other message, contact and group metadata resides in the end-to-end encrypted part of messages.</p>
but they do see the message date as well as the message size,
and, more importantly, the sender and receiver addresses.
E-mail servers need receiver addresses to route and
deliver messages to recipients devices.</p>
<h3 id="device-seizure"> <h3 id="device-seizure">
@ -1079,96 +1005,34 @@ deliver messages to recipients devices.</p>
<p>Both for protecting against metadata-collecting e-mail servers <p>Both for protecting against metadata-collecting e-mail servers
as well as against the threat of device seizure as well as against the threat of device seizure
we recommend to use a <a href="https://delta.chat/chatmail">chatmail server</a> we recommend to use a <a href="https://chatmail.at/relays">chatmail relay</a>
to create pseudonymous temporary profiles through QR-code scans. to create chat profiles using random e-mail addresses for transport.
Note that Delta Chat apps on all platforms support multiple profiles Note that Delta Chat apps on all platforms support multiple profiles
so you can easily use situation-specific profiles next to your “main” profile so you can easily use situation-specific profiles next to your “main” profile
with the knowledge that all their data, along with all metadata, will be deleted. with the knowledge that all their data, along with all metadata, will be deleted.
Moreover, if a device is seized then contacts using temporary profiles Moreover, if a device is seized then chat contacts using short-lived profiles
can not be identified easily, as compared to messengers which reveal can not be identified easily.</p>
phone numbers in chat groups which in turn are often associated with legal identities.</p>
<h3 id="how-can-i-check-encryption-information"> <h3 id="sealedsender">
How can i check encryption information? <a href="#how-can-i-check-encryption-information" class="anchor"></a> Does Delta Chat support “Sealed Sender”? <a href="#sealedsender" class="anchor"></a>
</h3> </h3>
<p>You may check the end-to-end encryption status manually in the “Encryption” dialog <p>No, not yet.</p>
(user profile on Android/iOS or right-click a users chat-list item on desktop).
Delta Chat shows two fingerprints there.
If the same fingerprints appear on your own and your contacts device,
the connection is safe.</p>
<h3 id="how-can-i-check-the-encryption-status-of-messages"> <p>The Signal messenger introduced <a href="https://signal.org/blog/sealed-sender/">“Sealed Sender” in 2018</a>
to keep their server infrastructure ignorant of who is sending a message to a set of recipients.
It is particularly important because the Signal server knows the mobile number of each account,
which is usually associated with a passport identity.</p>
<p>Even if <a href="https://chatmail.at/relays">chatmail relays</a>
How can I check the encryption status of messages? <a href="#how-can-i-check-the-encryption-status-of-messages" class="anchor"></a> do not ask for any private data (including no phone numbers),
it might still be worthwhile to protect relational metadata between addresses.
We dont foresee bigger problems in using random throw-away e-mail addresses for sealed sending
</h3> but an implementation has not been agreed as a priority yet.</p>
<p>A little <strong>padlock</strong> in a message bubble denotes
that the message was properly end-to-end encrypted from the given sender.
If there is <strong>no padlock</strong>, the message was not properly end-to-end encrypted
most likely because the sender uses an app or webmail interface
without support for end-to-endencryption.</p>
<h3 id="why-do-i-see-unencrypted-messages">
Why do I see unencrypted messages? <a href="#why-do-i-see-unencrypted-messages" class="anchor"></a>
</h3>
<p>If a contact uses a non-Autocrypt e-mail app,
all messages involving this contact (in a group or 1:1 chat)
will not be end-to-end encrypted, and thus not show a “padlock” with messages.
Note that even if your contacts use Delta Chat on their account,
they might also use a non-Autocrypt e-mail app on that account
which then may cause intermittently unencrypted messages.
Replying unencrypted to unencrypted messages is mandated by Autocrypt
to prevent unreadable messages on the side of your contacts
and their non-Autocrypt e-mail app.</p>
<h3 id="how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app">
How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app? <a href="#how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app" class="anchor"></a>
</h3>
<p>If you need a safely end-to-end encrypted chat with a contact
who is using their e-mail account both with Delta Chat and non-Autocrypt apps (e.g. webmail),
its best to setup <a href="#howtoe2ee">guaranteed end-to-end encryption with them</a>
and then create a guaranteed end-to-end encrypted group chat with you two as members.
In this group chat all messages will be end-to-end encrypted
even if the direct chat between you two has a
<a href="#nocryptanymore">“… sent a message from another device”</a> warning.</p>
<h3 id="how-can-i-ensure-message-end-to-end-encryption-and-deletion">
How can I ensure message end-to-end encryption and deletion? <a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion" class="anchor"></a>
</h3>
<p>The best way to ensure every message is end-to-end encrypted,
and metadata deleted as quickly as possible
is <a href="#howtoe2ee">using chats with guaranteed end-to-end encryption</a>
and turning on <a href="#ephemeralmsgs">disappearing messages</a>.</p>
<p>Guaranteed end-to-end encrypted chats protect against <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM attacks</a>
and turning on disappearing messages deletes the messages
on the server after a user-configured time.</p>
<p>If you dont need a longer-lived copy of your messages on the server,
you can also turn on <a href="#delold">“delete messages from server automatically”</a>.</p>
<h3 id="pfs"> <h3 id="pfs">
@ -1178,45 +1042,52 @@ you can also turn on <a href="#delold">“delete messages from server automatica
</h3> </h3>
<p>No, Delta Chat doesnt support Perfect Forward Secrecy (PFS). <p>No, not yet.</p>
This means that if your Delta Chat private decryption key is leaked,
<p>Delta Chat today doesnt support Perfect Forward Secrecy (PFS).
This means that if your private decryption key is leaked,
and someone has collected your prior in-transit messages, and someone has collected your prior in-transit messages,
they will be able to decrypt and read them using the leaked decryption key.</p> they will be able to decrypt and read them using the leaked decryption key.
Note that Forward Secrecy only increases security if you delete messages.
Otherwise, someone obtaining your decryption keys
is typically also able to get all your non-deleted messages
and doesnt even need to decrypt any previously collected messages.</p>
<p>Note, however, that if anyone obtains to your decryption keys, <p>We designed a Forward Secrecy approach that withstood
they will typically also be able to obtain your messages, initial examination from some cryptographers and implementation experts
irrespective if Perfect Forward Secrecy is in place or not. but is pending a more formal write up
The typical real-world situation for leaked decryption keys is device seizure to ascertain it reliably works in federated messaging and with multi-device usage,
which we discuss in our answer <a href="#device-seizure">on metadata and device seizure</a>.</p> before it could be implemented in <a href="https://github.com/chatmail/core">chatmail core</a>,
which would make it available in all <a href="https://chatmail.at/clients">chatmail clients</a>.</p>
<p>It is possible that Delta Chat evolves to support Perfect Forward Secrecy, <h3 id="pqc">
because OpenPGP is just a container for encrypted messages
but encryption key management (and thus key rotation or key “ratcheting”)
could be organized in flexible ways.
See <a href="https://gitlab.com/sequoia-pgp/openpgp-dr">Seqouias PFS prototype</a>
for existing experiments in the OpenPGP implementor community.</p>
<h3 id="is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">
Is end-to-end encryption of Delta Chat as safe as Signal? <a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal" class="anchor"></a> Does Delta Chat support Post-Quantum-Cryptography? <a href="#pqc" class="anchor"></a>
</h3> </h3>
<p>It depends on what is important to you. <p>No, not yet.</p>
Delta Chat <a href="#pfs">does not support PFS</a> like Signal does
but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</a>
that are safe against compromised servers or corrupted networks.
Signal and most other PFS-supporting messengers do not provide
a practical scheme for protecting chat groups from network attacks
which are arguably more worrisome
than a potential attacker who seizes your phone and private encryption setup
but somehow not your messages, yet has a full record of all
past encrypted messages.</p>
<p>In any case, Delta Chats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a> <p>Delta Chat uses the Rust OpenPGP library <a href="https://github.com/rpgp/rpgp">rPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p> which supports the latest <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/">IETF Post-Quantum-Cryptography OpenPGP draft</a>.
We aim to add PQC support in <a href="https://github.com/chatmail/core">chatmail core</a> after the draft is finalized at the IETF
in collaboration with other OpenPGP implementers.</p>
<h3 id="how-can-i-manually-check-encryption-information">
How can I manually check encryption information? <a href="#how-can-i-manually-check-encryption-information" class="anchor"></a>
</h3>
<p>You may check the end-to-end encryption status manually in the “Encryption” dialog
(user profile on Android/iOS or right-click a users chat-list item on desktop).
Delta Chat shows two fingerprints there.
If the same fingerprints appear on your own and your contacts device,
the connection is safe.</p>
<h3 id="importkey"> <h3 id="importkey">
@ -1251,7 +1122,7 @@ from most recent to older:</p>
<li> <li>
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of <p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place. rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat. rPGP serves as the end-to-end encryption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
Two advisories were released related to the findings of this audit:</p> Two advisories were released related to the findings of this audit:</p>
<ul> <ul>
@ -1498,9 +1369,10 @@ copies on the devices of your chat partners. Other than that, its completely
isolated from the Internet.</li> isolated from the Internet.</li>
<li>The privacy a webxdc app offers is the privacy of your chat - as long as you <li>The privacy a webxdc app offers is the privacy of your chat - as long as you
trust the people you chat with, you can trust the webxdc app as well.</li> trust the people you chat with, you can trust the webxdc app as well.</li>
<li>This also means: it can be a privacy risk to open webxdc apps in chats where <li>This also means: it can be a privacy risk to open apps in chats with untrusted members.
you dont trust the members - as you know it from e-mail attachments, where Just like with e-mail attachments, video calls or plain links:
you only open attachments from senders you trust, and not from spammers.</li> open them only from senders you trust, and not from spammers.
Spammers can get to know any data you send to them, as well as your IP address.</li>
</ul> </ul>
<h3 id="where-can-i-get-webxdc-apps"> <h3 id="where-can-i-get-webxdc-apps">
@ -1584,21 +1456,10 @@ this way, you will have a new random Jitsi room every time you call someone.</li
</h3> </h3>
<ul> <p>With a Broadcast List you can send a message to many recipients at once;
<li>With a Broadcast List you can send a message to many recipients at once; when the recipients cannot reply in that list.
they reply to you, you get the reply in your direct 1:1 chat with them. The Broadcast lists are still highly experimental
recipients cant see each other.</li> and will very probably be replaced by something else, stay tuned :)</p>
<li>Technically, it is an E-Mail with many recipients in BCC.</li>
<li>You can turn on the feature in the “experimental features” section in the
advanced settings. Then you can create a Broadcast List from the “New Chat”
dialog.</li>
<li>In case you are using more than one device, Broadcast Lists are currently not
synced between them.</li>
<li>Messages sent to broadcast lists are not encrypted. Encryption would break
anonymity, because then all recipients would know who else received it
(Sending individual mails to everyone would be worse for rate limit and network
consumption reason).</li>
</ul>
<h3 id="how-can-i-share-my-location-with-my-chat-partners"> <h3 id="how-can-i-share-my-location-with-my-chat-partners">
@ -1655,6 +1516,11 @@ vykonáva aplikácia Delta Chat.</p>
</h3> </h3>
<p>Note:
Changing email addresses is temporarily disabled
because of ongoing changes to the DeltaChat core.
It should be available again in a few months.</p>
<ol> <ol>
<li> <li>
<p>Change your address in “Settings → Advanced → Password and Account” and <p>Change your address in “Settings → Advanced → Password and Account” and
@ -1757,19 +1623,19 @@ Niektorí poskytovatelia však potrebujú na správne fungovanie špeciálne mo
pozrite si <a href="https://providers.delta.chat">Prehľad poskytovateľa</a></li> pozrite si <a href="https://providers.delta.chat">Prehľad poskytovateľa</a></li>
</ul> </ul>
<h3 id="i-want-to-manage-my-own-e-mail-server-for-delta-chat-what-do-you-recommend"> <h3 id="i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">
I want to manage my own e-mail server for Delta Chat. What do you recommend? <a href="#i-want-to-manage-my-own-e-mail-server-for-delta-chat-what-do-you-recommend" class="anchor"></a> I want to manage my own server for Delta Chat. What do you recommend? <a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend" class="anchor"></a>
</h3> </h3>
<ul> <ul>
<li>Most mail servers will work well. But what we personally recommend is a <li>Most mail servers will work well. But what we personally recommend is a
combination of mailcow and mailadm, as described <a href="https://delta.chat/en/2023-01-27-upcoming-mail-server-workshops">in this chatmail relay server, as described <a href="https://delta.chat/en/2023-12-13-chatmail">in this
blogpost</a>.</li> blogpost</a>.</li>
<li>You can find an <a href="https://delta.chat/sk/serverguide">installation guide on our website</a>.</li> <li>You can find an <a href="https://github.com/chatmail/relay">installation guide on GitHub</a>.</li>
</ul> </ul>
<h3 id="prečo-musím-zadávať-svoje-e-mailové-heslo-do-delta-chat-je-to-bezpečné"> <h3 id="prečo-musím-zadávať-svoje-e-mailové-heslo-do-delta-chat-je-to-bezpečné">

View file

@ -36,27 +36,24 @@
<li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li> <li><a href="#why-does-delta-chat-integrate-with-centralized-proprietary-applegoogle-push-services">Why does Delta Chat integrate with centralized proprietary Apple/Google push services?</a></li>
</ul> </ul>
</li> </li>
<li><a href="#fshehtëzim-dhe-siguri">Fshehtëzim dhe Siguri</a> <li><a href="#e2ee">Fshehtëzim dhe Siguri</a>
<ul> <ul>
<li><a href="#cilët-standarde-përdoren-për-fshehtëzim-skaj-më-skaj">Cilët standarde përdoren për fshehtëzim skaj-më-skaj?</a></li> <li><a href="#cilët-standarde-përdoren-për-fshehtëzim-skaj-më-skaj">Cilët standarde përdoren për fshehtëzim skaj-më-skaj?</a></li>
<li><a href="#whene2e">How can i know if messages are end-to-end encrypted?</a></li> <li><a href="#whene2e">How can i know if messages are end-to-end encrypted?</a></li>
<li><a href="#howtoe2ee">How can I get guaranteed end-to-end encryption and green checkmarks?</a></li> <li><a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption">Can i still receive or send mails without end-to-end encryption?</a></li>
<li><a href="#e2eeguarantee">What does the green checkmark and “guaranteed end-to-end encryption” mean?</a></li> <li><a href="#howtoe2ee">How can I establish a chat with a new contact?</a></li>
<li><a href="#nocryptanymore">A contact “sent a message from another device”, what can i do?</a></li> <li><a href="#e2eeguarantee">What does the green checkmark in a contact profile mean?</a></li>
<li><a href="#are-attachments-pictures-files-audio-etc-end-to-end-encrypted">Are attachments (pictures, files, audio etc.) end-to-end encrypted?</a></li> <li><a href="#are-attachments-pictures-files-audio-etc-end-to-end-encrypted">Are attachments (pictures, files, audio etc.) end-to-end encrypted?</a></li>
<li><a href="#openpgp-secure">A është i siguruar OpenPGP?</a></li> <li><a href="#openpgp-secure">A është i siguruar OpenPGP?</a></li>
<li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end -encryption?</a></li> <li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end-encryption?</a></li>
<li><a href="#a-mund-të-preket-delta-chat-i-nga-efail">A mund të preket Delta Chat-i nga EFAIL?</a></li> <li><a href="#a-mund-të-preket-delta-chat-i-nga-efail">A mund të preket Delta Chat-i nga EFAIL?</a></li>
<li><a href="#tls">Is a message exposed in cleartext if end-to-end encryption is not available?</a></li> <li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
<li><a href="#message-metadata">Si i mbron Delta Chat-i tejtëdhënat në mesazhe?</a></li> <li><a href="#message-metadata">Si i mbron Delta Chat-i tejtëdhënat në mesazhe?</a></li>
<li><a href="#device-seizure">Si të mbrohen tejtëdhënat dhe kontaktet, kur shtien në dorë një pajisje?</a></li> <li><a href="#device-seizure">Si të mbrohen tejtëdhënat dhe kontaktet, kur shtien në dorë një pajisje?</a></li>
<li><a href="#how-can-i-check-encryption-information">How can i check encryption information?</a></li> <li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
<li><a href="#si-mund-ta-kontrolloj-gjendjen-e-fshehtëzimit-të-mesazheve">Si mund ta kontrolloj gjendjen e fshehtëzimit të mesazheve?</a></li>
<li><a href="#pse-shoh-mesazhe-të-pafshehtëzuar">Pse shoh mesazhe të pafshehtëzuar?</a></li>
<li><a href="#how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app">How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app?</a></li>
<li><a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion">How can I ensure message end-to-end encryption and deletion?</a></li>
<li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li> <li><a href="#pfs">Does Delta Chat support Perfect Forward Secrecy?</a></li>
<li><a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">Is end-to-end encryption of Delta Chat as safe as Signal?</a></li> <li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
<li><a href="#how-can-i-manually-check-encryption-information">How can I manually check encryption information?</a></li>
<li><a href="#importkey">A mund të ripërdor kyçin tim ekzistues privat?</a></li> <li><a href="#importkey">A mund të ripërdor kyçin tim ekzistues privat?</a></li>
<li><a href="#security-audits">A është bërë auditim i pavarur i Delta Chat-it për cenueshmëri sigurie?</a></li> <li><a href="#security-audits">A është bërë auditim i pavarur i Delta Chat-it për cenueshmëri sigurie?</a></li>
</ul> </ul>
@ -90,7 +87,7 @@
<ul> <ul>
<li><a href="#çleje-lyp-delta-chat-i">Çleje lyp Delta Chat-i?</a></li> <li><a href="#çleje-lyp-delta-chat-i">Çleje lyp Delta Chat-i?</a></li>
<li><a href="#a-funksionon-delta-chat-me-shërbimin-tim-email">A funksionon Delta Chat me shërbimin <em>tim</em> email?</a></li> <li><a href="#a-funksionon-delta-chat-me-shërbimin-tim-email">A funksionon Delta Chat me shërbimin <em>tim</em> email?</a></li>
<li><a href="#dua-të-administroj-shërbyesin-tim-email-për-delta-chat-çrekomandoni">Dua të administroj shërbyesin tim email për Delta Chat. Çrekomandoni?</a></li> <li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
<li><a href="#pse-më-duhet-të-jap-fjalëkalimin-e-email-it-tim-në-delta-chat-a-është-e-sigurt-kjo">Pse më duhet të jap fjalëkalimin e email-it tim në Delta Chat? A është e sigurt kjo?</a></li> <li><a href="#pse-më-duhet-të-jap-fjalëkalimin-e-email-it-tim-në-delta-chat-a-është-e-sigurt-kjo">Pse më duhet të jap fjalëkalimin e email-it tim në Delta Chat? A është e sigurt kjo?</a></li>
<li><a href="#cilat-mesazhe-shfaqen-në-delta-chat">Cilat mesazhe shfaqen në Delta Chat?</a></li> <li><a href="#cilat-mesazhe-shfaqen-në-delta-chat">Cilat mesazhe shfaqen në Delta Chat?</a></li>
<li><a href="#a-mbulon-delta-chat-i-email-e-html">A mbulon Delta Chat-i email-e HTML?</a></li> <li><a href="#a-mbulon-delta-chat-i-email-e-html">A mbulon Delta Chat-i email-e HTML?</a></li>
@ -724,10 +721,10 @@ that achieves “instant delivery” of messages for all chatmail servers
including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>. including a potential one <a href="https://delta.chat/chatmail#selfhosted">you might setup yourself without our permission</a>.
Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p> Welcome to the power of the interoperable and massive chatmail and e-mail system :)</p>
<h2 id="fshehtëzim-dhe-siguri"> <h2 id="e2ee">
Fshehtëzim dhe Siguri <a href="#fshehtëzim-dhe-siguri" class="anchor"></a> Fshehtëzim dhe Siguri <a href="#e2ee" class="anchor"></a>
</h2> </h2>
@ -740,18 +737,26 @@ Welcome to the power of the interoperable and massive chatmail and e-mail system
</h3> </h3>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically <p>Delta Chat uses a <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>
establishing end-to-end encryption with contacts and group chats. to provide automatic end-to-end encryption using these protocols:</p>
Autocrypt uses a limited and <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>.
End-to-End encrypted messages are marked with a padlock
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../lock-icon.png" alt="padlock" />.</p>
<p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a> <ul>
are used for establishing chats with guaranteed end-to-end encryption <li>
which protects against network attacks and compromised servers. <p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join</a>
Chats marked with a green checkmark to exchange encryption setup information through QR-code scanning or “invite links”.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> </li>
guarantee end-to-end encrypted messages.</p> <li>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically
establishing end-to-end encryption between contacts and all members of a group chat.</p>
</li>
<li>
<p><a href="https://github.com/chatmail/core/blob/main/spec.md#attaching-a-contact-to-a-message">Sharing a contact to a
chat</a>
enables receivers to use end-to-end encryption with the contact.</p>
</li>
</ul>
<p>Delta Chat does not query, publish or interact with any OpenPGP key servers.</p>
<h3 id="whene2e"> <h3 id="whene2e">
@ -761,28 +766,37 @@ guarantee end-to-end encrypted messages.</p>
</h3> </h3>
<p>All end-to-end encrypted messages carry a padlock:</p> <p>All messages in Delta Chat are <strong>end-to-end encrypted by default</strong>.
Since the Delta Chat Version 2 release series (July 2025)
there are no lock or similar markers on end-to-end encrypted messages, anymore.</p>
<p><img style="width:160px; margin:1px" src="../lock-screenshot.png" alt="padlock in bubble" /></p> <h3 id="can-i-still-receive-or-send-mails-without-end-to-end-encryption">
<p>End-to-end encryption is guaranteed if there is a green checkmark next to the chat title:</p>
<p><img style="width:211px; margin:1px" src="../green-checkmark-screenshot.png" alt="green checkmark in title" /></p>
<h3 id="howtoe2ee">
How can I get guaranteed end-to-end encryption and green checkmarks? <a href="#howtoe2ee" class="anchor"></a> Can i still receive or send mails without end-to-end encryption? <a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption" class="anchor"></a>
</h3> </h3>
<p>If you have a second communication channel with your chat partner, <p>If you use default <a href="https://chatmail.at/relays">chatmail relays</a>,
like a video chat or a different messenger, it is impossible to receive or send messages without end-to-end encryption.</p>
you can generate an invite link.</p>
<p>If you are together in person, <p>If you instead create a profile using a classic e-mail server,
you can show a QR code to your chat partner.</p> you can send and receive messages without end-to-end encryption.
Such messages lacking end-to-end encryption are marked with an e-mail icon
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
<h3 id="howtoe2ee">
How can I establish a chat with a new contact? <a href="#howtoe2ee" class="anchor"></a>
</h3>
<p>You can send an invite link through another private chat,
show an invitation QR code when next to each other or in a video call,
or click on a “contact” that was shared in a chat.</p>
<ul> <ul>
<li> <li>
@ -797,135 +811,54 @@ on the Delta Chat app main screen.</p>
</li> </li>
</ul> </ul>
<p>Let your chat partner scan the QR image <p>Ask your chat partner to scan the QR image
with their Delta Chat app, with their Delta Chat app,
or click “Copy” or “Share” to create an invite link or click “Copy” or “Share” to create an invite link
and share it with your chat partner.</p> and share it with your chat partner.</p>
<p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">Secure-Join network messages are exchanged</a> between both devices.</p> <p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">end-to-end encryption is getting established</a>.</p>
<ul> <ul>
<li> <li>
<p>If both devices are online, <p>If both sides are online, they will soon see a (group or direct) chat
both sides will eventually see a (group or direct) chat with a green checkmark and can start messaging securely.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
next to the title.</p>
</li> </li>
<li> <li>
<p>If one of the devices is offline, the green checkmarks will only <p>If one side is offline or in bad network,
appear later when the device is internet-connected again the ability to chat is delayed until connectivity is restored.</p>
and the Secure-Join network protocol completed.</p>
</li> </li>
</ul> </ul>
<p>Congratulations! <p>Congratulations!
You now will automatically use guaranteed end-to-end encryption You now will automatically use end-to-end encryption
with this contact and both of you can add each other to green-checkmarked groups with this contact.
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />, If you add each other to chat groups,
thereby automatically spreading guaranteed end-to-end encryption among its members.</p> end-to-end encryption will be established among all members.</p>
<h3 id="e2eeguarantee"> <h3 id="e2eeguarantee">
What does the green checkmark and “guaranteed end-to-end encryption” mean? <a href="#e2eeguarantee" class="anchor"></a> What does the green checkmark in a contact profile mean? <a href="#e2eeguarantee" class="anchor"></a>
</h3> </h3>
<p>Chat titles with green checkmarks <p>A contact profile might show a green checkmark
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
mean that all messages in the chat will be end-to-end encrypted and an “Introduced by” line.
and can not be read or altered by compromised e-mail servers or Internet providers.
Joining green-checkmarked group chats
safely spreads everybodys encryption information (and green checkmarks)
in a manner that guarantees end-to-end encryption in the group and among members.</p>
<p>Contact profiles with green checkmarks
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
mean that messaging a contact is currently guaranteed to be end-to-end encrypted.
Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you
or was introduced by a another green-checkmarked contact. or was introduced by a another green-checkmarked contact.
Introductions happen automatically when adding members to groups. Introductions happen automatically when adding members to groups.
Whoever adds a contact to a green-checkmarked group becomes an introducer Whoever adds a green-checkmarked contact to a group with only green-checkmarked members
to those members who didnt yet know about the added contact. becomes an introducer.
In a contact profile you can tap on the “Introduced by …” text repeatedly In a contact profile you can tap on the “Introduced by …” text repeatedly
until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p> until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p>
<p>Note that in a contact profile you may see and tap introducers
but there is no green checkmark in the profile title.
This usually means that the contact <a href="#nocryptanymore">“sent a message from another device”</a>.</p>
<p>For more in-depth discussion of “guaranteed end-to-end encryption” <p>For more in-depth discussion of “guaranteed end-to-end encryption”
please see <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a> please see <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join protocols</a>
and specifically read about “Verified Groups”, the technical term and specifically read about “Verified Groups”, the technical term
of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.</p> of what is called here “green-checkmarked” or “guaranteed end-to-end encrypted” chats.</p>
<h3 id="nocryptanymore">
A contact “sent a message from another device”, what can i do? <a href="#nocryptanymore" class="anchor"></a>
</h3>
<p>Your chat with a contact lost guaranteed end-to-end encryption.
The green checkmark was removed for this chat and contact when you see this warning.
<strong>If you find the sudden drop of guaranteed end-to-end encryption
surprising for this contact then dont accept the warning!</strong>
Instead check with your contact through a second channel
like a video call, other messenger or a phone call,
to find out what happened.</p>
<p>If your contact actually caused the drop of guaranteed end-to-end encryption
please see the next paragraphs for common reasons and their mitigations.
Regardless, all other green-checkmarked chats remain guaranteed end-to-end encrypted
even if the contact is a member there.</p>
<p><strong>Your contact is using Delta Chat on a second device (phone or laptop)</strong></p>
<p>If they have another device with a Delta Chat app running,
they should remove the profile from the new device
and add it <a href="#multiclient">as a second device as described here</a>.
As soon as they message you afterwards, the warning will be gone
and guaranteed encryption is established with both devices of your contact.</p>
<p><strong>Your contact reinstalled Delta Chat using their old account login</strong></p>
<p>If they have <a href="#backup">a backup file</a>,
they should remove the profile from the new device
and rather import the backup file to re-create their profile.
As soon as they message you afterwards, the warning will be gone
and guaranteed encryption is re-established for this contact.</p>
<p>If they dont have a backup file, its best to perform a <a href="#howtoe2ee">QR scan</a>
with your chat partner to re-establish guaranteed end-to-end encryption.</p>
<p><strong>Your contact sent a mail through a webmail interface or another e-mail app
and will get back to using Delta Chat soon again.</strong></p>
<p>If you are sure that the contact sometimes uses webmail,
or another mail app lacking end-to-end encryption,
then you may accept the warning.
As soon as your contact uses Delta Chat again,
guaranteed end-to-end encryption will be automatically re-established.</p>
<p><strong>Your contact stopped using Delta Chat entirely</strong></p>
<p>Sometimes remaining in contact is more important than end-to-end encryption.
<a href="#tls">“Transport Layer Encryption” (TLS)</a> may still meaningfully protect
the confidentiality of your messages between your device and the e-mail server.
But without end-to-end encryption you and your contact are trusting your e-mail server
to not read or manipulate your messages, and to not hand them to third parties.</p>
<p>In any case, you can not do much else than accept the warning.
Please also remove the contact from any active green-checkmarked group
which you can find in “Shared chats” in the Contact profile.
This spares your contact from getting “unreadable” messages.</p>
<p>If the contact removed Delta Chat because of buggy or undesirable behaviour,
please consider posting to our <a href="https://support.delta.chat">support forum</a>
to help us identify and address common problems. Thanks!</p>
<h3 id="are-attachments-pictures-files-audio-etc-end-to-end-encrypted"> <h3 id="are-attachments-pictures-files-audio-etc-end-to-end-encrypted">
@ -950,8 +883,7 @@ and attachment metadata such as filenames.</p>
</h3> </h3>
<p>Yes, Delta Chat uses a secure subset of OpenPGP <p>Yes, Delta Chat uses a secure subset of OpenPGP
and only displays a padlock security indicator on a message requiring the whole message to be properly encrypted and signed.
if the whole message is properly encrypted and signed.
For example, “Detached signatures” are not treated as secure.</p> For example, “Detached signatures” are not treated as secure.</p>
<p>OpenPGP is not insecure by itself. <p>OpenPGP is not insecure by itself.
@ -972,7 +904,7 @@ which was thankfully adopted in summer 2023.</p>
<h3 id="openpgp-alternatives"> <h3 id="openpgp-alternatives">
Did you consider using alternatives to OpenPGP for end-to-end -encryption? <a href="#openpgp-alternatives" class="anchor"></a> Did you consider using alternatives to OpenPGP for end-to-end-encryption? <a href="#openpgp-alternatives" class="anchor"></a>
</h3> </h3>
@ -1015,17 +947,15 @@ as defined by the Autocrypt Level 1 specification.</p>
<h3 id="tls"> <h3 id="tls">
Is a message exposed in cleartext if end-to-end encryption is not available? <a href="#tls" class="anchor"></a> Are messages marked with the mail icon exposed on the Internet? <a href="#tls" class="anchor"></a>
</h3> </h3>
<p>Even if your messages are not guaranteed to be end-to-end encrypted, <p>If you are sending or receiving e-mail messages without end-to-end encryption (using a classic e-mail server),
they are still protected from Internet providers like cell or cable companies. they are still protected from cell or cable companies who can not read or modify your e-mail messages.
However, your and your recipients e-mail providers But both your and your recipients e-mail providers
may read, analyze or even modify your messages, may read, analyze or modify your messages, including any attachments.</p>
including any attachments,
if they are not end-to-end encrypted.</p>
<p>Delta Chat by default uses strict <p>Delta Chat by default uses strict
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a> <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS encryption</a>
@ -1038,10 +968,6 @@ then transport encryption will be enforced between e-mail providers
in which case Delta Chat communications will never be exposed in cleartext to the Internet in which case Delta Chat communications will never be exposed in cleartext to the Internet
even if the message was not end-to-end encrypted.</p> even if the message was not end-to-end encrypted.</p>
<p>Note that <a href="#howtoe2ee">maintaining guaranteed end-to-end encryption</a> on top of TLS encryption
provides pervasive safety between your and the recipients devices.
Not even your e-mail or Internet provider will be able to read or modify your messages.</p>
<h3 id="message-metadata"> <h3 id="message-metadata">
@ -1050,25 +976,25 @@ Not even your e-mail or Internet provider will be able to read or modify your me
</h3> </h3>
<p>Delta Chat protects most message metadata by putting the following information <p>Unlike most other messengers,
into the end-to-end encrypted part of messages:</p> Delta Chat apps do not store any metadata about contacts or groups on servers, also not in encrypted form.
Instead, all group metadata is end-to-end encrypted and stored on end-user devices, only.</p>
<p>E-mail Servers can therefore only see</p>
<ul> <ul>
<li>Rresht subjekti</li> <li>
<li>Avatar dhe emër grupi</li> <p>the message date,</p>
<li>Kërkesa MDN (dëftesë leximi) (<code class="language-plaintext highlighter-rouge">Chat-Disposition-Notification-To</code>)</li> </li>
<li>Afatmatës mesazhesh që zhduken (<code class="language-plaintext highlighter-rouge">Ephemeral-Timer</code>)</li> <li>
<li><code class="language-plaintext highlighter-rouge">Chat-Group-Member-Removed</code>, <code class="language-plaintext highlighter-rouge">Chat-Group-Member-Added</code></li> <p>sender and receiver addresses</p>
<li>Krye <code class="language-plaintext highlighter-rouge">Secure-Join</code> që përmban urdhra për pjesëmarrje të siguruar</li> </li>
<li>Njoftim mbi aktivizim tregimi vendndodhjeje</li> <li>
<li>URL dhome WebRTC</li> <p>and message size.</p>
</li>
</ul> </ul>
<p>E-Mail servers do not get access to this protected metadata <p>All other message, contact and group metadata resides in the end-to-end encrypted part of messages.</p>
but they do see the message date as well as the message size,
and, more importantly, the sender and receiver addresses.
E-mail servers need receiver addresses to route and
deliver messages to recipients devices.</p>
<h3 id="device-seizure"> <h3 id="device-seizure">
@ -1080,96 +1006,34 @@ deliver messages to recipients devices.</p>
<p>Both for protecting against metadata-collecting e-mail servers <p>Both for protecting against metadata-collecting e-mail servers
as well as against the threat of device seizure as well as against the threat of device seizure
we recommend to use a <a href="https://delta.chat/chatmail">chatmail server</a> we recommend to use a <a href="https://chatmail.at/relays">chatmail relay</a>
to create pseudonymous temporary profiles through QR-code scans. to create chat profiles using random e-mail addresses for transport.
Note that Delta Chat apps on all platforms support multiple profiles Note that Delta Chat apps on all platforms support multiple profiles
so you can easily use situation-specific profiles next to your “main” profile so you can easily use situation-specific profiles next to your “main” profile
with the knowledge that all their data, along with all metadata, will be deleted. with the knowledge that all their data, along with all metadata, will be deleted.
Moreover, if a device is seized then contacts using temporary profiles Moreover, if a device is seized then chat contacts using short-lived profiles
can not be identified easily, as compared to messengers which reveal can not be identified easily.</p>
phone numbers in chat groups which in turn are often associated with legal identities.</p>
<h3 id="how-can-i-check-encryption-information"> <h3 id="sealedsender">
How can i check encryption information? <a href="#how-can-i-check-encryption-information" class="anchor"></a> Does Delta Chat support “Sealed Sender”? <a href="#sealedsender" class="anchor"></a>
</h3> </h3>
<p>You may check the end-to-end encryption status manually in the “Encryption” dialog <p>No, not yet.</p>
(user profile on Android/iOS or right-click a users chat-list item on desktop).
Delta Chat shows two fingerprints there.
If the same fingerprints appear on your own and your contacts device,
the connection is safe.</p>
<h3 id="si-mund-ta-kontrolloj-gjendjen-e-fshehtëzimit-të-mesazheve"> <p>The Signal messenger introduced <a href="https://signal.org/blog/sealed-sender/">“Sealed Sender” in 2018</a>
to keep their server infrastructure ignorant of who is sending a message to a set of recipients.
It is particularly important because the Signal server knows the mobile number of each account,
which is usually associated with a passport identity.</p>
<p>Even if <a href="https://chatmail.at/relays">chatmail relays</a>
Si mund ta kontrolloj gjendjen e fshehtëzimit të mesazheve? <a href="#si-mund-ta-kontrolloj-gjendjen-e-fshehtëzimit-të-mesazheve" class="anchor"></a> do not ask for any private data (including no phone numbers),
it might still be worthwhile to protect relational metadata between addresses.
We dont foresee bigger problems in using random throw-away e-mail addresses for sealed sending
</h3> but an implementation has not been agreed as a priority yet.</p>
<p>A little <strong>padlock</strong> in a message bubble denotes
that the message was properly end-to-end encrypted from the given sender.
If there is <strong>no padlock</strong>, the message was not properly end-to-end encrypted
most likely because the sender uses an app or webmail interface
without support for end-to-endencryption.</p>
<h3 id="pse-shoh-mesazhe-të-pafshehtëzuar">
Pse shoh mesazhe të pafshehtëzuar? <a href="#pse-shoh-mesazhe-të-pafshehtëzuar" class="anchor"></a>
</h3>
<p>If a contact uses a non-Autocrypt e-mail app,
all messages involving this contact (in a group or 1:1 chat)
will not be end-to-end encrypted, and thus not show a “padlock” with messages.
Note that even if your contacts use Delta Chat on their account,
they might also use a non-Autocrypt e-mail app on that account
which then may cause intermittently unencrypted messages.
Replying unencrypted to unencrypted messages is mandated by Autocrypt
to prevent unreadable messages on the side of your contacts
and their non-Autocrypt e-mail app.</p>
<h3 id="how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app">
How can i get an end-to-end encrypted chat with a Delta Chat contact who sometimes uses webmail or another non-Autocrypt e-mail app? <a href="#how-can-i-get-an-end-to-end-encrypted-chat-with-a-delta-chat-contact-who-sometimes-uses-webmail-or-another-non-autocrypt-e-mail-app" class="anchor"></a>
</h3>
<p>If you need a safely end-to-end encrypted chat with a contact
who is using their e-mail account both with Delta Chat and non-Autocrypt apps (e.g. webmail),
its best to setup <a href="#howtoe2ee">guaranteed end-to-end encryption with them</a>
and then create a guaranteed end-to-end encrypted group chat with you two as members.
In this group chat all messages will be end-to-end encrypted
even if the direct chat between you two has a
<a href="#nocryptanymore">“… sent a message from another device”</a> warning.</p>
<h3 id="how-can-i-ensure-message-end-to-end-encryption-and-deletion">
How can I ensure message end-to-end encryption and deletion? <a href="#how-can-i-ensure-message-end-to-end-encryption-and-deletion" class="anchor"></a>
</h3>
<p>The best way to ensure every message is end-to-end encrypted,
and metadata deleted as quickly as possible
is <a href="#howtoe2ee">using chats with guaranteed end-to-end encryption</a>
and turning on <a href="#ephemeralmsgs">disappearing messages</a>.</p>
<p>Guaranteed end-to-end encrypted chats protect against <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM attacks</a>
and turning on disappearing messages deletes the messages
on the server after a user-configured time.</p>
<p>Nëse sju duhet te shërbyesi një kopje jetëgjatë e mesazheve tuaj,
mund edhe të aktivizoni <a href="#delold">“fshiji automatikisht nga shërbyesi mesazhe”</a>.</p>
<h3 id="pfs"> <h3 id="pfs">
@ -1179,45 +1043,52 @@ mund edhe të aktivizoni <a href="#delold">“fshiji automatikisht nga shërbyes
</h3> </h3>
<p>No, Delta Chat doesnt support Perfect Forward Secrecy (PFS). <p>No, not yet.</p>
This means that if your Delta Chat private decryption key is leaked,
<p>Delta Chat today doesnt support Perfect Forward Secrecy (PFS).
This means that if your private decryption key is leaked,
and someone has collected your prior in-transit messages, and someone has collected your prior in-transit messages,
they will be able to decrypt and read them using the leaked decryption key.</p> they will be able to decrypt and read them using the leaked decryption key.
Note that Forward Secrecy only increases security if you delete messages.
Otherwise, someone obtaining your decryption keys
is typically also able to get all your non-deleted messages
and doesnt even need to decrypt any previously collected messages.</p>
<p>Note, however, that if anyone obtains to your decryption keys, <p>We designed a Forward Secrecy approach that withstood
they will typically also be able to obtain your messages, initial examination from some cryptographers and implementation experts
irrespective if Perfect Forward Secrecy is in place or not. but is pending a more formal write up
The typical real-world situation for leaked decryption keys is device seizure to ascertain it reliably works in federated messaging and with multi-device usage,
which we discuss in our answer <a href="#device-seizure">on metadata and device seizure</a>.</p> before it could be implemented in <a href="https://github.com/chatmail/core">chatmail core</a>,
which would make it available in all <a href="https://chatmail.at/clients">chatmail clients</a>.</p>
<p>It is possible that Delta Chat evolves to support Perfect Forward Secrecy, <h3 id="pqc">
because OpenPGP is just a container for encrypted messages
but encryption key management (and thus key rotation or key “ratcheting”)
could be organized in flexible ways.
See <a href="https://gitlab.com/sequoia-pgp/openpgp-dr">Seqouias PFS prototype</a>
for existing experiments in the OpenPGP implementor community.</p>
<h3 id="is-end-to-end-encryption-of-delta-chat-as-safe-as-signal">
Is end-to-end encryption of Delta Chat as safe as Signal? <a href="#is-end-to-end-encryption-of-delta-chat-as-safe-as-signal" class="anchor"></a> Does Delta Chat support Post-Quantum-Cryptography? <a href="#pqc" class="anchor"></a>
</h3> </h3>
<p>It depends on what is important to you. <p>No, not yet.</p>
Delta Chat <a href="#pfs">does not support PFS</a> like Signal does
but it provides <a href="#e2eeguarantee">guaranteed end-to-end encrypted chats</a>
that are safe against compromised servers or corrupted networks.
Signal and most other PFS-supporting messengers do not provide
a practical scheme for protecting chat groups from network attacks
which are arguably more worrisome
than a potential attacker who seizes your phone and private encryption setup
but somehow not your messages, yet has a full record of all
past encrypted messages.</p>
<p>In any case, Delta Chats end-to-end encryption uses a <a href="#openpgp-secure">secure subset of OpenPGP</a> <p>Delta Chat uses the Rust OpenPGP library <a href="https://github.com/rpgp/rpgp">rPGP</a>
which has been <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">independently security-audited</a>.</p> which supports the latest <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/">IETF Post-Quantum-Cryptography OpenPGP draft</a>.
We aim to add PQC support in <a href="https://github.com/chatmail/core">chatmail core</a> after the draft is finalized at the IETF
in collaboration with other OpenPGP implementers.</p>
<h3 id="how-can-i-manually-check-encryption-information">
How can I manually check encryption information? <a href="#how-can-i-manually-check-encryption-information" class="anchor"></a>
</h3>
<p>You may check the end-to-end encryption status manually in the “Encryption” dialog
(user profile on Android/iOS or right-click a users chat-list item on desktop).
Delta Chat shows two fingerprints there.
If the same fingerprints appear on your own and your contacts device,
the connection is safe.</p>
<h3 id="importkey"> <h3 id="importkey">
@ -1252,7 +1123,7 @@ from most recent to older:</p>
<li> <li>
<p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of <p>2024 December, an <a href="https://github.com/rpgp/docs/blob/main/audits/NGI%20Core%20rPGP%20penetration%20test%20report%202024%201.0.pdf">NLNET-commissioned Evaluation of
rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place. rPGP</a> by <a href="https://www.radicallyopensecurity.com/">Radically Open Security</a> took place.
rPGP serves as the end-to-end encyption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat. rPGP serves as the end-to-end encryption <a href="https://openpgp.org">OpenPGP</a> engine of Delta Chat.
Two advisories were released related to the findings of this audit:</p> Two advisories were released related to the findings of this audit:</p>
<ul> <ul>
@ -1500,9 +1371,10 @@ copies on the devices of your chat partners. Other than that, its completely
isolated from the Internet.</li> isolated from the Internet.</li>
<li>The privacy a webxdc app offers is the privacy of your chat - as long as you <li>The privacy a webxdc app offers is the privacy of your chat - as long as you
trust the people you chat with, you can trust the webxdc app as well.</li> trust the people you chat with, you can trust the webxdc app as well.</li>
<li>This also means: it can be a privacy risk to open webxdc apps in chats where <li>This also means: it can be a privacy risk to open apps in chats with untrusted members.
you dont trust the members - as you know it from e-mail attachments, where Just like with e-mail attachments, video calls or plain links:
you only open attachments from senders you trust, and not from spammers.</li> open them only from senders you trust, and not from spammers.
Spammers can get to know any data you send to them, as well as your IP address.</li>
</ul> </ul>
<h3 id="ku-mund-të-marr-aplikacione-webxdc"> <h3 id="ku-mund-të-marr-aplikacione-webxdc">
@ -1584,22 +1456,10 @@ this way, you will have a new random Jitsi room every time you call someone.</li
</h3> </h3>
<ul> <p>With a Broadcast List you can send a message to many recipients at once;
<li>Me një Listë Transmetimi mund të dërgoni një mesazh te shumë marrës njëherësh; the recipients cannot reply in that list.
kur ju përgjigjen, përgjigjen e merrni një fjalosjen tuaj të drejtpërdrejt tek për tek Broadcast lists are still highly experimental
Marrësit smund të shohin njëri-tjetrin.</li> and will very probably be replaced by something else, stay tuned :)</p>
<li>Teknikisht, është një email me shumë marrës si BCC.</li>
<li>Veçorinë mund ta aktivizoni te ndarja “veçori eksperimentale”, te rregullimet
e mëtejshme. Mandej mund të krijoni një Listë Transmetimi që nga dialogu
“Fjalosje e Re”.</li>
<li>Në rast se përdorni më shumë se një pajisje, Listat e Transmetimit aktualisht nuk
njëkohësohen mes tyre.</li>
<li>Mesazhet e dërguar te lista transmetimi sjanë të fshehtëzuar. Fshehtëzimi
do të dëmtonte anonimitetin, ngaqë atëherë krejt marrësit do të dinin se cili tjetër
e mori mesazhin.
(Dërgimi i email-eve individualë për këdo do të ishte edhe më keq, për shkak
kufizimesh sasie email-esh që dërgohen dhe konsum trafiku në rrjet).</li>
</ul>
<h3 id="si-mund-tu-tregoj-partnerëve-të-mi-në-fjalosje-vendndodhjen-time"> <h3 id="si-mund-tu-tregoj-partnerëve-të-mi-në-fjalosje-vendndodhjen-time">
@ -1656,6 +1516,11 @@ DeltaChat. Zakonisht kjo do të bëhej nga aplikacioni Delta Chat.</p>
</h3> </h3>
<p>Note:
Changing email addresses is temporarily disabled
because of ongoing changes to the DeltaChat core.
It should be available again in a few months.</p>
<ol> <ol>
<li> <li>
<p>Change your address in “Settings → Advanced → Password and Account” and <p>Change your address in “Settings → Advanced → Password and Account” and
@ -1758,19 +1623,19 @@ Sidoqoftë, disa furnizues shërbimesh kanë nevojë për mundësi speciale, që
të funksionojnë si duhet, shihni <a href="https://providers.delta.chat">Provider Overview</a></li> të funksionojnë si duhet, shihni <a href="https://providers.delta.chat">Provider Overview</a></li>
</ul> </ul>
<h3 id="dua-të-administroj-shërbyesin-tim-email-për-delta-chat-çrekomandoni"> <h3 id="i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">
Dua të administroj shërbyesin tim email për Delta Chat. Çrekomandoni? <a href="#dua-të-administroj-shërbyesin-tim-email-për-delta-chat-çrekomandoni" class="anchor"></a> I want to manage my own server for Delta Chat. What do you recommend? <a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend" class="anchor"></a>
</h3> </h3>
<ul> <ul>
<li>Shumica e shërbyesve email do të funksionojnë mirë. Por çka <li>Most mail servers will work well. But what we personally recommend is a
rekomandojmë personalisht është një ndërthurje e Mailcow-ut dhe Mailadm-it, chatmail relay server, as described <a href="https://delta.chat/en/2023-12-13-chatmail">in this
siç përshkruhet <a href="https://delta.chat/en/2023-01-27-upcoming-mail-server-workshops">në këtë postim blogu</a>.</li> blogpost</a>.</li>
<li>Mund të gjeni një <a href="https://delta.chat/sq/serverguide">udhërrëfyes instalimi në sajtin tonë</a>.</li> <li>You can find an <a href="https://github.com/chatmail/relay">installation guide on GitHub</a>.</li>
</ul> </ul>
<h3 id="pse-më-duhet-të-jap-fjalëkalimin-e-email-it-tim-në-delta-chat-a-është-e-sigurt-kjo"> <h3 id="pse-më-duhet-të-jap-fjalëkalimin-e-email-it-tim-në-delta-chat-a-është-e-sigurt-kjo">

View file

@ -36,27 +36,24 @@
<li><a href="#чому-delta-chat-інтегрується-з-централізованими-пропрієтарними-push-сервісами-applegoogle">Чому Delta Chat інтегрується з централізованими пропрієтарними push-сервісами Apple/Google?</a></li> <li><a href="#чому-delta-chat-інтегрується-з-централізованими-пропрієтарними-push-сервісами-applegoogle">Чому Delta Chat інтегрується з централізованими пропрієтарними push-сервісами Apple/Google?</a></li>
</ul> </ul>
</li> </li>
<li><a href="#шифрування-та-безпека">Шифрування та безпека</a> <li><a href="#e2ee">Шифрування та безпека</a>
<ul> <ul>
<li><a href="#які-стандарти-використовуються-для-наскрізного-шифрування">Які стандарти використовуються для наскрізного шифрування?</a></li> <li><a href="#які-стандарти-використовуються-для-наскрізного-шифрування">Які стандарти використовуються для наскрізного шифрування?</a></li>
<li><a href="#whene2e">Як дізнатися, чи повідомлення зашифровано наскрізним шифруванням?</a></li> <li><a href="#whene2e">Як дізнатися, чи повідомлення зашифровано наскрізним шифруванням?</a></li>
<li><a href="#howtoe2ee">Як отримати гарантоване наскрізне шифрування та зелені галочки?</a></li> <li><a href="#чи-можу-я-отримувати-та-надсилати-пошту-без-наскрізного-шифрування">Чи можу я отримувати та надсилати пошту без наскрізного шифрування?</a></li>
<li><a href="#e2eeguarantee">Що означає зелена галочка і “гарантоване наскрізне шифрування”?</a></li> <li><a href="#howtoe2ee">Як створити чат з новим контактом?</a></li>
<li><a href="#nocryptanymore">Контакт “надіслав повідомлення з іншого пристрою”, що робити?</a></li> <li><a href="#e2eeguarantee">Що означає зелена галочка в профілі контакту?</a></li>
<li><a href="#чи-зашифровані-наскрізно-вкладення-зображення-файли-аудіо-тощо">Чи зашифровані наскрізно вкладення (зображення, файли, аудіо тощо)?</a></li> <li><a href="#чи-зашифровані-наскрізно-вкладення-зображення-файли-аудіо-тощо">Чи зашифровані наскрізно вкладення (зображення, файли, аудіо тощо)?</a></li>
<li><a href="#openpgp-secure">Чи безпечний OpenPGP?</a></li> <li><a href="#openpgp-secure">Чи безпечний OpenPGP?</a></li>
<li><a href="#openpgp-alternatives">Чи розглядали ви можливість використання альтернатив OpenPGP для наскрізного шифрування?</a></li> <li><a href="#openpgp-alternatives">Чи розглядали ви можливість використання альтернатив OpenPGP для наскрізного шифрування?</a></li>
<li><a href="#чи-вразливий-delta-chat-до-efail">Чи вразливий Delta Chat до EFAIL?</a></li> <li><a href="#чи-вразливий-delta-chat-до-efail">Чи вразливий Delta Chat до EFAIL?</a></li>
<li><a href="#tls">Чи буде показано повідомлення відкритим текстом, якщо наскрізне шифрування недоступне?</a></li> <li><a href="#чи-повідомлення-позначені-значком-пошти-доступні-в-інтернетіtls">Чи повідомлення, позначені значком пошти, доступні в Інтернеті?{#tls}</a></li>
<li><a href="#message-metadata">Як Delta Chat захищає метадані у повідомленнях?</a></li> <li><a href="#message-metadata">Як Delta Chat захищає метадані у повідомленнях?</a></li>
<li><a href="#device-seizure">Як захистити метадані та контакти якщо пристрій вилучено?</a></li> <li><a href="#device-seizure">Як захистити метадані та контакти якщо пристрій вилучено?</a></li>
<li><a href="#як-перевірити-інформацію-про-шифрування">Як перевірити інформацію про шифрування?</a></li> <li><a href="#sealedsender">Чи підтримує Delta Chat функцію “Запечатаний відправник”?</a></li>
<li><a href="#як-перевірити-стан-шифрування-повідомлень">Як перевірити стан шифрування повідомлень?</a></li>
<li><a href="#чому-я-бачу-незашифровані-повідомлення">Чому я бачу незашифровані повідомлення?</a></li>
<li><a href="#як-я-можу-отримати-наскрізно-зашифрований-чат-з-контактом-delta-chat-який-іноді-користується-веб-поштою-або-іншим-додатком-електронної-пошти-що-не-підтримує-autocrypt">Як я можу отримати наскрізно зашифрований чат з контактом Delta Chat, який іноді користується веб-поштою або іншим додатком електронної пошти, що не підтримує Autocrypt?</a></li>
<li><a href="#як-забезпечити-наскрізне-шифрування-та-видалення-повідомлень">Як забезпечити наскрізне шифрування та видалення повідомлень?</a></li>
<li><a href="#pfs">Чи підтримує Delta Chat цілковиту пряму секретність (Perfect Forward Secrecy)?</a></li> <li><a href="#pfs">Чи підтримує Delta Chat цілковиту пряму секретність (Perfect Forward Secrecy)?</a></li>
<li><a href="#чи-є-наскрізне-шифрування-delta-chat-таким-же-безпечним-як-signal">Чи є наскрізне шифрування Delta Chat таким же безпечним, як Signal?</a></li> <li><a href="#pqc">Чи підтримує Delta Chat пост-квантову криптографію?</a></li>
<li><a href="#як-я-можу-вручну-перевірити-інформацію-про-шифрування">Як я можу вручну перевірити інформацію про шифрування?</a></li>
<li><a href="#importkey">Чи можна повторно використовувати існуючий закритий ключ?</a></li> <li><a href="#importkey">Чи можна повторно використовувати існуючий закритий ключ?</a></li>
<li><a href="#security-audits">Чи проходив Delta Chat незалежний аудит на наявність вразливостей у безпеці?</a></li> <li><a href="#security-audits">Чи проходив Delta Chat незалежний аудит на наявність вразливостей у безпеці?</a></li>
</ul> </ul>
@ -90,7 +87,7 @@
<ul> <ul>
<li><a href="#яких-дозволів-потребує-delta-chat">Яких дозволів потребує Delta Chat?</a></li> <li><a href="#яких-дозволів-потребує-delta-chat">Яких дозволів потребує Delta Chat?</a></li>
<li><a href="#чи-підтримує-delta-chat-роботу-з-моїм-провайдером-електронної-пошти">Чи підтримує Delta Chat роботу з <em>моїм</em> провайдером електронної пошти?</a></li> <li><a href="#чи-підтримує-delta-chat-роботу-з-моїм-провайдером-електронної-пошти">Чи підтримує Delta Chat роботу з <em>моїм</em> провайдером електронної пошти?</a></li>
<li><a href="#я-хочу-керувати-власним-сервером-електронної-пошти-для-delta-chat-що-ви-порадите">Я хочу керувати власним сервером електронної пошти для Delta Chat. Що ви порадите?</a></li> <li><a href="#я-хочу-керувати-власним-сервером-для-delta-chat-що-ви-порекомендуєте">Я хочу керувати власним сервером для Delta Chat. Що ви порекомендуєте?</a></li>
<li><a href="#чому-я-маю-вводити-пароль-до-моєї-електронної-пошти-у-delta-chat-чи-це-безпечно">Чому я маю вводити пароль до моєї електронної пошти у Delta Chat? Чи це безпечно?</a></li> <li><a href="#чому-я-маю-вводити-пароль-до-моєї-електронної-пошти-у-delta-chat-чи-це-безпечно">Чому я маю вводити пароль до моєї електронної пошти у Delta Chat? Чи це безпечно?</a></li>
<li><a href="#які-повідомлення-відображаються-у-delta-chat">Які повідомлення відображаються у Delta Chat?</a></li> <li><a href="#які-повідомлення-відображаються-у-delta-chat">Які повідомлення відображаються у Delta Chat?</a></li>
<li><a href="#чи-підтримує-delta-chat-html-листи">Чи підтримує Delta Chat HTML-листи?</a></li> <li><a href="#чи-підтримує-delta-chat-html-листи">Чи підтримує Delta Chat HTML-листи?</a></li>
@ -593,10 +590,10 @@ Push-сповіщення автоматично активуються для
<p>Зверніть увагу, що Delta Chat має <a href="#privacy-notifications">невелику систему push-повідомлень, що зберігає конфіденційність</a> яка забезпечує “миттєву доставку” повідомлень на всі chatmail-сервери включаючи потенційний <a href="https://delta.chat/chatmail#selfhosted">який ви можете налаштувати самостійно без нашого дозволу</a>. Ласкаво просимо до потужності сумісної та масової системи чат-пошти та електронної пошти :)</p> <p>Зверніть увагу, що Delta Chat має <a href="#privacy-notifications">невелику систему push-повідомлень, що зберігає конфіденційність</a> яка забезпечує “миттєву доставку” повідомлень на всі chatmail-сервери включаючи потенційний <a href="https://delta.chat/chatmail#selfhosted">який ви можете налаштувати самостійно без нашого дозволу</a>. Ласкаво просимо до потужності сумісної та масової системи чат-пошти та електронної пошти :)</p>
<h2 id="шифрування-та-безпека"> <h2 id="e2ee">
Шифрування та безпека <a href="#шифрування-та-безпека" class="anchor"></a> Шифрування та безпека <a href="#e2ee" class="anchor"></a>
</h2> </h2>
@ -609,10 +606,21 @@ Push-сповіщення автоматично активуються для
</h3> </h3>
<p><a href="https://autocrypt.org">Autocrypt</a> використовується для автоматичного встановлення наскрізного шифрування з контактами та груповими чатами. <p>Delta Chat використовує [безпечну підмножину стандарту OpenPGP] (#openpgp-secure) для забезпечення автоматичного наскрізного шифрування за допомогою цих протоколів:</p>
Autocrypt використовує обмежену і <a href="#openpgp-secure">безпечну підмножину стандарту OpenPGP</a>. Зашифровані наскрізним шифруванням повідомлення позначаються замком <img style="vertical-align:middle; width:1.2em; margin:1px" src="../lock-icon.png" alt="padlock" />.</p>
<p><a href="https://securejoin.delta.chat/en/latest/new.html">Протоколи Secure-Join</a> використовуються для створення чатів з гарантованим наскрізним шифруванням що захищає від мережевих атак і скомпрометованих серверів. Чати, відмічені зеленою галочкою <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> гарантують наскрізне шифрування повідомлень.</p> <ul>
<li>
<p>Використовуйте <a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join</a> щоб обмінюватися інформацією про налаштування шифрування, через сканування QR-коду або “посилання-запрошення”.</p>
</li>
<li>
<p><a href="https://autocrypt.org">Autocrypt</a> використовується для автоматичного встановлення наскрізного шифрування між контактами і всіма учасниками групового чату.</p>
</li>
<li>
<p>[Поширення контакту в чаті] (https://github.com/chatmail/core/blob/main/spec.md#attaching-a-contact-to-a-message) дозволяє отримувачам використовувати наскрізне шифрування з контактом.</p>
</li>
</ul>
<p>Delta Chat не запитує, не публікує і не взаємодіє з будь-якими серверами ключів OpenPGP.</p>
<h3 id="whene2e"> <h3 id="whene2e">
@ -622,102 +630,67 @@ Autocrypt використовує обмежену і <a href="#openpgp-secure"
</h3> </h3>
<p>Всі наскрізні зашифровані повідомлення мають навісний замок:</p> <p>Всі повідомлення в Delta Chat за замовчуванням <strong>наскрізно зашифровані</strong>. Починаючи з версії 2 Delta Chat (липень 2025 року) на наскрізних зашифрованих повідомленнях більше немає замків або інших подібних маркерів.</p>
<p><img style="width:160px; margin:1px" src="../lock-screenshot.png" alt="padlock in bubble" /></p> <h3 id="чи-можу-я-отримувати-та-надсилати-пошту-без-наскрізного-шифрування">
<p>Наскрізне шифрування гарантується, якщо поруч із заголовком чату стоїть зелена галочка:</p>
<p><img style="width:211px; margin:1px" src="../green-checkmark-screenshot.png" alt="green checkmark in title" /></p>
<h3 id="howtoe2ee">
Як отримати гарантоване наскрізне шифрування та зелені галочки? <a href="#howtoe2ee" class="anchor"></a> Чи можу я отримувати та надсилати пошту без наскрізного шифрування? <a href="#чи-можу-я-отримувати-та-надсилати-пошту-без-наскрізного-шифрування" class="anchor"></a>
</h3> </h3>
<p>Якщо у вас є другий канал зв’язку з вашим партнером по чату, наприклад, відеочат або інший месенджер, ви можете згенерувати посилання-запрошення.</p> <p>Якщо ви використовуєте стандартні <a href="https://chatmail.at/relays">ретранслятори чату</a>, неможливо отримувати або надсилати повідомлення без наскрізного шифрування.</p>
<p>Якщо ви разом особисто, ви можете показати QR-код своєму співрозмовнику.</p> <p>Якщо ви створите профіль за допомогою класичного поштового сервера, ви зможете надсилати та отримувати повідомлення без наскрізного шифрування. Такі повідомлення без наскрізного шифрування позначаються значком електронної пошти <img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
<h3 id="howtoe2ee">
Як створити чат з новим контактом? <a href="#howtoe2ee" class="anchor"></a>
</h3>
<p>Ви можете надіслати посилання-запрошення через інший приватний чат, показати QR-код запрошення, коли ви знаходитесь поруч один з одним або під час відеодзвінка, або натиснути на “контакт”, яким ви поділилися в чаті.</p>
<ul> <ul>
<li> <li>
<p>Для <strong>Запрошення до групи</strong>, торкніться назви групи чату, щоб побачити список її учасників, і виберіть “QR-код запрошення”.</p> <p>Для <strong>Запрошення до групи</strong>, торкніться назви групи чату, щоб побачити список її учасників, і виберіть “QR-код запрошення”.</p>
</li> </li>
<li> <li>
<p>Для <strong>прямих запрошень у чат 1:1</strong>, торкніться іконки QR-коду <img style="vertical-align:middle; width:1.8em; margin:1px" src="../qr-icon.png" /> на головному екрані програми Delta Chat.</p> <p>Для <strong>прямих запрошень у чат один-на-один</strong>, торкніться іконки QR-коду <img style="vertical-align:middle; width:1.8em; margin:1px" src="../qr-icon.png" /> на головному екрані програми Delta Chat.</p>
</li> </li>
</ul> </ul>
<p>Дозвольте вашому партнеру по чату відсканувати QR-зображення <p>Попросіть вашого партнера по чату відсканувати QR-зображення у своєму додатку Delta Chat, або натисніть “Копіювати” чи “Поділитися”, щоб створити посилання-запрошення і поділитися ним з вашим партнером по чату.</p>
у своєму додатку Delta Chat, або натисніть “Копіювати” чи “Поділитися”, щоб створити посилання-запрошення і поділитися ним з вашим співрозмовником.</p>
<p>Тепер зачекайте, поки між обома пристроями <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">відбудеться обмін мережевими повідомленнями Secure-Join</a>.</p> <p>Тепер зачекайте, поки встановиться <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">наскрізне шифрування</a>.</p>
<ul> <ul>
<li> <li>
<p>Якщо обидва пристрої онлайн, обидві сторони зрештою побачать (груповий або прямий) чат із зеленою галочкою <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> поруч із заголовком.</p> <p>Якщо обидві сторони онлайн, вони незабаром побачать (груповий або прямий) чат і можуть почати безпечно обмінюватися повідомленнями.</p>
</li> </li>
<li> <li>
<p>Якщо один з пристроїв не в мережі, зелені галочки з’являться пізніше, коли пристрій знову буде підключено до Інтернету а мережевий протокол Secure-Join буде завершено.</p> <p>Якщо одна зі сторін перебуває в офлайні або в поганій мережі, можливість спілкуватися в чаті затримується до відновлення з’єднання.</p>
</li> </li>
</ul> </ul>
<p>Вітаємо! Тепер ви автоматично використовуватимете гарантоване наскрізне шифрування з цим контактом, і ви обидва можете додавати один одного в групи, позначені зеленою галочкою <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />, таким чином автоматично поширюючи гарантоване наскрізне шифрування серед її членів.</p> <p>Вітаємо!
Тепер ви автоматично використовуватимете наскрізне шифрування з цим контактом. Якщо ви додасте один одного в групи чату, наскрізне шифрування буде встановлено між усіма учасниками.</p>
<h3 id="e2eeguarantee"> <h3 id="e2eeguarantee">
Що означає зелена галочка і “гарантоване наскрізне шифрування”? <a href="#e2eeguarantee" class="anchor"></a> Що означає зелена галочка в профілі контакту? <a href="#e2eeguarantee" class="anchor"></a>
</h3> </h3>
<p>Назви чатів із зеленими галочками <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> означають, що всі повідомлення в чаті будуть наскрізно зашифровані і не можуть бути прочитані або змінені скомпрометованими поштовими серверами або інтернет-провайдерами. <p>У профілі контакту може відображатися зелена галочка <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> і рядок “Представлений”. Кожен контакт із зеленою галочкою або зробив пряме [QR-сканування] (#howtoe2ee) з вами або був представлений іншим контактом, позначеним зеленою галочкою. Знайомство відбувається автоматично під час додавання учасників до груп. Той, хто додає контакт із зеленою галочкою до групи, в якій є лише учасники із зеленою галочкою стає представником. У профілі контакту ви можете кілька разів натиснути на текст “Представлений …” поки не потрапите до того, з ким ви безпосередньо зробили [QR-сканування] (#howtoe2ee).</p>
Приєднання до групових чатів із зеленими галочками безпечно поширює інформацію про шифрування (і зелені галочки) всіх учасників таким чином, що гарантує наскрізне шифрування в групі та між її учасниками.</p>
<p>Профілі контактів із зеленими галочками <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> означають, що повідомлення контакту наразі гарантовано зашифровані наскрізним шифруванням. Кожен контакт із зеленою галочкою або зробив пряме <a href="#howtoe2ee">QR-сканування</a> з вами або був представлений іншим контактом, позначеним зеленою галочкою. Знайомство відбувається автоматично під час додавання учасників до груп. Той, хто додає контакт до групи, позначеної зеленою галочкою, стає представником для тих учасників, які ще не знали про доданий контакт. У профілі контакту ви можете кілька разів натиснути на текст “Представлений …” поки не потрапите до того, з ким ви безпосередньо зробили <a href="#howtoe2ee">QR-сканування</a>.</p>
<p>Зверніть увагу, що в профілі контакту ви можете бачити і натискати рекомендувачів але в заголовку профілю немає зеленої галочки. Зазвичай це означає, що контакт <a href="#nocryptanymore">“надіслав повідомлення з іншого пристрою”</a>.</p>
<p>Для більш детального обговорення “гарантованого наскрізного шифрування” будь ласка, перегляньте <a href="https://securejoin.delta.chat/en/latest/new.html">Протоколи безпечного приєднання</a> і, зокрема, прочитайте про “Перевірені групи”, технічний термін того, що тут називається чатами з “зеленою галочкою” або “гарантованим наскрізним шифруванням”.</p> <p>Для більш детального обговорення “гарантованого наскрізного шифрування” будь ласка, перегляньте <a href="https://securejoin.delta.chat/en/latest/new.html">Протоколи безпечного приєднання</a> і, зокрема, прочитайте про “Перевірені групи”, технічний термін того, що тут називається чатами з “зеленою галочкою” або “гарантованим наскрізним шифруванням”.</p>
<h3 id="nocryptanymore">
Контакт “надіслав повідомлення з іншого пристрою”, що робити? <a href="#nocryptanymore" class="anchor"></a>
</h3>
<p>Ваш чат з контактом втратив гарантоване наскрізне шифрування. Зелену галочку було знято для цього чату та контакту, коли ви побачили це попередження. **Якщо ви вважаєте раптове зникнення гарантованого наскрізного шифрування несподіваним для цього контакту, не приймайте попередження! Замість цього зв’яжіться з контактом через другий канал наприклад, відеодзвінок, інший месенджер або телефонний дзвінок, щоб з’ясувати, що сталося.</p>
<p>Якщо ваш контакт дійсно спричинив втрату гарантованого наскрізного шифрування будь ласка, зверніться до наступних параграфів, щоб дізнатися про типові причини та способи їх усунення. Незважаючи на це, всі інші чати, позначені зеленою галочкою, залишаються гарантовано зашифрованими з кінця в кінець навіть якщо контакт є їхнім учасником.</p>
<p><strong>Ваш контакт використовує Delta Chat на другому пристрої (телефоні або ноутбуці)</strong>.</p>
<p>Якщо у них є інший пристрій із запущеним додатком Delta Chat, вони повинні видалити профіль з нового пристрою і додати його <a href="#multiclient">як другий пристрій, як описано тут</a>. Як тільки вони напишуть вам повідомлення, попередження зникне і гарантоване шифрування буде встановлено на обох пристроях вашого контакту.</p>
<p><strong>Ваш контакт перевстановив Delta Chat, використовуючи свій старий логін</strong></p>
<p>Якщо у них є <a href="#backup">файл резервної копії</a>, вони повинні видалити профіль з нового пристрою і, замість цього, імпортувати файл резервної копії для відновлення свого профілю. Як тільки вони напишуть вам повідомлення, попередження зникне і гарантоване шифрування буде відновлено для цього контакту.</p>
<p>Якщо у них немає резервної копії файлу, найкраще виконати <a href="#howtoe2ee">QR-сканування</a> з вашим співрозмовником, щоб відновити гарантоване кінцеве шифрування.</p>
<p><strong>Ваш контакт надіслав листа через веб-інтерфейс або іншу поштову програму і незабаром повернеться до використання Delta Chat.</strong></p>
<p>Якщо ви впевнені, що контакт іноді користується веб-поштою, або іншу поштову програму без наскрізного шифрування, ви можете прийняти попередження. Як тільки ваш контакт знову скористається Delta Chat, гарантоване наскрізне шифрування буде автоматично відновлено.</p>
<p><strong>Ваш контакт повністю припинив користуватися Delta Chat</strong>.</p>
<p>Іноді залишатися на зв’язку важливіше, ніж наскрізне шифрування. <a href="#tls">“Шифрування на транспортному рівні” (TLS)</a> все ще може ефективно захищати конфіденційність ваших повідомлень між вашим пристроєм і сервером електронної пошти. Але без наскрізного шифрування ви та ваш контакт довіряєте серверу електронної пошти не читати і не маніпулювати вашими повідомленнями, а також не передавати їх третім особам.</p>
<p>У будь-якому випадку, ви не можете зробити нічого іншого, окрім як прийняти попередження. Будь ласка, також видаліть контакт з будь-якої активної групи, позначеної зеленою галочкою які ви можете знайти в розділі “Загальні чати” в профілі контакту. Це позбавить ваш контакт від отримання “нечитабельних” повідомлень.</p>
<p>Якщо контакт видалив Delta Chat через помилки або небажану поведінку, будь ласка, розгляньте можливість написати повідомлення на нашому <a href="https://support.delta.chat">форумі підтримки</a> щоб допомогти нам виявити та вирішити загальні проблеми. Дякуємо!</p>
<h3 id="чи-зашифровані-наскрізно-вкладення-зображення-файли-аудіо-тощо"> <h3 id="чи-зашифровані-наскрізно-вкладення-зображення-файли-аудіо-тощо">
@ -738,7 +711,7 @@ Autocrypt використовує обмежену і <a href="#openpgp-secure"
</h3> </h3>
<p>Так, Delta Chat використовує безпечну підмножину OpenPGP і відображає індикатор безпеки у вигляді замка в повідомленні лише тоді, коли все повідомлення належним чином зашифровано і підписано. Наприклад, “Відокремлені підписи” не вважаються безпечними.</p> <p>Так, Delta Chat використовує безпечну підмножину OpenPGP яка вимагає, щоб все повідомлення було належним чином зашифровано і підписано. Наприклад, “відокремлені підписи” не вважаються безпечними.</p>
<p>OpenPGP сам по собі не є небезпечним. Більшість публічно обговорюваних проблем безпеки OpenPGP насправді виникають через недостатню зручність використання або погану реалізацію інструментів чи програм (або обох). <p>OpenPGP сам по собі не є небезпечним. Більшість публічно обговорюваних проблем безпеки OpenPGP насправді виникають через недостатню зручність використання або погану реалізацію інструментів чи програм (або обох).
Особливо важливо розрізняти OpenPGP, стандарт шифрування IETF, і GnuPG (GPG), інструмент командного рядка, що реалізує OpenPGP. Особливо важливо розрізняти OpenPGP, стандарт шифрування IETF, і GnuPG (GPG), інструмент командного рядка, що реалізує OpenPGP.
@ -771,20 +744,18 @@ Delta Chat скоріше використовує реалізацію OpenPGP
<p>Delta Chat також ніколи не був вразливим до EFAIL-атаки “Пряма ексфільтрація” тому що він розшифровує лише “багатокомпонентні/зашифровані” повідомлення, які містять рівно одну зашифровану і підписану частину, як визначено специфікацією Autocrypt Level 1.</p> <p>Delta Chat також ніколи не був вразливим до EFAIL-атаки “Пряма ексфільтрація” тому що він розшифровує лише “багатокомпонентні/зашифровані” повідомлення, які містять рівно одну зашифровану і підписану частину, як визначено специфікацією Autocrypt Level 1.</p>
<h3 id="tls"> <h3 id="чи-повідомлення-позначені-значком-пошти-доступні-в-інтернетіtls">
Чи буде показано повідомлення відкритим текстом, якщо наскрізне шифрування недоступне? <a href="#tls" class="anchor"></a> Чи повідомлення, позначені значком пошти, доступні в Інтернеті?{#tls} <a href="#чи-повідомлення-позначені-значком-пошти-доступні-в-інтернетіtls" class="anchor"></a>
</h3> </h3>
<p>Навіть якщо ваші повідомлення не гарантовано зашифровані наскрізним шифруванням, вони все одно захищені від інтернет-провайдерів, таких як мобільні або кабельні компанії. Однак, ваші провайдери та провайдери електронної пошти одержувача можуть читати, аналізувати або навіть змінювати ваші повідомлення, включаючи будь-які вкладення, якщо вони не зашифровані наскрізним шифруванням.</p> <p>Якщо ви надсилаєте або отримуєте електронні листи без наскрізного шифрування (використовуючи класичний сервер електронної пошти), вони все одно захищені від мобільних або кабельних компаній, які не можуть читати чи змінювати ваші повідомлення. Однак як ваш, так і поштовий провайдер одержувача можуть читати, аналізувати або змінювати ваші листи, включаючи будь-які вкладення.</p>
<p>За замовчуванням Delta Chat використовує суворе <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS-шифрування</a> яке захищає з’єднання між вашим пристроєм і провайдером електронної пошти. Вся робота з TLS-шифруванням Delta Chat пройшла незалежний <a href="#security-audits">аудит безпеки</a>. Крім того, з’єднання між вашим провайдером та провайдером електронної пошти одержувача зазвичай також шифрується при передачі даних. Якщо задіяні поштові сервери підтримують <a href="https://datatracker.ietf.org/doc/html/rfc8461">MTA-STS</a> то між провайдерами електронної пошти буде застосовуватися транспортне шифрування в цьому випадку повідомлення Delta Chat ніколи не будуть доступні в Інтернеті у вигляді відкритого тексту навіть якщо повідомлення не було наскрізь зашифровано.</p> <p>За замовчуванням Delta Chat використовує суворе <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS-шифрування</a> яке захищає з’єднання між вашим пристроєм і провайдером електронної пошти. Вся робота з TLS-шифруванням Delta Chat пройшла незалежний <a href="#security-audits">аудит безпеки</a>. Крім того, з’єднання між вашим провайдером та провайдером електронної пошти одержувача зазвичай також шифрується при передачі даних. Якщо задіяні поштові сервери підтримують <a href="https://datatracker.ietf.org/doc/html/rfc8461">MTA-STS</a> то між провайдерами електронної пошти буде застосовуватися транспортне шифрування в цьому випадку повідомлення Delta Chat ніколи не будуть доступні в Інтернеті у вигляді відкритого тексту навіть якщо повідомлення не було наскрізь зашифровано.</p>
<p>Зверніть увагу, що <a href="#howtoe2ee">підтримка гарантованого наскрізного шифрування</a>, на додаток до шифрування TLS, забезпечує повну безпеку між вашим пристроєм і пристроєм одержувача. Навіть ваш провайдер електронної пошти або інтернет-провайдер не зможуть прочитати або змінити ваші повідомлення.</p>
<h3 id="message-metadata"> <h3 id="message-metadata">
@ -793,20 +764,23 @@ Delta Chat скоріше використовує реалізацію OpenPGP
</h3> </h3>
<p>Delta Chat захищає більшість метаданих повідомлень, поміщаючи наступну інформацію в наскрізно зашифровану частину повідомлень:</p> <p>На відміну від більшості інших месенджерів, додатки Delta Chat не зберігають жодних метаданих про контакти чи групи на серверах, навіть у зашифрованому вигляді. Натомість усі метадані груп наскрізно зашифровані та зберігаються виключно на пристроях користувачів.</p>
<p>Тому поштові сервери можуть бачити лише</p>
<ul> <ul>
<li>Тема повідомлення</li> <li>
<li>Аватар та назва групи</li> <p>дату повідомлення,</p>
<li>Запити MDN (підтвердження прочитання) (<code class="language-plaintext highlighter-rouge">Chat-Disposition-Notification-To</code>)</li> </li>
<li>Таймер зникнення повідомлень (<code class="language-plaintext highlighter-rouge">Ephemeral-Timer</code>)</li> <li>
<li><code class="language-plaintext highlighter-rouge">Chat-Group-Member-Removed</code>, <code class="language-plaintext highlighter-rouge">Chat-Group-Member-Added</code>, <code class="language-plaintext highlighter-rouge">Chat-Group-Member-Added</code>, <code class="language-plaintext highlighter-rouge">Chat-Group-Member-Removed-Member-Added</code>.</li> <p>адреси відправника та одержувача</p>
<li>Заголовок <code class="language-plaintext highlighter-rouge">Secure-Join</code>, що містить команди безпечного приєднання</li> </li>
<li>Сповіщення про увімкнення потокового передавання місцезнаходження</li> <li>
<li>URL-адреса кімнати WebRTC</li> <p>і розмір повідомлення.</p>
</li>
</ul> </ul>
<p>Поштові сервери не мають доступу до цих захищених метаданих але вони бачать дату і розмір повідомлення, і, що важливіше, адреси відправника та отримувача. Поштовим серверам потрібні адреси одержувачів, щоб маршрутизувати і доставляти повідомлення на пристрої одержувача.</p> <p>Усі інші метадані повідомлень, контактів і груп містяться в наскрізно зашифрованій частині повідомлень.</p>
<h3 id="device-seizure"> <h3 id="device-seizure">
@ -816,62 +790,21 @@ Delta Chat скоріше використовує реалізацію OpenPGP
</h3> </h3>
<p>Як для захисту від поштових серверів, що збирають метадані а також для захисту від загрози вилучення пристрою ми рекомендуємо використовувати <a href="https://delta.chat/chatmail">chatmail-сервер</a> для створення псевдонімних тимчасових профілів за допомогою сканування QR-коду. Зверніть увагу, що додатки Delta Chat на всіх платформах підтримують кілька профілів тому ви можете легко використовувати ситуативні профілі поруч з вашим “основним” профілем знаючи, що всі їхні дані, разом з усіма метаданими, будуть видалені. Більше того, якщо пристрій вилучено, то контакти, які використовують тимчасові профілі не можна буде легко ідентифікувати, на відміну від месенджерів, які розкривають номери телефонів у групах чату, які, в свою чергу, часто пов’язані з юридичними особами.</p> <p>Для захисту як від серверів електронної пошти, що збирають метадані, так і від загрози вилучення пристрою, ми рекомендуємо використовувати <a href="https://chatmail.at/relays">чатмейл-релей</a> для створення чат-профілів із випадковими адресами електронної пошти для передавання повідомлень. Зверніть увагу, що додатки Delta Chat на всіх платформах підтримують кілька профілів, тому ви можете легко користуватися профілями, створеними для конкретних ситуацій, поруч із вашим «основним» профілем, з упевненістю, що всі їхні дані, включно з усіма метаданими, буде видалено. Більше того, у разі вилучення пристрою ідентифікувати чат-контакти, які використовують короткочасні профілі, буде вкрай складно.</p>
<h3 id="як-перевірити-інформацію-про-шифрування"> <h3 id="sealedsender">
Як перевірити інформацію про шифрування? <a href="#як-перевірити-інформацію-про-шифрування" class="anchor"></a> Чи підтримує Delta Chat функцію “Запечатаний відправник”? <a href="#sealedsender" class="anchor"></a>
</h3> </h3>
<p>Ви можете перевірити стан наскрізного шифрування вручну в діалоговому вікні “Шифрування” (профіль користувача на Android/iOS або клацніть правою кнопкою миші на елементі списку чату користувача на робочому столі). Delta Chat показує там два відбитки. Якщо на вашому пристрої та пристрої вашого співрозмовника з’являються однакові відбитки, з’єднання безпечне.</p> <p>Ні, поки ще ні.</p>
<h3 id="як-перевірити-стан-шифрування-повідомлень"> <p>Месенджер Signal запровадив [“Запечатаного відправника” у 2018 році] (https://signal.org/blog/sealed-sender/) щоб їхня серверна інфраструктура не знала, хто надсилає повідомлення певній групі одержувачів. Це особливо важливо, оскільки сервер Signal знає номер мобільного телефону кожного акаунта, який зазвичай асоціюється з паспортними даними.</p>
<p>Навіть якщо <a href="https://chatmail.at/relays">чат-мейл релей</a> не запитує ніяких приватних даних (в тому числі номерів телефонів), все одно може мати сенс захистити реляційні метадані між адресами. Ми не передбачаємо великих проблем у використанні випадкових одноразових адрес електронної пошти для запечатаних відправлень але реалізація такої можливості ще не є пріоритетною.</p>
Як перевірити стан шифрування повідомлень? <a href="#як-перевірити-стан-шифрування-повідомлень" class="anchor"></a>
</h3>
<p>Маленький <strong>замок</strong> в бульбашці повідомлення позначає, що повідомлення було належним чином наскрізно зашифроване від відправника. Якщо <strong>немає замка</strong>, повідомлення не було належним чином наскрізно зашифровано, найімовірніше, тому що відправник використовує додаток або інтерфейс веб-пошти без підтримки кінцевого шифрування.</p>
<h3 id="чому-я-бачу-незашифровані-повідомлення">
Чому я бачу незашифровані повідомлення? <a href="#чому-я-бачу-незашифровані-повідомлення" class="anchor"></a>
</h3>
<p>Якщо контакт використовує поштову програму, яка не підтримує Autocrypt всі повідомлення за участю цього контакту (в групі або чаті 1:1) не будуть наскрізно зашифровані, а отже, не показуватимуть “висячого замка” з повідомленнями. Зверніть увагу, що навіть якщо ваші контакти використовують Delta Chat у своєму акаунті, вони також можуть використовувати програму електронної пошти без функції шифрування, що може спричинити періодичні незашифровані повідомлення. Відповідати незашифрованими на незашифровані повідомлення вимагає Autocrypt щоб запобігти отриманню нечитабельних повідомлень на стороні ваших контактів та їхніх поштових програм, які не підтримують Autocrypt.</p>
<h3 id="як-я-можу-отримати-наскрізно-зашифрований-чат-з-контактом-delta-chat-який-іноді-користується-веб-поштою-або-іншим-додатком-електронної-пошти-що-не-підтримує-autocrypt">
Як я можу отримати наскрізно зашифрований чат з контактом Delta Chat, який іноді користується веб-поштою або іншим додатком електронної пошти, що не підтримує Autocrypt? <a href="#як-я-можу-отримати-наскрізно-зашифрований-чат-з-контактом-delta-chat-який-іноді-користується-веб-поштою-або-іншим-додатком-електронної-пошти-що-не-підтримує-autocrypt" class="anchor"></a>
</h3>
<p>Якщо вам потрібен безпечний наскрізно зашифрований чат з контактом який використовує свій акаунт як у Delta Chat, так і в інших додатках (наприклад, веб-пошті), що не підтримують автошифрування, найкраще налаштувати <a href="#howtoe2ee">гарантоване наскрізне шифрування з ними</a>, а потім створити груповий чат з гарантованим наскрізним шифруванням, учасниками якого будете ви двоє. У цьому груповому чаті всі повідомлення будуть наскрізно зашифровані навіть якщо в прямому чаті між вами буде <a href="#nocryptanymore">“… надіслано повідомлення з іншого пристрою”</a>.</p>
<h3 id="як-забезпечити-наскрізне-шифрування-та-видалення-повідомлень">
Як забезпечити наскрізне шифрування та видалення повідомлень? <a href="#як-забезпечити-наскрізне-шифрування-та-видалення-повідомлень" class="anchor"></a>
</h3>
<p>Найкращий спосіб забезпечити наскрізне шифрування кожного повідомлення, а метадані видалялися якнайшвидше, це <a href="#howtoe2ee">використання чатів з гарантованим наскрізним шифруванням</a>
та увімкнення <a href="#ephemeralmsgs">зникаючих повідомлень</a>.</p>
<p>Гарантований наскрізно шифрований чат захищає від <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM-атак</a>, а увімкнення функції зникнення повідомлень видаляє повідомлення на сервері через певний час, налаштований користувачем.</p>
<p>Якщо вам не потрібне більш довготривале зберігання копій ваших повідомлень на сервері, ви також можете увімкнути <a href="#delold">“автоматично видаляти повідомлення з сервера”</a>.</p>
<h3 id="pfs"> <h3 id="pfs">
@ -881,23 +814,33 @@ Delta Chat скоріше використовує реалізацію OpenPGP
</h3> </h3>
<p>Ні, Delta Chat не підтримує ідеальну пряму секретність (PFS). Це означає, що якщо ваш приватний ключ дешифрування Delta Chat витік, і хтось зібрав ваші попередні транзитні повідомлення, він зможе розшифрувати і прочитати їх за допомогою витоку ключа розшифрування.</p> <p>Ні, поки ще ні.</p>
<p>Зауважте, однак, що якщо хтось отримає ваші ключі розшифрування, вони, як правило, також зможуть отримати ваші повідомлення, незалежно від того, чи працює Perfect Forward Secrecy чи ні. Типовою реальною ситуацією для витоку ключів дешифрування є вилучення пристрою яку ми обговорюємо в нашій відповіді <a href="#device-seizure">про метадані та вилучення пристрою</a>.</p> <p>Delta Chat наразі не підтримує ідеальну пряму секретність (Perfect Forward Secrecy, PFS). Це означає, що якщо ваш приватний ключ для розшифрування буде скомпрометовано, а хтось заздалегідь зібрав ваші повідомлення під час передачі, він зможе розшифрувати та прочитати їх, використовуючи зламаний ключ. Зверніть увагу, що пряма секретність підвищує рівень безпеки лише в тому разі, якщо ви видаляєте повідомлення. Інакше, якщо хтось отримує доступ до ваших ключів розшифрування, він зазвичай також має доступ до всіх ваших невидалених повідомлень і навіть не потребує розшифровувати заздалегідь перехоплені дані.</p>
<p>Можливо, що Delta Chat розвивається для підтримки Perfect Forward Secrecy, тому що OpenPGP - це лише контейнер для зашифрованих повідомлень, але керування ключами шифрування (і, відповідно, ротація ключів або “храповик” ключів) може бути організоване у гнучкий спосіб. Дивіться <a href="https://gitlab.com/sequoia-pgp/openpgp-dr">Прототип PFS від Seqouia</a> щодо існуючих експериментів у спільноті реалізаторів OpenPGP.</p> <p>Ми розробили підхід Forward Secrecy, який витримав початкову експертизу від деяких криптографів та експертів з реалізації але чекає на більш офіційний звіт щоб переконатися, що він надійно працює в об’єднаних системах обміну повідомленнями та при використанні декількох пристроїв, перш ніж його можна буде реалізувати в <a href="https://github.com/chatmail/core">ядрі чату</a>, що зробить його доступним у всіх <a href="https://chatmail.at/clients">клієнтах чату</a>.</p>
<h3 id="чи-є-наскрізне-шифрування-delta-chat-таким-же-безпечним-як-signal"> <h3 id="pqc">
Чи є наскрізне шифрування Delta Chat таким же безпечним, як Signal? <a href="#чи-є-наскрізне-шифрування-delta-chat-таким-же-безпечним-як-signal" class="anchor"></a> Чи підтримує Delta Chat пост-квантову криптографію? <a href="#pqc" class="anchor"></a>
</h3> </h3>
<p>Це залежить від того, що для вас важливо. Delta Chat <a href="#pfs">не підтримує PFS</a>, як Signal але він забезпечує <a href="#e2eeguarantee">гарантовано наскрізні зашифровані чати</a> які захищені від скомпрометованих серверів або пошкоджених мереж. Signal та більшість інших месенджерів, що підтримують PFS, не надають практичної схеми захисту чат-груп від мережевих атак які, можливо, викликають більше занепокоєння ніж потенційний зловмисник, який заволодіє вашим телефоном і приватними налаштуваннями шифрування, але чомусь не ваші повідомлення, але має повний запис усіх минулих зашифрованих повідомлень.</p> <p>Ні, поки ще ні.</p>
<p>У будь-якому випадку, наскрізне шифрування Delta Chat використовує <a href="#openpgp-secure">безпечну підмножину OpenPGP</a> який пройшов <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">незалежний аудит безпеки</a>.</p> <p>Delta Chat використовує бібліотеку Rust OpenPGP <a href="https://github.com/rpgp/rpgp">rPGP</a> яка підтримує останню версію <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/">IETF Post-Quantum-Cryptography OpenPGP draft</a>. Ми плануємо додати підтримку PQC у <a href="https://github.com/chatmail/core">chatmail core</a> після того, як проект буде завершено у IETF у співпраці з іншими розробниками OpenPGP.</p>
<h3 id="як-я-можу-вручну-перевірити-інформацію-про-шифрування">
Як я можу вручну перевірити інформацію про шифрування? <a href="#як-я-можу-вручну-перевірити-інформацію-про-шифрування" class="anchor"></a>
</h3>
<p>Ви можете перевірити стан наскрізного шифрування вручну в діалоговому вікні “Шифрування” (профіль користувача на Android/iOS або клацніть правою кнопкою миші на елементі списку чату користувача на робочому столі). Delta Chat показує там два відбитки. Якщо на вашому пристрої та пристрої вашого співрозмовника з’являються однакові відбитки, з’єднання безпечне.</p>
<h3 id="importkey"> <h3 id="importkey">
@ -1098,9 +1041,12 @@ Delta Chat скоріше використовує реалізацію OpenPGP
<ul> <ul>
<li>Додатки webxdc не можуть надсилати дані в Інтернет або завантажувати щось.</li> <li>Додатки webxdc не можуть надсилати дані в Інтернет або завантажувати щось.</li>
<li>Програма webxdc може обмінюватися даними лише в межах чату Delta Chat з її копіями на пристроях ваших партнерів по чату. В іншому, вони повністю ізольовані від Інтернету.</li> <li>Програма webxdc може обмінюватися даними лише в межах чату Delta Chat з її копіями на пристроях ваших партнерів по чату. В іншому, вона повністю ізольована від Інтернету.</li>
<li>Конфіденційність, яку пропонує додаток webxdc, є конфіденційністю вашого чату - доки ви довіряєте людям, з якими ви спілкуєтеся, ви можете довіряти і додатку webxdc.</li> <li>Конфіденційність, яку пропонує додаток webxdc, є конфіденційністю вашого чату - доки ви довіряєте людям, з якими ви спілкуєтеся, ви можете довіряти і додатку webxdc.</li>
<li>Це також означає, що відкриття додатків webxdc в чатах, де ви не довіряєте учасникам, як ви знаєте з вкладень в електронній пошті, де ви відкриваєте вкладення тільки від відправників, яким довіряєте, а не від спамерів.</li> <li>Це також означає, що відкриття додатків у чатах з користувачами, яким ви не довіряєте, може становити ризик для конфіденційності.
Так само, як і з вкладеннями електронної пошти, відеодзвінками або звичайними посиланнями:
відкривайте їх лише від відправників, яким ви довіряєте, а не від спамерів.
Спамери можуть дізнатися будь-які дані, які ви їм надсилаєте, а також вашу IP-адресу.</li>
</ul> </ul>
<h3 id="де-я-можу-отримати-webxdc-додатки"> <h3 id="де-я-можу-отримати-webxdc-додатки">
@ -1168,13 +1114,9 @@ Delta Chat скоріше використовує реалізацію OpenPGP
</h3> </h3>
<ul> <p>За допомогою списку розсилки ви можете надіслати повідомлення одразу багатьом одержувачам;
<li>За допомогою списку розсилки ви можете надіслати повідомлення багатьом одержувачам одночасно; коли вони відповідають вам, ви отримуєте відповідь у своєму прямому чаті 1:1 з ними. Одержувачі не бачать один одного.</li> одержувачі не можуть відповідати у цьому списку.
<li>Технічно це електронний лист із багатьма одержувачами в BCC.</li> Списки розсилки все ще дуже експериментальні і, ймовірно, будуть замінені чимось іншим, слідкуйте за новинами :)</p>
<li>Ви можете ввімкнути функцію в розділі «експериментальні функції» в розширених налаштуваннях. Потім ви можете створити список трансляцій у діалоговому вікні «Новий чат».</li>
<li>Якщо ви використовуєте більше ніж один пристрій, списки трансляцій наразі не синхронізуються між ними.</li>
<li>Повідомлення, надіслані до списків розсилки, не шифруються. Шифрування порушило б анонімність, оскільки тоді всі одержувачі знали б, хто ще його отримав (надсилання окремих листів усім було б гіршим через обмеження швидкості та споживання мережі).</li>
</ul>
<h3 id="як-я-можу-поділитися-своїм-місцезнаходженням-зі-своїми-співрозмовниками-в-чаті"> <h3 id="як-я-можу-поділитися-своїм-місцезнаходженням-зі-своїми-співрозмовниками-в-чаті">
@ -1220,6 +1162,11 @@ Delta Chat скоріше використовує реалізацію OpenPGP
</h3> </h3>
<p>Примітка:
Зміна адреси електронної пошти тимчасово відключена
через постійні зміни в ядрі DeltaChat.
Ця функція буде знову доступна через кілька місяців.</p>
<ol> <ol>
<li> <li>
<p>Змініть свою адресу в розділі “Налаштування → Додатково → Пароль та обліковий запис” та введіть пароль вашого нового поштового акаунта (і, за необхідності, налаштування сервера). Ви отримаєте інформаційне повідомлення про те, що ви переїжджаєте на нову адресу. Додаткове повідомлення також з’явиться у вашому чаті “Повідомлення пристрою”.</p> <p>Змініть свою адресу в розділі “Налаштування → Додатково → Пароль та обліковий запис” та введіть пароль вашого нового поштового акаунта (і, за необхідності, налаштування сервера). Ви отримаєте інформаційне повідомлення про те, що ви переїжджаєте на нову адресу. Додаткове повідомлення також з’явиться у вашому чаті “Повідомлення пристрою”.</p>
@ -1309,17 +1256,17 @@ Delta Chat скоріше використовує реалізацію OpenPGP
Проте для коректної роботи деяких провайдерів потрібні специфічні налаштування. Дивіться наш <a href="https://providers.delta.chat">огляд провайдерів</a></li> Проте для коректної роботи деяких провайдерів потрібні специфічні налаштування. Дивіться наш <a href="https://providers.delta.chat">огляд провайдерів</a></li>
</ul> </ul>
<h3 id="я-хочу-керувати-власним-сервером-електронної-пошти-для-delta-chat-що-ви-порадите"> <h3 id="я-хочу-керувати-власним-сервером-для-delta-chat-що-ви-порекомендуєте">
Я хочу керувати власним сервером електронної пошти для Delta Chat. Що ви порадите? <a href="#я-хочу-керувати-власним-сервером-електронної-пошти-для-delta-chat-що-ви-порадите" class="anchor"></a> Я хочу керувати власним сервером для Delta Chat. Що ви порекомендуєте? <a href="#я-хочу-керувати-власним-сервером-для-delta-chat-що-ви-порекомендуєте" class="anchor"></a>
</h3> </h3>
<ul> <ul>
<li>Більшість поштових серверів працюватимуть добре. Але ми особисто рекомендуємо поєднання mailcow і mailadm, як описано <a href="https://delta.chat/en/2023-01-27-upcoming-mail-server-workshops">у цьому пості</a>.</li> <li>Більшість поштових серверів будуть працювати добре. Але ми особисто рекомендуємо використовувати сервер ретрансляції чатової пошти, як описано [в цій статті] (https://delta.chat/en/2023-12-13-chatmail).</li>
<li>Ви можете знайти <a href="https://delta.chat/uk/serverguide">посібник із встановлення на нашому веб-сайті</a>.</li> <li>Ви можете знайти <a href="https://github.com/chatmail/relay">посібник зі встановлення на GitHub</a>.</li>
</ul> </ul>
<h3 id="чому-я-маю-вводити-пароль-до-моєї-електронної-пошти-у-delta-chat-чи-це-безпечно"> <h3 id="чому-я-маю-вводити-пароль-до-моєї-електронної-пошти-у-delta-chat-чи-це-безпечно">

View file

@ -36,27 +36,24 @@
<li><a href="#为什么-delta-chat-与集中式专有的-applegoogle-推送服务集成">为什么 Delta Chat 与集中式专有的 Apple/Google 推送服务集成?</a></li> <li><a href="#为什么-delta-chat-与集中式专有的-applegoogle-推送服务集成">为什么 Delta Chat 与集中式专有的 Apple/Google 推送服务集成?</a></li>
</ul> </ul>
</li> </li>
<li><a href="#加密和安全">加密和安全</a> <li><a href="#e2ee">加密和安全</a>
<ul> <ul>
<li><a href="#端到端加密使用了哪些标准-">端到端加密使用了哪些标准 </a></li> <li><a href="#端到端加密使用了哪些标准-">端到端加密使用了哪些标准 </a></li>
<li><a href="#whene2e">我如何知道信息是否经过端到端加密?</a></li> <li><a href="#whene2e">我如何知道信息是否经过端到端加密?</a></li>
<li><a href="#howtoe2ee">如何获得保证的端到端加密和绿色复选标记?</a></li> <li><a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption">Can i still receive or send mails without end-to-end encryption?</a></li>
<li><a href="#e2eeguarantee">绿色复选标记和“保证的端到端加密”是什么意思?</a></li> <li><a href="#howtoe2ee">How can I establish a chat with a new contact?</a></li>
<li><a href="#nocryptanymore">联系人“从另一台设备发送了消息”,我该怎么办?</a></li> <li><a href="#e2eeguarantee">What does the green checkmark in a contact profile mean?</a></li>
<li><a href="#附件图片文件音频等是否已端到端加密">附件(图片、文件、音频等)是否已端到端加密?</a></li> <li><a href="#附件图片文件音频等是否已端到端加密">附件(图片、文件、音频等)是否已端到端加密?</a></li>
<li><a href="#openpgp-secure">OpenPGP 安全吗?</a></li> <li><a href="#openpgp-secure">OpenPGP 安全吗?</a></li>
<li><a href="#openpgp-alternatives">你们是否考虑过使用 OpenPGP 的替代方案进行端到端加密?</a></li> <li><a href="#openpgp-alternatives">Did you consider using alternatives to OpenPGP for end-to-end-encryption?</a></li>
<li><a href="#delta-chat-是否容易受到-efail-攻击">Delta Chat 是否容易受到 EFAIL 攻击?</a></li> <li><a href="#delta-chat-是否容易受到-efail-攻击">Delta Chat 是否容易受到 EFAIL 攻击?</a></li>
<li><a href="#tls">如果端到端加密不可用,消息是否会以明文形式暴露?</a></li> <li><a href="#tls">Are messages marked with the mail icon exposed on the Internet?</a></li>
<li><a href="#message-metadata">Delta Chat 如何保护消息中的元数据?</a></li> <li><a href="#message-metadata">Delta Chat 如何保护消息中的元数据?</a></li>
<li><a href="#device-seizure">当设备被查封时,如何保护元数据和联系人?</a></li> <li><a href="#device-seizure">当设备被查封时,如何保护元数据和联系人?</a></li>
<li><a href="#如何检查加密信息">如何检查加密信息?</a></li> <li><a href="#sealedsender">Does Delta Chat support “Sealed Sender”?</a></li>
<li><a href="#如何检查消息的加密状态">如何检查消息的加密状态?</a></li>
<li><a href="#为什么我会看到未加密的消息">为什么我会看到未加密的消息?</a></li>
<li><a href="#如何与有时使用-webmail-或其他非-autocrypt-电子邮件应用的-delta-chat-联系人获得端到端加密的聊天">如何与有时使用 Webmail 或其他非 Autocrypt 电子邮件应用的 Delta Chat 联系人获得端到端加密的聊天?</a></li>
<li><a href="#如何确保消息端到端加密和删除">如何确保消息端到端加密和删除?</a></li>
<li><a href="#pfs">Delta Chat 是否支持完美前向保密?</a></li> <li><a href="#pfs">Delta Chat 是否支持完美前向保密?</a></li>
<li><a href="#delta-chat-的端到端加密是否与-signal-一样安全">Delta Chat 的端到端加密是否与 Signal 一样安全?</a></li> <li><a href="#pqc">Does Delta Chat support Post-Quantum-Cryptography?</a></li>
<li><a href="#how-can-i-manually-check-encryption-information">How can I manually check encryption information?</a></li>
<li><a href="#importkey">我可以重复使用现有的私钥吗?</a></li> <li><a href="#importkey">我可以重复使用现有的私钥吗?</a></li>
<li><a href="#security-audits">Delta Chat 是否已进行独立的安全漏洞审计?</a></li> <li><a href="#security-audits">Delta Chat 是否已进行独立的安全漏洞审计?</a></li>
</ul> </ul>
@ -90,7 +87,7 @@
<ul> <ul>
<li><a href="#delta-chat-需要哪些权限">Delta Chat 需要哪些权限?</a></li> <li><a href="#delta-chat-需要哪些权限">Delta Chat 需要哪些权限?</a></li>
<li><a href="#delta-chat-可用于-我的-电子邮件提供商吗">Delta Chat 可用于 <em>我的</em> 电子邮件提供商吗?</a></li> <li><a href="#delta-chat-可用于-我的-电子邮件提供商吗">Delta Chat 可用于 <em>我的</em> 电子邮件提供商吗?</a></li>
<li><a href="#我想管理自己的-delta-chat-电子邮件服务器-你有什么建议">我想管理自己的 Delta Chat 电子邮件服务器。 你有什么建议?</a></li> <li><a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">I want to manage my own server for Delta Chat. What do you recommend?</a></li>
<li><a href="#为什么我必须在-delta-chat-中输入我的电子邮件密码-这样安全吗">为什么我必须在 Delta Chat 中输入我的电子邮件密码? 这样安全吗?</a></li> <li><a href="#为什么我必须在-delta-chat-中输入我的电子邮件密码-这样安全吗">为什么我必须在 Delta Chat 中输入我的电子邮件密码? 这样安全吗?</a></li>
<li><a href="#哪些消息会在-delta-chat-中出现">哪些消息会在 Delta Chat 中出现?</a></li> <li><a href="#哪些消息会在-delta-chat-中出现">哪些消息会在 Delta Chat 中出现?</a></li>
<li><a href="#delta-chat-支持-html-电子邮件吗">Delta Chat 支持 HTML 电子邮件吗?</a></li> <li><a href="#delta-chat-支持-html-电子邮件吗">Delta Chat 支持 HTML 电子邮件吗?</a></li>
@ -686,10 +683,10 @@ Delta Chat 收到的所有电子邮件都将在此期限后从服务器中删除
包括<a href="https://delta.chat/chatmail#selfhosted">你可能在未经我们许可的情况下自行设置的服务器</a> 包括<a href="https://delta.chat/chatmail#selfhosted">你可能在未经我们许可的情况下自行设置的服务器</a>
欢迎来到可互操作且庞大的 Chatmail 和电子邮件系统的力量 :)</p> 欢迎来到可互操作且庞大的 Chatmail 和电子邮件系统的力量 :)</p>
<h2 id="加密和安全"> <h2 id="e2ee">
加密和安全 <a href="#加密和安全" class="anchor"></a> 加密和安全 <a href="#e2ee" class="anchor"></a>
</h2> </h2>
@ -702,18 +699,26 @@ Delta Chat 收到的所有电子邮件都将在此期限后从服务器中删除
</h3> </h3>
<p><a href="https://autocrypt.org">Autocrypt</a> 用于自动 <p>Delta Chat uses a <a href="#openpgp-secure">secure subset of the OpenPGP standard</a>
与联系人和群组聊天建立端到端加密。 to provide automatic end-to-end encryption using these protocols:</p>
Autocrypt 使用 OpenPGP 标准的有限且<a href="#openpgp-secure">安全子集</a>
端到端加密消息标有挂锁
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../lock-icon.png" alt="padlock" /></p>
<p><a href="https://securejoin.delta.chat/en/latest/new.html">安全加入协议</a> <ul>
用于建立具有保证的端到端加密的聊天, <li>
从而防止网络攻击和受损服务器。 <p><a href="https://securejoin.delta.chat/en/latest/new.html">Secure-Join</a>
标有绿色复选标记的聊天 to exchange encryption setup information through QR-code scanning or “invite links”.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /> </li>
保证端到端加密消息。</p> <li>
<p><a href="https://autocrypt.org">Autocrypt</a> is used for automatically
establishing end-to-end encryption between contacts and all members of a group chat.</p>
</li>
<li>
<p><a href="https://github.com/chatmail/core/blob/main/spec.md#attaching-a-contact-to-a-message">Sharing a contact to a
chat</a>
enables receivers to use end-to-end encryption with the contact.</p>
</li>
</ul>
<p>Delta Chat does not query, publish or interact with any OpenPGP key servers.</p>
<h3 id="whene2e"> <h3 id="whene2e">
@ -723,28 +728,37 @@ Autocrypt 使用 OpenPGP 标准的有限且<a href="#openpgp-secure">安全子
</h3> </h3>
<p>所有端到端加密的消息都带有挂锁:</p> <p>All messages in Delta Chat are <strong>end-to-end encrypted by default</strong>.
Since the Delta Chat Version 2 release series (July 2025)
there are no lock or similar markers on end-to-end encrypted messages, anymore.</p>
<p><img style="width:160px; margin:1px" src="../lock-screenshot.png" alt="padlock in bubble" /></p> <h3 id="can-i-still-receive-or-send-mails-without-end-to-end-encryption">
<p>如果聊天标题旁边有绿色复选标记,则保证端到端加密:</p>
<p><img style="width:211px; margin:1px" src="../green-checkmark-screenshot.png" alt="green checkmark in title" /></p>
<h3 id="howtoe2ee">
如何获得保证的端到端加密和绿色复选标记? <a href="#howtoe2ee" class="anchor"></a> Can i still receive or send mails without end-to-end encryption? <a href="#can-i-still-receive-or-send-mails-without-end-to-end-encryption" class="anchor"></a>
</h3> </h3>
<p>如果你与你的聊天伙伴有第二个通信渠道, <p>If you use default <a href="https://chatmail.at/relays">chatmail relays</a>,
例如视频聊天或不同的即时通讯应用, it is impossible to receive or send messages without end-to-end encryption.</p>
你可以生成邀请链接。</p>
<p>如果你们面对面在一起, <p>If you instead create a profile using a classic e-mail server,
你可以向你的聊天伙伴展示二维码。</p> you can send and receive messages without end-to-end encryption.
Such messages lacking end-to-end encryption are marked with an e-mail icon
<img style="vertical-align:middle; width:1.2em; margin:1px" src="../email-icon.png" alt="email" />.</p>
<h3 id="howtoe2ee">
How can I establish a chat with a new contact? <a href="#howtoe2ee" class="anchor"></a>
</h3>
<p>You can send an invite link through another private chat,
show an invitation QR code when next to each other or in a video call,
or click on a “contact” that was shared in a chat.</p>
<ul> <ul>
<li> <li>
@ -753,132 +767,60 @@ Autocrypt 使用 OpenPGP 标准的有限且<a href="#openpgp-secure">安全子
然后选择“QR 邀请码”。</p> 然后选择“QR 邀请码”。</p>
</li> </li>
<li> <li>
<p>对于<strong>直接 1:1 聊天邀请</strong> <p>For <strong>direct 1:1 chat invitations</strong>,
点击 Delta Chat 应用主屏幕上的二维码图标 <img style="vertical-align:middle; width:1.8em; margin:1px" src="../qr-icon.png" /></p> tap the QR Code icon <img style="vertical-align:middle; width:1.8em; margin:1px" src="../qr-icon.png" />
on the Delta Chat app main screen.</p>
</li> </li>
</ul> </ul>
<p>让你的聊天伙伴用他们的 Delta Chat 应用扫描二维码图像, <p>Ask your chat partner to scan the QR image
或点击“复制”或“分享”以创建邀请链接 with their Delta Chat app,
并与你的聊天伙伴分享。</p> or click “Copy” or “Share” to create an invite link
and share it with your chat partner.</p>
<p>现在等待 <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">安全加入网络消息在两个设备之间交换</a></p> <p>Now wait while <a href="https://securejoin.delta.chat/en/latest/new.html#setup-contact-protocol">end-to-end encryption is getting established</a>.</p>
<ul> <ul>
<li> <li>
<p>如果两个设备都处于在线状态, <p>If both sides are online, they will soon see a (group or direct) chat
双方最终都会看到一个(群组或直接)聊天,标题旁边带有绿色复选标记 and can start messaging securely.</p>
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" /></p>
</li> </li>
<li> <li>
<p>如果其中一个设备处于离线状态,则只有当设备再次连接互联网且安全加入网络协议完成时,绿色复选标记才会出现。</p> <p>If one side is offline or in bad network,
the ability to chat is delayed until connectivity is restored.</p>
</li> </li>
</ul> </ul>
<p>恭喜! <p>Congratulations!
从现在开始您将会自动使用安全的端到端加密与此联系人联系,并且双方都可以将对方添加到绿色复选标记的群组 You now will automatically use end-to-end encryption
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />,从而自动在其成员之间传播有保障的端到端加密。</p> with this contact.
If you add each other to chat groups,
end-to-end encryption will be established among all members.</p>
<h3 id="e2eeguarantee"> <h3 id="e2eeguarantee">
绿色复选标记和“保证的端到端加密”是什么意思? <a href="#e2eeguarantee" class="anchor"></a> What does the green checkmark in a contact profile mean? <a href="#e2eeguarantee" class="anchor"></a>
</h3> </h3>
<p>带有绿色复选标记的聊天标题 <p>A contact profile might show a green checkmark
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="绿色复选标记" /> <img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="green checkmark" />
表示聊天中的所有消息都将进行端到端加密, and an “Introduced by” line.
并且不会被受损的电子邮件服务器或互联网提供商读取或更改。 Every green-checkmarked contact either did a direct <a href="#howtoe2ee">QR-scan</a> with you
加入带有绿色复选标记的群组聊天 or was introduced by a another green-checkmarked contact.
可以安全地传播每个人的加密信息(和绿色复选标记), Introductions happen automatically when adding members to groups.
从而保证群组和成员之间的端到端加密。</p> Whoever adds a green-checkmarked contact to a group with only green-checkmarked members
becomes an introducer.
<p>带有绿色复选标记的联系人配置文件 In a contact profile you can tap on the “Introduced by …” text repeatedly
<img style="vertical-align:middle; width:1.5em; margin:1px" src="../green-checkmark.png" alt="绿色复选标记" /> until you get to the one with whom you directly did a <a href="#howtoe2ee">QR-scan</a>.</p>
表示当前保证与联系人的消息传递是端到端加密的。
每个带有绿色复选标记的联系人要么直接与你进行了 <a href="#howtoe2ee">二维码扫描</a>
要么由另一个带有绿色复选标记的联系人介绍。
当向群组添加成员时,介绍会自动发生。
任何将联系人添加到带有绿色复选标记的群组的人都成为
那些还不认识添加的联系人的成员的介绍人。
在联系人配置文件中,你可以反复点击“由…介绍”文本
,直到你到达直接与你进行 <a href="#howtoe2ee">二维码扫描</a> 的那个人。</p>
<p>请注意,在联系人配置文件中,你可能会看到并点击介绍人,<br />但在配置文件标题中没有绿色复选标记。<br />这通常意味着联系人“<a href="#nocryptanymore">从另一台设备发送了消息</a>”。</p>
<p>有关“保证的端到端加密”的更深入讨论, <p>有关“保证的端到端加密”的更深入讨论,
请参阅 <a href="https://securejoin.delta.chat/en/latest/new.html">安全加入协议</a> 请参阅 <a href="https://securejoin.delta.chat/en/latest/new.html">安全加入协议</a>
并专门阅读有关“已验证群组”的内容,这是 并专门阅读有关“已验证群组”的内容,这是
此处所谓的“带有绿色复选标记”或“保证的端到端加密”聊天的技术术语。</p> 此处所谓的“带有绿色复选标记”或“保证的端到端加密”聊天的技术术语。</p>
<h3 id="nocryptanymore">
联系人“从另一台设备发送了消息”,我该怎么办? <a href="#nocryptanymore" class="anchor"></a>
</h3>
<p>你与联系人的聊天失去了保证的端到端加密。
当你看到此警告时,此聊天的绿色复选标记和联系人已被删除。
<strong>如果你发现保证的端到端加密突然下降
对于此联系人来说很意外,请不要接受警告!</strong>
相反,请通过第二个渠道(
如视频通话、其他即时通讯应用或电话)与你的联系人核实
,以找出发生了什么。</p>
<p>如果你的联系人实际上导致了保证的端到端加密下降,
请参阅以下段落,了解常见原因及其缓解措施。
无论如何,所有其他带有绿色复选标记的聊天都保持保证的端到端加密,
即使该联系人是那里的成员。</p>
<p><strong>你的联系人在第二台设备(手机或笔记本电脑)上使用 Delta Chat</strong></p>
<p>如果他们有另一台运行 Delta Chat 应用的设备,
他们应该从新设备中删除配置文件,
<a href="#multiclient">按照此处所述将其添加为第二台设备</a>
在他们之后给你发消息后,警告将消失,
并且保证的加密将在你的联系人的两台设备之间建立。</p>
<p><strong>你的联系人使用他们的旧帐户登录名重新安装了 Delta Chat</strong></p>
<p>如果他们有<a href="#backup">备份文件</a>
他们应该从新设备中删除配置文件,
而是导入备份文件以重新创建他们的配置文件。
在他们之后给你发消息后,警告将消失,
并且保证的加密将为此联系人重新建立。</p>
<p>如果他们没有备份文件,最好与你的聊天伙伴执行 <a href="#howtoe2ee">二维码扫描</a>
以重新建立保证的端到端加密。</p>
<p><strong>你的联系人通过 Webmail 界面或其他电子邮件应用发送了邮件,
并且将很快恢复使用 Delta Chat。</strong></p>
<p>如果你确定联系人有时使用 Webmail
或其他缺少端到端加密的邮件应用,
那么你可以接受警告。
一旦你的联系人再次使用 Delta Chat
保证的端到端加密将自动重新建立。</p>
<p><strong>你的联系人完全停止使用 Delta Chat</strong></p>
<p>有时保持联系比端到端加密更重要。
<a href="#tls">“传输层加密” (TLS)</a> 可能仍然有意义地保护
你的设备和电子邮件服务器之间消息的机密性。
但是,如果没有端到端加密,你和你的联系人将信任你的电子邮件服务器
不会读取或操纵你的消息,也不会将其交给第三方。</p>
<p>在任何情况下,你都无法做太多其他事情,只能接受警告。
另请从任何活动的带有绿色复选标记的群组中删除该联系人,
你可以在联系人配置文件中的“共享聊天”中找到这些群组。
这可以避免你的联系人收到“无法读取”的消息。</p>
<p>如果联系人因为错误或不良行为而删除了 Delta Chat
请考虑发布到我们的 <a href="https://support.delta.chat">支持论坛</a>
以帮助我们识别和解决常见问题。 谢谢!</p>
<h3 id="附件图片文件音频等是否已端到端加密"> <h3 id="附件图片文件音频等是否已端到端加密">
@ -901,10 +843,9 @@ Autocrypt 使用 OpenPGP 标准的有限且<a href="#openpgp-secure">安全子
</h3> </h3>
<p>是的Delta Chat 使用 OpenPGP 的安全子集, <p>Yes, Delta Chat uses a secure subset of OpenPGP
并且仅在消息上显示挂锁安全指示器 requiring the whole message to be properly encrypted and signed.
,前提是整个消息都已正确加密和签名。 For example, “Detached signatures” are not treated as secure.</p>
例如,“分离签名”不被视为安全。</p>
<p>OpenPGP 加密标准本身不存在安全隐患。 <p>OpenPGP 加密标准本身不存在安全隐患。
目前公众讨论中涉及的 OpenPGP 安全问题, 目前公众讨论中涉及的 OpenPGP 安全问题,
@ -923,7 +864,7 @@ Delta Chat 实际使用的是 Rust 语言编写的 OpenPGP 实现库 <a href="ht
<h3 id="openpgp-alternatives"> <h3 id="openpgp-alternatives">
你们是否考虑过使用 OpenPGP 的替代方案进行端到端加密? <a href="#openpgp-alternatives" class="anchor"></a> Did you consider using alternatives to OpenPGP for end-to-end-encryption? <a href="#openpgp-alternatives" class="anchor"></a>
</h3> </h3>
@ -965,17 +906,15 @@ Delta Chat 实际使用的是 Rust 语言编写的 OpenPGP 实现库 <a href="ht
<h3 id="tls"> <h3 id="tls">
如果端到端加密不可用,消息是否会以明文形式暴露? <a href="#tls" class="anchor"></a> Are messages marked with the mail icon exposed on the Internet? <a href="#tls" class="anchor"></a>
</h3> </h3>
<p>即使你的消息未保证端到端加密, <p>If you are sending or receiving e-mail messages without end-to-end encryption (using a classic e-mail server),
它们仍然受到互联网提供商(如手机或有线电视公司)的保护。 they are still protected from cell or cable companies who can not read or modify your e-mail messages.
但是,你的和你的接收者的电子邮件提供商 But both your and your recipients e-mail providers
可能会读取、分析甚至修改你的消息, may read, analyze or modify your messages, including any attachments.</p>
包括任何附件,
如果它们未进行端到端加密。</p>
<p>Delta Chat 默认使用严格的 <p>Delta Chat 默认使用严格的
<a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS 加密</a> <a href="https://en.wikipedia.org/wiki/Transport_Layer_Security">TLS 加密</a>
@ -987,10 +926,6 @@ Delta Chat 的所有 TLS 处理都经过了独立的 <a href="#security-audits">
则将在电子邮件提供商之间强制执行传输加密, 则将在电子邮件提供商之间强制执行传输加密,
在这种情况下即使消息未进行端到端加密Delta Chat 通信也永远不会以明文形式暴露给互联网。</p> 在这种情况下即使消息未进行端到端加密Delta Chat 通信也永远不会以明文形式暴露给互联网。</p>
<p>请注意,<a href="#howtoe2ee">在 TLS 加密之上保持保证的端到端加密</a>
可在你的和接收者的设备之间提供普遍的安全性。
即使你的电子邮件或互联网提供商也无法读取或修改你的消息。</p>
<h3 id="message-metadata"> <h3 id="message-metadata">
@ -999,24 +934,25 @@ Delta Chat 的所有 TLS 处理都经过了独立的 <a href="#security-audits">
</h3> </h3>
<p>Delta Chat 通过将以下信息放入消息的端到端加密部分来保护大多数消息元数据:</p> <p>Unlike most other messengers,
Delta Chat apps do not store any metadata about contacts or groups on servers, also not in encrypted form.
Instead, all group metadata is end-to-end encrypted and stored on end-user devices, only.</p>
<p>E-mail Servers can therefore only see</p>
<ul> <ul>
<li>主题行</li> <li>
<li>群组头像和名称</li> <p>the message date,</p>
<li>MDN已读回执请求 (<code class="language-plaintext highlighter-rouge">Chat-Disposition-Notification-To</code>)</li> </li>
<li>阅后即焚消息计时器 (<code class="language-plaintext highlighter-rouge">Ephemeral-Timer</code>)</li> <li>
<li><code class="language-plaintext highlighter-rouge">Chat-Group-Member-Removed</code>, <code class="language-plaintext highlighter-rouge">Chat-Group-Member-Added</code></li> <p>sender and receiver addresses</p>
<li>包含安全加入命令的 <code class="language-plaintext highlighter-rouge">Secure-Join</code> 标头</li> </li>
<li>关于启用位置流式传输的通知</li> <li>
<li>WebRTC 房间 URL</li> <p>and message size.</p>
</li>
</ul> </ul>
<p>电子邮件服务器无法访问此受保护的元数据, <p>All other message, contact and group metadata resides in the end-to-end encrypted part of messages.</p>
但它们可以看到消息日期以及消息大小,
更重要的是,可以看到发件人和收件人地址。
电子邮件服务器需要收件人地址来路由和
将消息传递到接收者的设备。</p>
<h3 id="device-seizure"> <h3 id="device-seizure">
@ -1026,96 +962,36 @@ Delta Chat 的所有 TLS 处理都经过了独立的 <a href="#security-audits">
</h3> </h3>
<p>为了防止收集元数据的电子邮件服务器 <p>Both for protecting against metadata-collecting e-mail servers
以及设备查封的威胁, as well as against the threat of device seizure
我们建议使用 <a href="https://delta.chat/chatmail">Chatmail 服务器</a> we recommend to use a <a href="https://chatmail.at/relays">chatmail relay</a>
通过二维码扫描创建匿名临时配置文件。 to create chat profiles using random e-mail addresses for transport.
请注意,所有平台上的 Delta Chat 应用都支持多配置文件, Note that Delta Chat apps on all platforms support multiple profiles
因此你可以轻松地在你“主要”配置文件旁边使用特定于情况的配置文件, so you can easily use situation-specific profiles next to your “main” profile
并且知道它们的所有数据以及所有元数据都将被删除。 with the knowledge that all their data, along with all metadata, will be deleted.
此外,如果设备被查封,则与使用临时配置文件的联系人 Moreover, if a device is seized then chat contacts using short-lived profiles
相比,无法轻易识别,因为即时通讯应用会在聊天群组中显示 can not be identified easily.</p>
电话号码,而电话号码通常与合法身份相关联。</p>
<h3 id="如何检查加密信息"> <h3 id="sealedsender">
如何检查加密信息? <a href="#如何检查加密信息" class="anchor"></a> Does Delta Chat support “Sealed Sender”? <a href="#sealedsender" class="anchor"></a>
</h3> </h3>
<p>你可以在“加密”对话框中手动检查端到端加密状态 <p>No, not yet.</p>
Android/iOS 上的用户配置文件或桌面上的用户聊天列表项上右键单击)。
Delta Chat 在此处显示两个指纹。
如果相同的指纹出现在你自己的设备和你联系人的设备上,
则连接是安全的。</p>
<h3 id="如何检查消息的加密状态"> <p>The Signal messenger introduced <a href="https://signal.org/blog/sealed-sender/">“Sealed Sender” in 2018</a>
to keep their server infrastructure ignorant of who is sending a message to a set of recipients.
It is particularly important because the Signal server knows the mobile number of each account,
which is usually associated with a passport identity.</p>
<p>Even if <a href="https://chatmail.at/relays">chatmail relays</a>
如何检查消息的加密状态? <a href="#如何检查消息的加密状态" class="anchor"></a> do not ask for any private data (including no phone numbers),
it might still be worthwhile to protect relational metadata between addresses.
We dont foresee bigger problems in using random throw-away e-mail addresses for sealed sending
</h3> but an implementation has not been agreed as a priority yet.</p>
<p>消息气泡中的小<strong>挂锁</strong>表示
消息已从给定的发件人正确进行端到端加密。
如果<strong>没有挂锁</strong>,则消息未正确进行端到端加密,
最可能是因为发件人使用的应用或 Webmail 界面
不支持端到端加密。</p>
<h3 id="为什么我会看到未加密的消息">
为什么我会看到未加密的消息? <a href="#为什么我会看到未加密的消息" class="anchor"></a>
</h3>
<p>如果联系人使用非 Autocrypt 电子邮件应用,
则涉及此联系人(在群组或 1:1 聊天中)的所有消息
将不会进行端到端加密,因此消息中不会显示“挂锁”。
请注意,即使你的联系人在其帐户上使用 Delta Chat
他们也可能在该帐户上使用非 Autocrypt 电子邮件应用,
这可能会导致间歇性未加密的消息。
回复未加密的消息是 Autocrypt 强制执行的
,以防止你的联系人及其非 Autocrypt 电子邮件应用端出现无法读取的消息。</p>
<h3 id="如何与有时使用-webmail-或其他非-autocrypt-电子邮件应用的-delta-chat-联系人获得端到端加密的聊天">
如何与有时使用 Webmail 或其他非 Autocrypt 电子邮件应用的 Delta Chat 联系人获得端到端加密的聊天? <a href="#如何与有时使用-webmail-或其他非-autocrypt-电子邮件应用的-delta-chat-联系人获得端到端加密的聊天" class="anchor"></a>
</h3>
<p>如果你需要与
同时使用 Delta Chat 和非 Autocrypt 应用(例如 Webmail的电子邮件帐户的联系人进行安全端到端加密的聊天
最好与他们设置 <a href="#howtoe2ee">保证的端到端加密</a>
然后创建一个由你二人作为成员的保证的端到端加密的群组聊天。
在此群组聊天中,所有消息都将进行端到端加密,
即使你二人之间的直接聊天有
<a href="#nocryptanymore">“…从另一台设备发送了消息”</a> 警告</p>
<h3 id="如何确保消息端到端加密和删除">
如何确保消息端到端加密和删除? <a href="#如何确保消息端到端加密和删除" class="anchor"></a>
</h3>
<p>确保每条消息都进行端到端加密,
并尽快删除元数据的最佳方法是
<a href="#howtoe2ee">使用具有保证的端到端加密的聊天</a>
并开启 <a href="#ephemeralmsgs">阅后即焚消息</a></p>
<p>保证的端到端加密聊天可防止 <a href="https://en.wikipedia.org/wiki/Man-in-the-middle_attack">MITM 攻击</a>
而开启阅后即焚消息会在用户配置的时间后删除服务器上的消息。</p>
<p>如果你不需要在服务器上保留消息的长期副本,
你还可以开启 <a href="#delold">“自动从服务器删除消息”</a></p>
<h3 id="pfs"> <h3 id="pfs">
@ -1125,45 +1001,52 @@ Delta Chat 在此处显示两个指纹。
</h3> </h3>
<p>Delta Chat 不支持完美前向保密 (PFS)。 <p>No, not yet.</p>
这意味着,如果您的 Delta Chat 私人解密密钥泄露,
并且有人收集了您之前传输的消息,
他们将能够使用泄露的解密密钥解密并阅读这些消息。</p>
<p>但请注意,如果有人获得您的解密密钥, <p>Delta Chat today doesnt support Perfect Forward Secrecy (PFS).
他们通常也能够获得您的消息, This means that if your private decryption key is leaked,
无论是否实施了完全前向保密。 and someone has collected your prior in-transit messages,
泄露解密密钥的典型现实情况是设备扣押, they will be able to decrypt and read them using the leaked decryption key.
我们在<a href="#device-seizure">关于元数据和设备扣押</a>的回答中讨论了这一点。</p> Note that Forward Secrecy only increases security if you delete messages.
Otherwise, someone obtaining your decryption keys
is typically also able to get all your non-deleted messages
and doesnt even need to decrypt any previously collected messages.</p>
<p>Delta Chat 可能会发展为支持完美前向保密, <p>We designed a Forward Secrecy approach that withstood
因为 OpenPGP 只是加密消息的容器, initial examination from some cryptographers and implementation experts
但密钥管理(以及密钥轮换或密钥“棘轮”) but is pending a more formal write up
可以以灵活的方式组织。 to ascertain it reliably works in federated messaging and with multi-device usage,
请参阅 <a href="https://gitlab.com/sequoia-pgp/openpgp-dr">Seqouia 的 PFS 原型</a> before it could be implemented in <a href="https://github.com/chatmail/core">chatmail core</a>,
了解 OpenPGP 实现者社区中现有的实验。</p> which would make it available in all <a href="https://chatmail.at/clients">chatmail clients</a>.</p>
<h3 id="delta-chat-的端到端加密是否与-signal-一样安全"> <h3 id="pqc">
Delta Chat 的端到端加密是否与 Signal 一样安全? <a href="#delta-chat-的端到端加密是否与-signal-一样安全" class="anchor"></a> Does Delta Chat support Post-Quantum-Cryptography? <a href="#pqc" class="anchor"></a>
</h3> </h3>
<p>这取决于对你而言重要的是什么。 <p>No, not yet.</p>
Delta Chat <a href="#pfs">不支持像 Signal 那样的 PFS</a>
但它提供了 <a href="#e2eeguarantee">保证的端到端加密聊天</a>
可以安全地抵御受损的服务器或损坏的网络。
Signal 和大多数其他支持 PFS 的即时通讯应用
没有提供实用的方案来保护聊天群组免受网络攻击,
而网络攻击可以说比
潜在的攻击者查封你的手机和私有加密设置
但不知何故没有你的消息,却完整记录了所有
过去的加密消息更令人担忧。</p>
<p>在任何情况下Delta Chat 的端到端加密都使用 <a href="#openpgp-secure">OpenPGP 的安全子集</a> <p>Delta Chat uses the Rust OpenPGP library <a href="https://github.com/rpgp/rpgp">rPGP</a>
该子集已 <a href="https://delta.chat/assets/blog/2019-first-security-review.pdf">通过独立的安全审计</a></p> which supports the latest <a href="https://datatracker.ietf.org/doc/draft-ietf-openpgp-pqc/">IETF Post-Quantum-Cryptography OpenPGP draft</a>.
We aim to add PQC support in <a href="https://github.com/chatmail/core">chatmail core</a> after the draft is finalized at the IETF
in collaboration with other OpenPGP implementers.</p>
<h3 id="how-can-i-manually-check-encryption-information">
How can I manually check encryption information? <a href="#how-can-i-manually-check-encryption-information" class="anchor"></a>
</h3>
<p>你可以在“加密”对话框中手动检查端到端加密状态
Android/iOS 上的用户配置文件或桌面上的用户聊天列表项上右键单击)。
Delta Chat 在此处显示两个指纹。
如果相同的指纹出现在你自己的设备和你联系人的设备上,
则连接是安全的。</p>
<h3 id="importkey"> <h3 id="importkey">
@ -1426,12 +1309,16 @@ Chat 的 <a href="https://github.com/rpgp/rpgp">PGP</a> 和
</h3> </h3>
<ul> <ul>
<li>Webxdc 应用无法向互联网发送数据或下载任何内容。</li> <li>webxdc apps can not send data to the Internet, or download anything.</li>
<li>Webxdc 应用只能在 Delta Chat 聊天中与其聊天伙伴设备上的副本交换数据。 除此之外,它与互联网完全隔离。</li> <li>A webxdc app can only exchange data within a Delta Chat chat, with its
<li>Webxdc 应用提供的隐私性就是你的聊天的隐私性 - 只要你 copies on the devices of your chat partners. Other than that, its completely
信任与你聊天的人,你也可以信任 Webxdc 应用。</li> isolated from the Internet.</li>
<li>这也意味着:在你不信任成员的聊天中打开 WebXDC 应用可能存在隐私风险 - 正如你从电子邮件附件中了解到的那样,你 <li>The privacy a webxdc app offers is the privacy of your chat - as long as you
只打开来自你信任的发件人的附件,而不是来自垃圾邮件发送者的附件。</li> trust the people you chat with, you can trust the webxdc app as well.</li>
<li>This also means: it can be a privacy risk to open apps in chats with untrusted members.
Just like with e-mail attachments, video calls or plain links:
open them only from senders you trust, and not from spammers.
Spammers can get to know any data you send to them, as well as your IP address.</li>
</ul> </ul>
<h3 id="我在哪里可以获得-webxdc-应用"> <h3 id="我在哪里可以获得-webxdc-应用">
@ -1513,13 +1400,10 @@ Chat 的 <a href="https://github.com/rpgp/rpgp">PGP</a> 和
</h3> </h3>
<ul> <p>With a Broadcast List you can send a message to many recipients at once;
<li>使用广播列表,您可以一次性将一条消息发送给多个接收者;当他们回复您时,回复会出现在您与他们的直接 1 对 1 聊天中。 接收者之间无法相互看到。</li> the recipients cannot reply in that list.
<li>从技术上讲,它是密件抄送了许多收件人的电子邮件。</li> Broadcast lists are still highly experimental
<li>您可以在高级设置的“实验性功能”部分启用该功能。启用后,您便能在“新建聊天”对话框中新建广播列表了。</li> and will very probably be replaced by something else, stay tuned :)</p>
<li>在使用多台设备的情况下,目前广播列表不会在它们之间同步。</li>
<li>发送到广播列表的消息不会被加密。加密会使接收者们知道还有谁收到了消息,进而破坏了匿名性(出于发送速率限制和网络消耗的原因,向每个人发送单独的邮件会更糟)。</li>
</ul>
<h3 id="如何与聊天伙伴分享位置"> <h3 id="如何与聊天伙伴分享位置">
@ -1570,6 +1454,11 @@ Chat 的 <a href="https://github.com/rpgp/rpgp">PGP</a> 和
</h3> </h3>
<p>Note:
Changing email addresses is temporarily disabled
because of ongoing changes to the DeltaChat core.
It should be available again in a few months.</p>
<ol> <ol>
<li> <li>
<p>在“设置 → 高级 → 密码和帐户”中更改你的地址, <p>在“设置 → 高级 → 密码和帐户”中更改你的地址,
@ -1651,19 +1540,19 @@ Chat 的 <a href="https://github.com/rpgp/rpgp">PGP</a> 和
不过,某些提供商需要一些特殊设置才能正常工作,请参阅<a href="https://providers.delta.chat">提供商概览</a></li> 不过,某些提供商需要一些特殊设置才能正常工作,请参阅<a href="https://providers.delta.chat">提供商概览</a></li>
</ul> </ul>
<h3 id="我想管理自己的-delta-chat-电子邮件服务器-你有什么建议"> <h3 id="i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend">
我想管理自己的 Delta Chat 电子邮件服务器。 你有什么建议? <a href="#我想管理自己的-delta-chat-电子邮件服务器-你有什么建议" class="anchor"></a> I want to manage my own server for Delta Chat. What do you recommend? <a href="#i-want-to-manage-my-own-server-for-delta-chat-what-do-you-recommend" class="anchor"></a>
</h3> </h3>
<ul> <ul>
<li>大多数邮件服务器都能很好地工作。 但我们个人推荐的是 <li>Most mail servers will work well. But what we personally recommend is a
mailcow 和 mailadm 的组合,如 <a href="https://delta.chat/en/2023-01-27-upcoming-mail-server-workshops"> chatmail relay server, as described <a href="https://delta.chat/en/2023-12-13-chatmail">in this
博客文章</a> 中所述。</li> blogpost</a>.</li>
<li>你可以在我们的 <a href="https://delta.chat/zh_CN/serverguide">网站上找到安装指南</a></li> <li>You can find an <a href="https://github.com/chatmail/relay">installation guide on GitHub</a>.</li>
</ul> </ul>
<h3 id="为什么我必须在-delta-chat-中输入我的电子邮件密码-这样安全吗"> <h3 id="为什么我必须在-delta-chat-中输入我的电子邮件密码-这样安全吗">

View file

@ -6,7 +6,8 @@ public class DcChat {
public static final int DC_CHAT_TYPE_SINGLE = 100; public static final int DC_CHAT_TYPE_SINGLE = 100;
public static final int DC_CHAT_TYPE_GROUP = 120; public static final int DC_CHAT_TYPE_GROUP = 120;
public static final int DC_CHAT_TYPE_MAILINGLIST = 140; public static final int DC_CHAT_TYPE_MAILINGLIST = 140;
public static final int DC_CHAT_TYPE_BROADCAST = 160; public static final int DC_CHAT_TYPE_OUT_BROADCAST = 160;
public static final int DC_CHAT_TYPE_IN_BROADCAST = 165;
public static final int DC_CHAT_NO_CHAT = 0; public static final int DC_CHAT_NO_CHAT = 0;
public final static int DC_CHAT_ID_ARCHIVED_LINK = 6; public final static int DC_CHAT_ID_ARCHIVED_LINK = 6;
@ -38,12 +39,12 @@ public class DcChat {
public native String getMailinglistAddr(); public native String getMailinglistAddr();
public native String getProfileImage (); public native String getProfileImage ();
public native int getColor (); public native int getColor ();
public native boolean isEncrypted ();
public native boolean isUnpromoted (); public native boolean isUnpromoted ();
public native boolean isSelfTalk (); public native boolean isSelfTalk ();
public native boolean isDeviceTalk (); public native boolean isDeviceTalk ();
public native boolean canSend (); public native boolean canSend ();
public native boolean isProtected (); public native boolean isProtected ();
public native boolean isProtectionBroken();
public native boolean isSendingLocations(); public native boolean isSendingLocations();
public native boolean isMuted (); public native boolean isMuted ();
public native boolean isContactRequest (); public native boolean isContactRequest ();
@ -53,19 +54,18 @@ public class DcChat {
public boolean isMultiUser() { public boolean isMultiUser() {
int type = getType(); int type = getType();
return type == DC_CHAT_TYPE_GROUP || type == DC_CHAT_TYPE_MAILINGLIST || type == DC_CHAT_TYPE_BROADCAST; return type != DC_CHAT_TYPE_SINGLE;
} }
public boolean isMailingList() { public boolean isMailingList() {
return getType() == DC_CHAT_TYPE_MAILINGLIST; return getType() == DC_CHAT_TYPE_MAILINGLIST;
} }
public boolean isBroadcast() { public boolean isInBroadcast() {
return getType() == DC_CHAT_TYPE_BROADCAST; return getType() == DC_CHAT_TYPE_IN_BROADCAST;
} }
public boolean isOutBroadcast() {
public boolean isHalfBlocked() { return getType() == DC_CHAT_TYPE_OUT_BROADCAST;
return isProtectionBroken() || isContactRequest();
} }
// working with raw c-data // working with raw c-data

View file

@ -10,8 +10,9 @@ public class DcContact {
public final static int DC_CONTACT_ID_NEW_GROUP = -2; // - " - public final static int DC_CONTACT_ID_NEW_GROUP = -2; // - " -
public final static int DC_CONTACT_ID_ADD_MEMBER = -3; // - " - public final static int DC_CONTACT_ID_ADD_MEMBER = -3; // - " -
public final static int DC_CONTACT_ID_QR_INVITE = -4; // - " - public final static int DC_CONTACT_ID_QR_INVITE = -4; // - " -
public final static int DC_CONTACT_ID_NEW_BROADCAST_LIST = -5; // - " - public final static int DC_CONTACT_ID_NEW_BROADCAST = -5; // - " -
public final static int DC_CONTACT_ID_ADD_ACCOUNT = -6; // - " - public final static int DC_CONTACT_ID_ADD_ACCOUNT = -6; // - " -
public final static int DC_CONTACT_ID_NEW_UNENCRYPTED_GROUP = -7; // - " -
public DcContact(long contactCPtr) { public DcContact(long contactCPtr) {
this.contactCPtr = contactCPtr; this.contactCPtr = contactCPtr;
@ -57,6 +58,7 @@ public class DcContact {
public native boolean wasSeenRecently(); public native boolean wasSeenRecently();
public native boolean isBlocked (); public native boolean isBlocked ();
public native boolean isVerified (); public native boolean isVerified ();
public native boolean isKeyContact ();
public native int getVerifierId (); public native int getVerifierId ();
public native boolean isBot (); public native boolean isBot ();

View file

@ -43,6 +43,7 @@ public class DcContext {
public final static int DC_GCL_VERIFIED_ONLY = 1; public final static int DC_GCL_VERIFIED_ONLY = 1;
public final static int DC_GCL_ADD_SELF = 2; public final static int DC_GCL_ADD_SELF = 2;
public final static int DC_GCL_ADDRESS = 0x04;
public final static int DC_GCL_ARCHIVED_ONLY = 0x01; public final static int DC_GCL_ARCHIVED_ONLY = 0x01;
public final static int DC_GCL_NO_SPECIALS = 0x02; public final static int DC_GCL_NO_SPECIALS = 0x02;
public final static int DC_GCL_ADD_ALLDONE_HINT = 0x04; public final static int DC_GCL_ADD_ALLDONE_HINT = 0x04;

View file

@ -33,11 +33,11 @@ public class DcMsg {
public final static int DC_INFO_LOCATION_ONLY = 9; public final static int DC_INFO_LOCATION_ONLY = 9;
public final static int DC_INFO_EPHEMERAL_TIMER_CHANGED = 10; public final static int DC_INFO_EPHEMERAL_TIMER_CHANGED = 10;
public final static int DC_INFO_PROTECTION_ENABLED = 11; public final static int DC_INFO_PROTECTION_ENABLED = 11;
public final static int DC_INFO_PROTECTION_DISABLED = 12;
public final static int DC_INFO_INVALID_UNENCRYPTED_MAIL = 13; public final static int DC_INFO_INVALID_UNENCRYPTED_MAIL = 13;
public final static int DC_INFO_WEBXDC_INFO_MESSAGE = 32; public final static int DC_INFO_WEBXDC_INFO_MESSAGE = 32;
public final static int DC_INFO_OUTGOING_CALL = 50; public final static int DC_INFO_CHAT_E2EE = 50;
public final static int DC_INFO_INCOMING_CALL = 55; public final static int DC_INFO_OUTGOING_CALL = 60;
public final static int DC_INFO_INCOMING_CALL = 65;
public final static int DC_STATE_UNDEFINED = 0; public final static int DC_STATE_UNDEFINED = 0;
public final static int DC_STATE_IN_FRESH = 10; public final static int DC_STATE_IN_FRESH = 10;

View file

@ -160,6 +160,18 @@ public class Rpc {
getResult("add_or_update_transport", accountId, param); getResult("add_or_update_transport", accountId, param);
} }
public int createBroadcast(int accountId, String chatName) throws RpcException {
return gson.fromJson(getResult("create_broadcast", accountId, chatName), Integer.class);
}
public int createGroupChatUnencrypted(int accountId, String chatName) throws RpcException {
return gson.fromJson(getResult("create_group_chat_unencrypted", accountId, chatName), Integer.class);
}
public void setAccountsOrder(List<Integer> order) throws RpcException {
getResult("set_accounts_order", order);
}
private static class Request { private static class Request {
private final String jsonrpc = "2.0"; private final String jsonrpc = "2.0";
public final String method; public final String method;
@ -173,6 +185,10 @@ public class Rpc {
} }
} }
public String getMigrationError(int accountId) throws RpcException {
return gson.fromJson(getResult("get_migration_error", accountId), String.class);
}
private static class Response { private static class Response {
public final int id; public final int id;
public final JsonElement result; public final JsonElement result;

View file

@ -0,0 +1,196 @@
package org.thoughtcrime.securesms;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.view.ActionMode;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.b44t.messenger.DcChat;
import com.b44t.messenger.DcContext;
import com.b44t.messenger.DcEvent;
import com.b44t.messenger.DcMsg;
import com.google.android.material.tabs.TabLayout;
import org.thoughtcrime.securesms.connect.DcEventCenter;
import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil;
import java.util.ArrayList;
public class AllMediaActivity extends PassphraseRequiredActionBarActivity
implements DcEventCenter.DcEventDelegate
{
public static final String CHAT_ID_EXTRA = "chat_id";
public static final String CONTACT_ID_EXTRA = "contact_id";
public static final String FORCE_GALLERY = "force_gallery";
static class TabData {
final int title;
final int type1;
final int type2;
final int type3;
TabData(int title, int type1, int type2, int type3) {
this.title = title;
this.type1 = type1;
this.type2 = type2;
this.type3 = type3;
}
};
private DcContext dcContext;
private int chatId;
private int contactId;
private final ArrayList<TabData> tabs = new ArrayList<>();
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
@Override
protected void onPreCreate() {
dynamicTheme = new DynamicNoActionBarTheme();
super.onPreCreate();
dcContext = DcHelper.getContext(this);
}
@Override
protected void onCreate(Bundle bundle, boolean ready) {
tabs.add(new TabData(R.string.webxdc_apps, DcMsg.DC_MSG_WEBXDC, 0, 0));
tabs.add(new TabData(R.string.tab_gallery, DcMsg.DC_MSG_IMAGE, DcMsg.DC_MSG_GIF, DcMsg.DC_MSG_VIDEO));
tabs.add(new TabData(R.string.files, DcMsg.DC_MSG_FILE, 0, 0));
tabs.add(new TabData(R.string.audio, DcMsg.DC_MSG_AUDIO, DcMsg.DC_MSG_VOICE, 0));
setContentView(R.layout.all_media_activity);
initializeResources();
setSupportActionBar(this.toolbar);
ActionBar supportActionBar = getSupportActionBar();
if (supportActionBar != null) {
supportActionBar.setDisplayHomeAsUpEnabled(true);
supportActionBar.setTitle(isGlobalGallery() ? R.string.menu_all_media : R.string.apps_and_media);
}
this.tabLayout.setupWithViewPager(viewPager);
this.viewPager.setAdapter(new AllMediaPagerAdapter(getSupportFragmentManager()));
if (getIntent().getBooleanExtra(FORCE_GALLERY, false)) {
this.viewPager.setCurrentItem(1, false);
}
DcEventCenter eventCenter = DcHelper.getEventCenter(this);
eventCenter.addObserver(DcContext.DC_EVENT_CHAT_MODIFIED, this);
eventCenter.addObserver(DcContext.DC_EVENT_CONTACTS_CHANGED, this);
}
@Override
public void onDestroy() {
DcHelper.getEventCenter(this).removeObservers(this);
super.onDestroy();
}
@Override
public void handleEvent(@NonNull DcEvent event) {
}
private void initializeResources() {
chatId = getIntent().getIntExtra(CHAT_ID_EXTRA, 0);
contactId = getIntent().getIntExtra(CONTACT_ID_EXTRA, 0);
if (contactId!=0) {
chatId = dcContext.getChatIdByContactId(contactId);
}
if(chatId!=0) {
DcChat dcChat = dcContext.getChat(chatId);
if(!dcChat.isMultiUser()) {
final int[] members = dcContext.getChatContacts(chatId);
contactId = members.length>=1? members[0] : 0;
}
}
this.viewPager = ViewUtil.findById(this, R.id.pager);
this.toolbar = ViewUtil.findById(this, R.id.toolbar);
this.tabLayout = ViewUtil.findById(this, R.id.tab_layout);
}
private boolean isGlobalGallery() {
return contactId==0 && chatId==0;
}
private class AllMediaPagerAdapter extends FragmentStatePagerAdapter {
private Object currentFragment = null;
AllMediaPagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public void setPrimaryItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
super.setPrimaryItem(container, position, object);
if (currentFragment != null && currentFragment != object) {
ActionMode action = null;
if (currentFragment instanceof MessageSelectorFragment) {
action = ((MessageSelectorFragment) currentFragment).getActionMode();
}
if (action != null) {
action.finish();
}
}
currentFragment = object;
}
@NonNull
@Override
public Fragment getItem(int position) {
TabData data = tabs.get(position);
Fragment fragment;
Bundle args = new Bundle();
if (data.type1 == DcMsg.DC_MSG_IMAGE) {
fragment = new AllMediaGalleryFragment();
args.putInt(AllMediaGalleryFragment.CHAT_ID_EXTRA, (chatId==0&&!isGlobalGallery())? -1 : chatId);
} else {
fragment = new AllMediaDocumentsFragment();
args.putInt(AllMediaDocumentsFragment.CHAT_ID_EXTRA, (chatId==0&&!isGlobalGallery())? -1 : chatId);
args.putInt(AllMediaDocumentsFragment.VIEWTYPE1, data.type1);
args.putInt(AllMediaDocumentsFragment.VIEWTYPE2, data.type2);
}
fragment.setArguments(args);
return fragment;
}
@Override
public int getCount() {
return tabs.size();
}
@Override
public CharSequence getPageTitle(int position) {
return getString(tabs.get(position).title);
}
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
super.onOptionsItemSelected(item);
int itemId = item.getItemId();
if (itemId == android.R.id.home) {
finish();
return true;
}
return false;
}
}

View file

@ -25,7 +25,7 @@ import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
class ProfileDocumentsAdapter extends StickyHeaderGridAdapter { class AllMediaDocumentsAdapter extends StickyHeaderGridAdapter {
private final Context context; private final Context context;
private final ItemClickListener itemClickListener; private final ItemClickListener itemClickListener;
@ -57,9 +57,9 @@ class ProfileDocumentsAdapter extends StickyHeaderGridAdapter {
} }
} }
ProfileDocumentsAdapter(@NonNull Context context, AllMediaDocumentsAdapter(@NonNull Context context,
BucketedThreadMedia media, BucketedThreadMedia media,
ItemClickListener clickListener) ItemClickListener clickListener)
{ {
this.context = context; this.context = context;
this.media = media; this.media = media;

View file

@ -11,7 +11,6 @@ import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.Window;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -33,21 +32,21 @@ import org.thoughtcrime.securesms.util.ViewUtil;
import java.util.Set; import java.util.Set;
public class ProfileDocumentsFragment public class AllMediaDocumentsFragment
extends MessageSelectorFragment extends MessageSelectorFragment
implements LoaderManager.LoaderCallbacks<BucketedThreadMediaLoader.BucketedThreadMedia>, implements LoaderManager.LoaderCallbacks<BucketedThreadMediaLoader.BucketedThreadMedia>,
ProfileDocumentsAdapter.ItemClickListener AllMediaDocumentsAdapter.ItemClickListener
{ {
public static final String CHAT_ID_EXTRA = "chat_id"; public static final String CHAT_ID_EXTRA = "chat_id";
public static final String SHOW_AUDIO_EXTRA = "show_audio"; public static final String VIEWTYPE1 = "viewtype1";
public static final String SHOW_WEBXDC_EXTRA = "show_webxdc"; public static final String VIEWTYPE2 = "viewtype2";
protected TextView noMedia; protected TextView noMedia;
protected RecyclerView recyclerView; protected RecyclerView recyclerView;
private StickyHeaderGridLayoutManager gridManager; private StickyHeaderGridLayoutManager gridManager;
private final ActionModeCallback actionModeCallback = new ActionModeCallback(); private final ActionModeCallback actionModeCallback = new ActionModeCallback();
private boolean showAudio; private int viewtype1;
private boolean showWebxdc; private int viewtype2;
protected int chatId; protected int chatId;
@ -57,8 +56,8 @@ public class ProfileDocumentsFragment
dcContext = DcHelper.getContext(getContext()); dcContext = DcHelper.getContext(getContext());
chatId = getArguments().getInt(CHAT_ID_EXTRA, -1); chatId = getArguments().getInt(CHAT_ID_EXTRA, -1);
showAudio = getArguments().getBoolean(SHOW_AUDIO_EXTRA, false); viewtype1 = getArguments().getInt(VIEWTYPE1, 0);
showWebxdc = getArguments().getBoolean(SHOW_WEBXDC_EXTRA, false); viewtype2 = getArguments().getInt(VIEWTYPE2, 0);
getLoaderManager().initLoader(0, null, this); getLoaderManager().initLoader(0, null, this);
} }
@ -71,7 +70,7 @@ public class ProfileDocumentsFragment
this.noMedia = ViewUtil.findById(view, R.id.no_documents); this.noMedia = ViewUtil.findById(view, R.id.no_documents);
this.gridManager = new StickyHeaderGridLayoutManager(1); this.gridManager = new StickyHeaderGridLayoutManager(1);
this.recyclerView.setAdapter(new ProfileDocumentsAdapter(getContext(), this.recyclerView.setAdapter(new AllMediaDocumentsAdapter(getContext(),
new BucketedThreadMediaLoader.BucketedThreadMedia(getContext()), new BucketedThreadMediaLoader.BucketedThreadMedia(getContext()),
this)); this));
this.recyclerView.setLayoutManager(gridManager); this.recyclerView.setLayoutManager(gridManager);
@ -105,32 +104,26 @@ public class ProfileDocumentsFragment
@Override @Override
public Loader<BucketedThreadMediaLoader.BucketedThreadMedia> onCreateLoader(int i, Bundle bundle) { public Loader<BucketedThreadMediaLoader.BucketedThreadMedia> onCreateLoader(int i, Bundle bundle) {
if (showAudio) { return new BucketedThreadMediaLoader(getContext(), chatId, viewtype1, viewtype2, 0);
return new BucketedThreadMediaLoader(getContext(), chatId, DcMsg.DC_MSG_AUDIO, DcMsg.DC_MSG_VOICE, 0);
} else if (showWebxdc) {
return new BucketedThreadMediaLoader(getContext(), chatId, DcMsg.DC_MSG_WEBXDC, 0, 0);
} else {
return new BucketedThreadMediaLoader(getContext(), chatId, DcMsg.DC_MSG_FILE, 0, 0);
}
} }
@Override @Override
public void onLoadFinished(Loader<BucketedThreadMediaLoader.BucketedThreadMedia> loader, BucketedThreadMediaLoader.BucketedThreadMedia bucketedThreadMedia) { public void onLoadFinished(Loader<BucketedThreadMediaLoader.BucketedThreadMedia> loader, BucketedThreadMediaLoader.BucketedThreadMedia bucketedThreadMedia) {
((ProfileDocumentsAdapter) recyclerView.getAdapter()).setMedia(bucketedThreadMedia); ((AllMediaDocumentsAdapter) recyclerView.getAdapter()).setMedia(bucketedThreadMedia);
((ProfileDocumentsAdapter) recyclerView.getAdapter()).notifyAllSectionsDataSetChanged(); ((AllMediaDocumentsAdapter) recyclerView.getAdapter()).notifyAllSectionsDataSetChanged();
noMedia.setVisibility(recyclerView.getAdapter().getItemCount() > 0 ? View.GONE : View.VISIBLE); noMedia.setVisibility(recyclerView.getAdapter().getItemCount() > 0 ? View.GONE : View.VISIBLE);
if (chatId == DC_CHAT_NO_CHAT) { if (chatId == DC_CHAT_NO_CHAT) {
if (showWebxdc) { if (viewtype1 == DcMsg.DC_MSG_WEBXDC) {
noMedia.setText(R.string.all_apps_empty_hint); noMedia.setText(R.string.all_apps_empty_hint);
} else if (!showAudio){ } else if (viewtype1 == DcMsg.DC_MSG_FILE){
noMedia.setText(R.string.all_files_empty_hint); noMedia.setText(R.string.all_files_empty_hint);
} else { } else {
noMedia.setText(R.string.tab_all_media_empty_hint); noMedia.setText(R.string.tab_all_media_empty_hint);
} }
} else if (showAudio) { } else if (viewtype1 == DcMsg.DC_MSG_AUDIO) {
noMedia.setText(R.string.tab_audio_empty_hint); noMedia.setText(R.string.tab_audio_empty_hint);
} else if (showWebxdc) { } else if (viewtype1 == DcMsg.DC_MSG_WEBXDC) {
noMedia.setText(R.string.tab_webxdc_empty_hint); noMedia.setText(R.string.tab_webxdc_empty_hint);
} }
getActivity().invalidateOptionsMenu(); getActivity().invalidateOptionsMenu();
@ -138,7 +131,7 @@ public class ProfileDocumentsFragment
@Override @Override
public void onLoaderReset(Loader<BucketedThreadMediaLoader.BucketedThreadMedia> cursorLoader) { public void onLoaderReset(Loader<BucketedThreadMediaLoader.BucketedThreadMedia> cursorLoader) {
((ProfileDocumentsAdapter) recyclerView.getAdapter()).setMedia(new BucketedThreadMediaLoader.BucketedThreadMedia(getContext())); ((AllMediaDocumentsAdapter) recyclerView.getAdapter()).setMedia(new BucketedThreadMediaLoader.BucketedThreadMedia(getContext()));
} }
@Override @Override
@ -156,7 +149,7 @@ public class ProfileDocumentsFragment
} }
private void handleMediaMultiSelectClick(@NonNull DcMsg mediaRecord) { private void handleMediaMultiSelectClick(@NonNull DcMsg mediaRecord) {
ProfileDocumentsAdapter adapter = getListAdapter(); AllMediaDocumentsAdapter adapter = getListAdapter();
adapter.toggleSelection(mediaRecord); adapter.toggleSelection(mediaRecord);
if (adapter.getSelectedMediaCount() == 0) { if (adapter.getSelectedMediaCount() == 0) {
@ -188,7 +181,7 @@ public class ProfileDocumentsFragment
@Override @Override
public void onMediaLongClicked(DcMsg mediaRecord) { public void onMediaLongClicked(DcMsg mediaRecord) {
if (actionMode == null) { if (actionMode == null) {
((ProfileDocumentsAdapter) recyclerView.getAdapter()).toggleSelection(mediaRecord); ((AllMediaDocumentsAdapter) recyclerView.getAdapter()).toggleSelection(mediaRecord);
actionMode = ((AppCompatActivity) getActivity()).startSupportActionMode(actionModeCallback); actionMode = ((AppCompatActivity) getActivity()).startSupportActionMode(actionModeCallback);
} }
@ -221,22 +214,17 @@ public class ProfileDocumentsFragment
menu.findItem(R.id.menu_add_to_home_screen).setVisible(webxdcApp); menu.findItem(R.id.menu_add_to_home_screen).setVisible(webxdcApp);
} }
private ProfileDocumentsAdapter getListAdapter() { private AllMediaDocumentsAdapter getListAdapter() {
return (ProfileDocumentsAdapter) recyclerView.getAdapter(); return (AllMediaDocumentsAdapter) recyclerView.getAdapter();
} }
private class ActionModeCallback implements ActionMode.Callback { private class ActionModeCallback implements ActionMode.Callback {
private int originalStatusBarColor;
@Override @Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) { public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.profile_context, menu); mode.getMenuInflater().inflate(R.menu.profile_context, menu);
mode.setTitle("1"); mode.setTitle("1");
Window window = getActivity().getWindow();
originalStatusBarColor = window.getStatusBarColor();
window.setStatusBarColor(getResources().getColor(R.color.action_mode_status_bar));
setCorrectMenuVisibility(menu); setCorrectMenuVisibility(menu);
return true; return true;
} }
@ -285,8 +273,6 @@ public class ProfileDocumentsFragment
public void onDestroyActionMode(ActionMode mode) { public void onDestroyActionMode(ActionMode mode) {
actionMode = null; actionMode = null;
getListAdapter().clearSelection(); getListAdapter().clearSelection();
getActivity().getWindow().setStatusBarColor(originalStatusBarColor);
} }
} }
} }

View file

@ -21,7 +21,7 @@ import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
class ProfileGalleryAdapter extends StickyHeaderGridAdapter { class AllMediaGalleryAdapter extends StickyHeaderGridAdapter {
private final Context context; private final Context context;
private final GlideRequests glideRequests; private final GlideRequests glideRequests;
@ -50,10 +50,10 @@ class ProfileGalleryAdapter extends StickyHeaderGridAdapter {
} }
} }
ProfileGalleryAdapter(@NonNull Context context, AllMediaGalleryAdapter(@NonNull Context context,
@NonNull GlideRequests glideRequests, @NonNull GlideRequests glideRequests,
BucketedThreadMedia media, BucketedThreadMedia media,
ItemClickListener clickListener) ItemClickListener clickListener)
{ {
this.context = context; this.context = context;
this.glideRequests = glideRequests; this.glideRequests = glideRequests;

View file

@ -11,7 +11,6 @@ import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.Window;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -35,10 +34,10 @@ import org.thoughtcrime.securesms.util.ViewUtil;
import java.util.Set; import java.util.Set;
public class ProfileGalleryFragment public class AllMediaGalleryFragment
extends MessageSelectorFragment extends MessageSelectorFragment
implements LoaderManager.LoaderCallbacks<BucketedThreadMediaLoader.BucketedThreadMedia>, implements LoaderManager.LoaderCallbacks<BucketedThreadMediaLoader.BucketedThreadMedia>,
ProfileGalleryAdapter.ItemClickListener AllMediaGalleryAdapter.ItemClickListener
{ {
public static final String CHAT_ID_EXTRA = "chat_id"; public static final String CHAT_ID_EXTRA = "chat_id";
@ -67,7 +66,7 @@ public class ProfileGalleryFragment
this.noMedia = ViewUtil.findById(view, R.id.no_images); this.noMedia = ViewUtil.findById(view, R.id.no_images);
this.gridManager = new StickyHeaderGridLayoutManager(getCols()); this.gridManager = new StickyHeaderGridLayoutManager(getCols());
this.recyclerView.setAdapter(new ProfileGalleryAdapter(getContext(), this.recyclerView.setAdapter(new AllMediaGalleryAdapter(getContext(),
GlideApp.with(this), GlideApp.with(this),
new BucketedThreadMediaLoader.BucketedThreadMedia(getContext()), new BucketedThreadMediaLoader.BucketedThreadMedia(getContext()),
this)); this));
@ -112,8 +111,8 @@ public class ProfileGalleryFragment
@Override @Override
public void onLoadFinished(Loader<BucketedThreadMediaLoader.BucketedThreadMedia> loader, BucketedThreadMediaLoader.BucketedThreadMedia bucketedThreadMedia) { public void onLoadFinished(Loader<BucketedThreadMediaLoader.BucketedThreadMedia> loader, BucketedThreadMediaLoader.BucketedThreadMedia bucketedThreadMedia) {
((ProfileGalleryAdapter) recyclerView.getAdapter()).setMedia(bucketedThreadMedia); ((AllMediaGalleryAdapter) recyclerView.getAdapter()).setMedia(bucketedThreadMedia);
((ProfileGalleryAdapter) recyclerView.getAdapter()).notifyAllSectionsDataSetChanged(); ((AllMediaGalleryAdapter) recyclerView.getAdapter()).notifyAllSectionsDataSetChanged();
noMedia.setVisibility(recyclerView.getAdapter().getItemCount() > 0 ? View.GONE : View.VISIBLE); noMedia.setVisibility(recyclerView.getAdapter().getItemCount() > 0 ? View.GONE : View.VISIBLE);
if (chatId == DC_CHAT_NO_CHAT) { if (chatId == DC_CHAT_NO_CHAT) {
@ -124,7 +123,7 @@ public class ProfileGalleryFragment
@Override @Override
public void onLoaderReset(Loader<BucketedThreadMediaLoader.BucketedThreadMedia> cursorLoader) { public void onLoaderReset(Loader<BucketedThreadMediaLoader.BucketedThreadMedia> cursorLoader) {
((ProfileGalleryAdapter) recyclerView.getAdapter()).setMedia(new BucketedThreadMediaLoader.BucketedThreadMedia(getContext())); ((AllMediaGalleryAdapter) recyclerView.getAdapter()).setMedia(new BucketedThreadMediaLoader.BucketedThreadMedia(getContext()));
} }
@Override @Override
@ -142,7 +141,7 @@ public class ProfileGalleryFragment
} }
private void handleMediaMultiSelectClick(@NonNull DcMsg mediaRecord) { private void handleMediaMultiSelectClick(@NonNull DcMsg mediaRecord) {
ProfileGalleryAdapter adapter = getListAdapter(); AllMediaGalleryAdapter adapter = getListAdapter();
adapter.toggleSelection(mediaRecord); adapter.toggleSelection(mediaRecord);
if (adapter.getSelectedMediaCount() == 0) { if (adapter.getSelectedMediaCount() == 0) {
@ -175,7 +174,7 @@ public class ProfileGalleryFragment
@Override @Override
public void onMediaLongClicked(DcMsg mediaRecord) { public void onMediaLongClicked(DcMsg mediaRecord) {
if (actionMode == null) { if (actionMode == null) {
((ProfileGalleryAdapter) recyclerView.getAdapter()).toggleSelection(mediaRecord); ((AllMediaGalleryAdapter) recyclerView.getAdapter()).toggleSelection(mediaRecord);
recyclerView.getAdapter().notifyDataSetChanged(); recyclerView.getAdapter().notifyDataSetChanged();
actionMode = ((AppCompatActivity) getActivity()).startSupportActionMode(actionModeCallback); actionMode = ((AppCompatActivity) getActivity()).startSupportActionMode(actionModeCallback);
@ -206,22 +205,17 @@ public class ProfileGalleryFragment
menu.findItem(R.id.menu_resend).setVisible(canResend); menu.findItem(R.id.menu_resend).setVisible(canResend);
} }
private ProfileGalleryAdapter getListAdapter() { private AllMediaGalleryAdapter getListAdapter() {
return (ProfileGalleryAdapter) recyclerView.getAdapter(); return (AllMediaGalleryAdapter) recyclerView.getAdapter();
} }
private class ActionModeCallback implements ActionMode.Callback { private class ActionModeCallback implements ActionMode.Callback {
private int originalStatusBarColor;
@Override @Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) { public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.profile_context, menu); mode.getMenuInflater().inflate(R.menu.profile_context, menu);
mode.setTitle("1"); mode.setTitle("1");
Window window = getActivity().getWindow();
originalStatusBarColor = window.getStatusBarColor();
window.setStatusBarColor(getResources().getColor(R.color.action_mode_status_bar));
setCorrectMenuVisibility(menu); setCorrectMenuVisibility(menu);
return true; return true;
} }
@ -266,8 +260,6 @@ public class ProfileGalleryFragment
public void onDestroyActionMode(ActionMode mode) { public void onDestroyActionMode(ActionMode mode) {
actionMode = null; actionMode = null;
getListAdapter().clearSelection(); getListAdapter().clearSelection();
getActivity().getWindow().setStatusBarColor(originalStatusBarColor);
} }
} }
} }

View file

@ -197,30 +197,30 @@ public class ApplicationContext extends MultiDexApplication {
} }
}, filter); }, filter);
// MAYBE TODO: i think the ApplicationContext is also created
// when the app is stated by FetchWorker timeouts.
// in this case, the normal threads shall not be started.
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
PeriodicWorkRequest fetchWorkRequest = new PeriodicWorkRequest.Builder(
FetchWorker.class,
PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS, // usually 15 minutes
TimeUnit.MILLISECONDS,
PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS, // the start may be preferred by up to 5 minutes, so we run every 10-15 minutes
TimeUnit.MILLISECONDS)
.setConstraints(constraints)
.build();
WorkManager.getInstance(this).enqueueUniquePeriodicWork(
"FetchWorker",
ExistingPeriodicWorkPolicy.KEEP,
fetchWorkRequest);
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
if (Prefs.isPushEnabled(this)) { if (Prefs.isPushEnabled(this)) {
FcmReceiveService.register(this); FcmReceiveService.register(this);
} else { } else {
Log.i(TAG, "FCM disabled at build time"); Log.i(TAG, "FCM disabled at build time");
// MAYBE TODO: i think the ApplicationContext is also created
// when the app is stated by FetchWorker timeouts.
// in this case, the normal threads shall not be started.
Constraints constraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();
PeriodicWorkRequest fetchWorkRequest = new PeriodicWorkRequest.Builder(
FetchWorker.class,
PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS, // usually 15 minutes
TimeUnit.MILLISECONDS,
PeriodicWorkRequest.MIN_PERIODIC_FLEX_MILLIS, // the start may be preferred by up to 5 minutes, so we run every 10-15 minutes
TimeUnit.MILLISECONDS)
.setConstraints(constraints)
.build();
WorkManager.getInstance(this).enqueueUniquePeriodicWork(
"FetchWorker",
ExistingPeriodicWorkPolicy.KEEP,
fetchWorkRequest);
} }
} }

View file

@ -73,11 +73,14 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
@Override @Override
protected void onCreate(Bundle icicle, boolean ready) { protected void onCreate(Bundle icicle, boolean ready) {
setContentView(R.layout.activity_application_preferences);
//noinspection ConstantConditions //noinspection ConstantConditions
this.getSupportActionBar().setDisplayHomeAsUpEnabled(true); this.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setElevation(0); // TODO: use custom toolbar instead
if (icicle == null) { if (icicle == null) {
initFragment(android.R.id.content, new ApplicationPreferenceFragment()); initFragment(R.id.fragment, new ApplicationPreferenceFragment());
} }
} }
@ -89,7 +92,7 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
showBackupProvider(); showBackupProvider();
return; return;
} }
Fragment fragment = getSupportFragmentManager().findFragmentById(android.R.id.content); Fragment fragment = getSupportFragmentManager().findFragmentById(R.id.fragment);
fragment.onActivityResult(requestCode, resultCode, data); fragment.onActivityResult(requestCode, resultCode, data);
} }
@ -262,7 +265,7 @@ public class ApplicationPreferencesActivity extends PassphraseRequiredActionBarA
FragmentManager fragmentManager = getActivity().getSupportFragmentManager(); FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(android.R.id.content, fragment); fragmentTransaction.replace(R.id.fragment, fragment);
fragmentTransaction.addToBackStack(null); fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit(); fragmentTransaction.commit();
} }

View file

@ -7,10 +7,12 @@ import android.view.MenuItem;
import android.view.ViewConfiguration; import android.view.ViewConfiguration;
import android.view.WindowManager; import android.view.WindowManager;
import androidx.activity.EdgeToEdge;
import androidx.annotation.IdRes; import androidx.annotation.IdRes;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.core.view.WindowCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import org.thoughtcrime.securesms.util.DynamicTheme; import org.thoughtcrime.securesms.util.DynamicTheme;
@ -31,7 +33,9 @@ public abstract class BaseActionBarActivity extends AppCompatActivity {
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
onPreCreate(); onPreCreate();
EdgeToEdge.enable(this); // docs says to use: WindowCompat.enableEdgeToEdge(getWindow()); but it is not available
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView()).setAppearanceLightStatusBars(false); // force white text in status bar
} }
@Override @Override

View file

@ -81,7 +81,7 @@ public abstract class BaseConversationItem extends LinearLayout
protected boolean shouldInterceptClicks(DcMsg messageRecord) { protected boolean shouldInterceptClicks(DcMsg messageRecord) {
return batchSelected.isEmpty() return batchSelected.isEmpty()
&& (messageRecord.isFailed() && (messageRecord.isFailed()
|| messageRecord.getInfoType() == DcMsg.DC_INFO_PROTECTION_DISABLED || messageRecord.getInfoType() == DcMsg.DC_INFO_CHAT_E2EE
|| messageRecord.getInfoType() == DcMsg.DC_INFO_PROTECTION_ENABLED || messageRecord.getInfoType() == DcMsg.DC_INFO_PROTECTION_ENABLED
|| messageRecord.getInfoType() == DcMsg.DC_INFO_INVALID_UNENCRYPTED_MAIL); || messageRecord.getInfoType() == DcMsg.DC_INFO_INVALID_UNENCRYPTED_MAIL);
} }
@ -129,9 +129,7 @@ public abstract class BaseConversationItem extends LinearLayout
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
.create(); .create();
d.show(); d.show();
} else if (messageRecord.getInfoType() == DcMsg.DC_INFO_PROTECTION_DISABLED) { } else if (messageRecord.getInfoType() == DcMsg.DC_INFO_CHAT_E2EE || messageRecord.getInfoType() == DcMsg.DC_INFO_PROTECTION_ENABLED) {
DcHelper.showVerificationBrokenDialog(context, conversationRecipient.getName());
} else if (messageRecord.getInfoType() == DcMsg.DC_INFO_PROTECTION_ENABLED) {
DcHelper.showProtectionEnabledDialog(context); DcHelper.showProtectionEnabledDialog(context);
} else if (messageRecord.getInfoType() == DcMsg.DC_INFO_INVALID_UNENCRYPTED_MAIL) { } else if (messageRecord.getInfoType() == DcMsg.DC_INFO_INVALID_UNENCRYPTED_MAIL) {
DcHelper.showInvalidUnencryptedDialog(context); DcHelper.showInvalidUnencryptedDialog(context);

View file

@ -10,9 +10,7 @@ import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.TypedArray;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Color;
import android.net.Uri; import android.net.Uri;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.view.Menu; import android.view.Menu;
@ -401,8 +399,6 @@ public abstract class BaseConversationListFragment extends Fragment implements A
mode.setTitle("1"); mode.setTitle("1");
requireActivity().getWindow().setStatusBarColor(getResources().getColor(R.color.action_mode_status_bar));
return true; return true;
} }
@ -445,10 +441,6 @@ public abstract class BaseConversationListFragment extends Fragment implements A
actionMode = null; actionMode = null;
getListAdapter().initializeBatchMode(false); getListAdapter().initializeBatchMode(false);
TypedArray color = requireActivity().getTheme().obtainStyledAttributes(new int[]{android.R.attr.statusBarColor});
requireActivity().getWindow().setStatusBarColor(color.getColor(0, Color.BLACK));
color.recycle();
Context context = getContext(); Context context = getContext();
if (context != null) { if (context != null) {
fab.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_add_white_24dp)); fab.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_add_white_24dp));

View file

@ -30,9 +30,11 @@ public class BlockedContactsActivity extends PassphraseRequiredActionBarActivity
@Override @Override
public void onCreate(Bundle bundle, boolean ready) { public void onCreate(Bundle bundle, boolean ready) {
setContentView(R.layout.activity_blocked_contacts);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle(R.string.pref_blocked_contacts); getSupportActionBar().setTitle(R.string.pref_blocked_contacts);
initFragment(android.R.id.content, new BlockedAndShareContactsFragment(), getIntent().getExtras()); getSupportActionBar().setElevation(0); // TODO: use custom toolbar instead
initFragment(R.id.fragment, new BlockedAndShareContactsFragment(), getIntent().getExtras());
} }
@Override @Override

View file

@ -23,8 +23,6 @@ import android.Manifest;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
@ -35,7 +33,6 @@ import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
@ -83,6 +80,7 @@ public class ContactSelectionListFragment extends Fragment
public static final String MULTI_SELECT = "multi_select"; public static final String MULTI_SELECT = "multi_select";
public static final String SELECT_VERIFIED_EXTRA = "select_verified"; public static final String SELECT_VERIFIED_EXTRA = "select_verified";
public static final String SELECT_UNENCRYPTED_EXTRA = "select_unencrypted_extra";
public static final String ALLOW_CREATION = "allow_creation"; public static final String ALLOW_CREATION = "allow_creation";
public static final String PRESELECTED_CONTACTS = "preselected_contacts"; public static final String PRESELECTED_CONTACTS = "preselected_contacts";
public static final int CONTACT_ADDR_RESULT_CODE = 61123; public static final int CONTACT_ADDR_RESULT_CODE = 61123;
@ -135,7 +133,6 @@ public class ContactSelectionListFragment extends Fragment
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
MenuInflater inflater = getActivity().getMenuInflater(); MenuInflater inflater = getActivity().getMenuInflater();
inflater.inflate(R.menu.contact_list, menu); inflater.inflate(R.menu.contact_list, menu);
getActivity().getWindow().setStatusBarColor(getResources().getColor(R.color.action_mode_status_bar));
setCorrectMenuVisibility(menu); setCorrectMenuVisibility(menu);
actionMode.setTitle("1"); actionMode.setTitle("1");
return true; return true;
@ -166,10 +163,6 @@ public class ContactSelectionListFragment extends Fragment
public void onDestroyActionMode(ActionMode actionMode) { public void onDestroyActionMode(ActionMode actionMode) {
ContactSelectionListFragment.this.actionMode = null; ContactSelectionListFragment.this.actionMode = null;
getContactSelectionListAdapter().resetActionModeSelection(); getContactSelectionListAdapter().resetActionModeSelection();
TypedArray color = getActivity().getTheme().obtainStyledAttributes(new int[]{android.R.attr.statusBarColor});
getActivity().getWindow().setStatusBarColor(color.getColor(0, Color.BLACK));
color.recycle();
} }
}; };
@ -251,6 +244,10 @@ public class ContactSelectionListFragment extends Fragment
return getActivity().getIntent().getBooleanExtra(SELECT_VERIFIED_EXTRA, false); return getActivity().getIntent().getBooleanExtra(SELECT_VERIFIED_EXTRA, false);
} }
private boolean isUnencrypted() {
return getActivity().getIntent().getBooleanExtra(SELECT_UNENCRYPTED_EXTRA, false);
}
private void initializeCursor() { private void initializeCursor() {
ContactSelectionListAdapter adapter = new ContactSelectionListAdapter(getActivity(), ContactSelectionListAdapter adapter = new ContactSelectionListAdapter(getActivity(),
GlideApp.with(this), GlideApp.with(this),
@ -273,11 +270,11 @@ public class ContactSelectionListFragment extends Fragment
@Override @Override
public Loader<DcContactsLoader.Ret> onCreateLoader(int id, Bundle args) { public Loader<DcContactsLoader.Ret> onCreateLoader(int id, Bundle args) {
final boolean allowCreation = getActivity().getIntent().getBooleanExtra(ALLOW_CREATION, true); final boolean allowCreation = getActivity().getIntent().getBooleanExtra(ALLOW_CREATION, true);
final boolean addCreateContactLink = allowCreation && !isSelectVerfied(); final boolean addCreateContactLink = allowCreation && isUnencrypted();
final boolean addCreateGroupLinks = allowCreation && !isRelayingMessageContent(getActivity()) && !isMulti(); final boolean addCreateGroupLinks = allowCreation && !isRelayingMessageContent(getActivity()) && !isMulti();
final boolean addScanQRLink = allowCreation && !isMulti(); final boolean addScanQRLink = allowCreation && !isMulti();
final int listflags = DcContext.DC_GCL_ADD_SELF; final int listflags = DcContext.DC_GCL_ADD_SELF | (isUnencrypted()? DcContext.DC_GCL_ADDRESS : 0);
return new DcContactsLoader(getActivity(), listflags, cursorFilter, addCreateGroupLinks, addCreateContactLink, addScanQRLink, false); return new DcContactsLoader(getActivity(), listflags, cursorFilter, addCreateGroupLinks, addCreateContactLink, addScanQRLink, false);
} }

View file

@ -59,6 +59,7 @@ import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.annotation.StringRes;
import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.widget.SearchView; import androidx.appcompat.widget.SearchView;
@ -431,7 +432,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
getMenuInflater().inflate(R.menu.conversation, menu); getMenuInflater().inflate(R.menu.conversation, menu);
if (dcChat.isSelfTalk() || dcChat.isBroadcast()) { if (dcChat.isSelfTalk() || dcChat.isOutBroadcast()) {
menu.findItem(R.id.menu_mute_notifications).setVisible(false); menu.findItem(R.id.menu_mute_notifications).setVisible(false);
} else if(dcChat.isMuted()) { } else if(dcChat.isMuted()) {
menu.findItem(R.id.menu_mute_notifications).setTitle(R.string.menu_unmute); menu.findItem(R.id.menu_mute_notifications).setTitle(R.string.menu_unmute);
@ -441,12 +442,17 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
menu.findItem(R.id.menu_show_map).setVisible(false); menu.findItem(R.id.menu_show_map).setVisible(false);
} }
if (!dcChat.canSend() || dcChat.isBroadcast() || dcChat.isMailingList()) { if (!dcChat.isEncrypted() || !dcChat.canSend() || dcChat.isMailingList() ) {
menu.findItem(R.id.menu_ephemeral_messages).setVisible(false); menu.findItem(R.id.menu_ephemeral_messages).setVisible(false);
} }
if (isMultiUser()) { if (isMultiUser()) {
if (dcChat.canSend() && !dcChat.isBroadcast() && !dcChat.isMailingList()) { if (dcChat.isInBroadcast() && !dcChat.isContactRequest()) {
menu.findItem(R.id.menu_leave).setTitle(R.string.menu_leave_channel).setVisible(true);
} else if (dcChat.isEncrypted()
&& dcChat.canSend()
&& !dcChat.isOutBroadcast()
&& !dcChat.isMailingList()) {
menu.findItem(R.id.menu_leave).setVisible(true); menu.findItem(R.id.menu_leave).setVisible(true);
} }
} }
@ -526,8 +532,8 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
} else if (itemId == R.id.menu_show_map) { } else if (itemId == R.id.menu_show_map) {
WebxdcActivity.openMaps(this, chatId); WebxdcActivity.openMaps(this, chatId);
return true; return true;
} else if (itemId == R.id.menu_show_apps) { } else if (itemId == R.id.menu_all_media) {
handleProfile(true); handleAllMedia();
return true; return true;
} else if (itemId == R.id.menu_search_up) { } else if (itemId == R.id.menu_search_up) {
handleMenuSearchNext(false); handleMenuSearchNext(false);
@ -609,21 +615,29 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
} }
} }
private void handleProfile(boolean showApps) { private void handleProfile() {
Intent intent = new Intent(this, ProfileActivity.class); Intent intent = new Intent(this, ProfileActivity.class);
intent.putExtra(ProfileActivity.CHAT_ID_EXTRA, chatId); intent.putExtra(ProfileActivity.CHAT_ID_EXTRA, chatId);
intent.putExtra(ProfileActivity.FROM_CHAT, true);
if (showApps) {
intent.putExtra(ProfileActivity.FORCE_TAB_EXTRA, ProfileActivity.TAB_WEBXDC);
}
startActivity(intent); startActivity(intent);
overridePendingTransition(0, 0); }
private void handleAllMedia() {
Intent intent = new Intent(this, AllMediaActivity.class);
intent.putExtra(AllMediaActivity.CHAT_ID_EXTRA, chatId);
startActivity(intent);
} }
private void handleLeaveGroup() { private void handleLeaveGroup() {
@StringRes int leaveLabel;
if (dcChat.isInBroadcast()) {
leaveLabel = R.string.menu_leave_channel;
} else {
leaveLabel = R.string.menu_leave_group;
}
AlertDialog dialog = new AlertDialog.Builder(this) AlertDialog dialog = new AlertDialog.Builder(this)
.setMessage(getString(R.string.ask_leave_group)) .setMessage(getString(R.string.ask_leave_group))
.setPositiveButton(R.string.menu_leave_group, (d, which) -> { .setPositiveButton(leaveLabel, (d, which) -> {
dcContext.removeContactFromChat(chatId, DcContact.DC_CONTACT_ID_SELF); dcContext.removeContactFromChat(chatId, DcContact.DC_CONTACT_ID_SELF);
Toast.makeText(this, getString(R.string.done), Toast.LENGTH_SHORT).show(); Toast.makeText(this, getString(R.string.done), Toast.LENGTH_SHORT).show();
}) })
@ -869,7 +883,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
buttonToggle.getBackground().invalidateSelf(); buttonToggle.getBackground().invalidateSelf();
}); });
titleView.setOnClickListener(v -> handleProfile(false)); titleView.setOnClickListener(v -> handleProfile());
titleView.setOnBackClickedListener(view -> handleReturnToConversationList()); titleView.setOnBackClickedListener(view -> handleReturnToConversationList());
composeText.setOnKeyListener(composeKeyPressedListener); composeText.setOnKeyListener(composeKeyPressedListener);
@ -906,6 +920,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
supportActionBar.setCustomView(R.layout.conversation_title_view); supportActionBar.setCustomView(R.layout.conversation_title_view);
supportActionBar.setDisplayShowCustomEnabled(true); supportActionBar.setDisplayShowCustomEnabled(true);
supportActionBar.setDisplayShowTitleEnabled(false); supportActionBar.setDisplayShowTitleEnabled(false);
supportActionBar.setElevation(0); // TODO: use custom toolbar instead
Toolbar parent = (Toolbar) supportActionBar.getCustomView().getParent(); Toolbar parent = (Toolbar) supportActionBar.getCustomView().getParent();
parent.setPadding(0,0,0,0); parent.setPadding(0,0,0,0);
@ -1601,7 +1616,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
} }
public void initializeContactRequest() { public void initializeContactRequest() {
if (!dcChat.isHalfBlocked()) { if (!dcChat.isContactRequest()) {
messageRequestBottomView.setVisibility(View.GONE); messageRequestBottomView.setVisibility(View.GONE);
return; return;
} }
@ -1614,15 +1629,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity
}); });
if (dcChat.isProtectionBroken()) { if (dcChat.getType() == DcChat.DC_CHAT_TYPE_GROUP) {
messageRequestBottomView.setBlockText(R.string.more_info_desktop);
String name = dcContext.getContact(recipient.getDcContact().getId()).getDisplayName();
messageRequestBottomView.setBlockOnClickListener(v -> DcHelper.showVerificationBrokenDialog(this, name));
messageRequestBottomView.setQuestion(getString(R.string.chat_protection_broken, name));
messageRequestBottomView.setAcceptText(R.string.ok);
} else if (dcChat.getType() == DcChat.DC_CHAT_TYPE_GROUP) {
// We don't support blocking groups yet, so offer to delete it instead // We don't support blocking groups yet, so offer to delete it instead
messageRequestBottomView.setBlockText(R.string.delete); messageRequestBottomView.setBlockText(R.string.delete);
messageRequestBottomView.setBlockOnClickListener(v -> handleDeleteChat()); messageRequestBottomView.setBlockOnClickListener(v -> handleDeleteChat());

View file

@ -32,7 +32,6 @@ import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.Window;
import android.view.animation.Animation; import android.view.animation.Animation;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
import android.widget.TextView; import android.widget.TextView;
@ -168,8 +167,8 @@ public class ConversationFragment extends MessageSelectorFragment
private void setNoMessageText() { private void setNoMessageText() {
DcChat dcChat = getListAdapter().getChat(); DcChat dcChat = getListAdapter().getChat();
if(dcChat.isMultiUser()){ if(dcChat.isMultiUser()){
if (dcChat.isBroadcast()) { if (dcChat.isInBroadcast() || dcChat.isOutBroadcast()) {
noMessageTextView.setText(R.string.chat_new_broadcast_hint); noMessageTextView.setText(R.string.chat_new_channel_hint);
} else if (dcChat.isUnpromoted()) { } else if (dcChat.isUnpromoted()) {
noMessageTextView.setText(R.string.chat_new_group_hint); noMessageTextView.setText(R.string.chat_new_group_hint);
} }
@ -331,8 +330,7 @@ public class ConversationFragment extends MessageSelectorFragment
menu.findItem(R.id.menu_context_share).setVisible(messageRecord.hasFile()); menu.findItem(R.id.menu_context_share).setVisible(messageRecord.hasFile());
boolean canReply = canReplyToMsg(messageRecord); boolean canReply = canReplyToMsg(messageRecord);
menu.findItem(R.id.menu_context_reply).setVisible(chat.canSend() && canReply); menu.findItem(R.id.menu_context_reply).setVisible(chat.canSend() && canReply);
boolean canEdit = canEditMsg(messageRecord); menu.findItem(R.id.menu_context_edit).setVisible(chat.isEncrypted() && chat.canSend() && canEditMsg(messageRecord));
menu.findItem(R.id.menu_context_edit).setVisible(chat.canSend() && canEdit);
boolean showReplyPrivately = chat.isMultiUser() && !messageRecord.isOutgoing() && canReply; boolean showReplyPrivately = chat.isMultiUser() && !messageRecord.isOutgoing() && canReply;
menu.findItem(R.id.menu_context_reply_privately).setVisible(showReplyPrivately); menu.findItem(R.id.menu_context_reply_privately).setVisible(showReplyPrivately);
menu.findItem(R.id.menu_add_to_home_screen).setVisible(messageRecord.getType() == DcMsg.DC_MSG_WEBXDC); menu.findItem(R.id.menu_add_to_home_screen).setVisible(messageRecord.getType() == DcMsg.DC_MSG_WEBXDC);
@ -825,7 +823,7 @@ public class ConversationFragment extends MessageSelectorFragment
public void onShowFullClicked(DcMsg messageRecord) { public void onShowFullClicked(DcMsg messageRecord) {
Intent intent = new Intent(getActivity(), FullMsgActivity.class); Intent intent = new Intent(getActivity(), FullMsgActivity.class);
intent.putExtra(FullMsgActivity.MSG_ID_EXTRA, messageRecord.getId()); intent.putExtra(FullMsgActivity.MSG_ID_EXTRA, messageRecord.getId());
intent.putExtra(FullMsgActivity.BLOCK_LOADING_REMOTE, getListAdapter().getChat().isHalfBlocked()); intent.putExtra(FullMsgActivity.BLOCK_LOADING_REMOTE, getListAdapter().getChat().isContactRequest());
startActivity(intent); startActivity(intent);
getActivity().overridePendingTransition(R.anim.slide_from_right, R.anim.fade_scale_out); getActivity().overridePendingTransition(R.anim.slide_from_right, R.anim.fade_scale_out);
} }
@ -855,8 +853,6 @@ public class ConversationFragment extends MessageSelectorFragment
private class ActionModeCallback implements ActionMode.Callback { private class ActionModeCallback implements ActionMode.Callback {
private int statusBarColor;
@Override @Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) { public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater(); MenuInflater inflater = mode.getMenuInflater();
@ -864,10 +860,6 @@ public class ConversationFragment extends MessageSelectorFragment
mode.setTitle("1"); mode.setTitle("1");
Window window = getActivity().getWindow();
statusBarColor = window.getStatusBarColor();
window.setStatusBarColor(getResources().getColor(R.color.action_mode_status_bar));
Util.redMenuItem(menu, R.id.menu_context_delete_message); Util.redMenuItem(menu, R.id.menu_context_delete_message);
setCorrectMenuVisibility(menu); setCorrectMenuVisibility(menu);
ConversationAdaptiveActionsToolbar.adjustMenuActions(menu, 10, requireActivity().getWindow().getDecorView().getMeasuredWidth()); ConversationAdaptiveActionsToolbar.adjustMenuActions(menu, 10, requireActivity().getWindow().getDecorView().getMeasuredWidth());
@ -884,8 +876,6 @@ public class ConversationFragment extends MessageSelectorFragment
((ConversationAdapter)list.getAdapter()).clearSelection(); ((ConversationAdapter)list.getAdapter()).clearSelection();
list.getAdapter().notifyDataSetChanged(); list.getAdapter().notifyDataSetChanged();
getActivity().getWindow().setStatusBarColor(statusBarColor);
actionMode = null; actionMode = null;
hideAddReactionView(); hideAddReactionView();
} }

View file

@ -109,7 +109,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
// it is not needed to keep all past update messages, however, when deleted, also the strings should be deleted. // it is not needed to keep all past update messages, however, when deleted, also the strings should be deleted.
try { try {
DcContext dcContext = DcHelper.getContext(this); DcContext dcContext = DcHelper.getContext(this);
final String deviceMsgLabel = "update_1_50_0_android"; final String deviceMsgLabel = "update_2_0_0_android-h";
if (!dcContext.wasDeviceMsgEverAdded(deviceMsgLabel)) { if (!dcContext.wasDeviceMsgEverAdded(deviceMsgLabel)) {
DcMsg msg = null; DcMsg msg = null;
if (!getIntent().getBooleanExtra(FROM_WELCOME, false)) { if (!getIntent().getBooleanExtra(FROM_WELCOME, false)) {
@ -120,7 +120,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
// Util.copy(inputStream, new FileOutputStream(outputFile)); // Util.copy(inputStream, new FileOutputStream(outputFile));
// msg.setFile(outputFile, "image/jpeg"); // msg.setFile(outputFile, "image/jpeg");
msg.setText(getString(R.string.update_1_50_android, "https://get.delta.chat/#changelogs")); msg.setText(getString(R.string.update_2_0, "https://delta.chat/donate"));
} }
dcContext.addDeviceMsg(deviceMsgLabel, msg); dcContext.addDeviceMsg(deviceMsgLabel, msg);
@ -133,19 +133,6 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
Prefs.setStringPreference(this, Prefs.LAST_DEVICE_MSG_LABEL, deviceMsgLabel); Prefs.setStringPreference(this, Prefs.LAST_DEVICE_MSG_LABEL, deviceMsgLabel);
} }
// add info about moved "switch profile" option; added 2024-08, can be removed after ~3 months
if (!Prefs.getBooleanPreference(this, "info_about_switch_profile_added", false)) {
final DcAccounts dcAccounts = DcHelper.getAccounts(this);
if (dcAccounts.getAll().length >= 2) {
DcMsg msg = new DcMsg(dcContext, DcMsg.DC_MSG_TEXT);
msg.setText(getString(R.string.update_switch_profile_placement));
dcContext.addDeviceMsg("info_about_switch_profile", msg);
}
Prefs.setBooleanPreference(this, "info_about_switch_profile_added", true);
}
// /add info
// remove gmail oauth2 // remove gmail oauth2
final int serverFlags = dcContext.getConfigInt(CONFIG_SERVER_FLAGS); final int serverFlags = dcContext.getConfigInt(CONFIG_SERVER_FLAGS);
if ((serverFlags & DcContext.DC_LP_AUTH_OAUTH2)!=0) { if ((serverFlags & DcContext.DC_LP_AUTH_OAUTH2)!=0) {
@ -194,6 +181,8 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
refresh(); refresh();
if (BuildConfig.DEBUG) checkNdkArchitecture(); if (BuildConfig.DEBUG) checkNdkArchitecture();
DcHelper.maybeShowMigrationError(this);
} }
/** /**
@ -447,7 +436,7 @@ public class ConversationListActivity extends PassphraseRequiredActionBarActivit
onBackPressed(); onBackPressed();
return true; return true;
} else if (itemId == R.id.menu_all_media) { } else if (itemId == R.id.menu_all_media) {
startActivity(new Intent(this, ProfileActivity.class)); startActivity(new Intent(this, AllMediaActivity.class));
return true; return true;
} }

View file

@ -21,7 +21,9 @@ public class ConversationListArchiveActivity extends PassphraseRequiredActionBar
{ {
@Override @Override
protected void onCreate(Bundle icicle, boolean ready) { protected void onCreate(Bundle icicle, boolean ready) {
setContentView(R.layout.activity_conversation_list_archive);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setElevation(0); // TODO: use custom toolbar instead
if (isRelayingMessageContent(this)) { if (isRelayingMessageContent(this)) {
getSupportActionBar().setTitle(isSharing(this) ? R.string.chat_share_with_title : R.string.forward_to); getSupportActionBar().setTitle(isSharing(this) ? R.string.chat_share_with_title : R.string.forward_to);
getSupportActionBar().setSubtitle(R.string.chat_archived_label); getSupportActionBar().setSubtitle(R.string.chat_archived_label);
@ -31,7 +33,7 @@ public class ConversationListArchiveActivity extends PassphraseRequiredActionBar
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putBoolean(ConversationListFragment.ARCHIVE, true); bundle.putBoolean(ConversationListFragment.ARCHIVE, true);
initFragment(android.R.id.content, new ConversationListFragment(), bundle); initFragment(R.id.fragment, new ConversationListFragment(), bundle);
} }
@Override @Override

View file

@ -35,7 +35,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.amulyakhare.textdrawable.TextDrawable; import com.amulyakhare.textdrawable.TextDrawable;
import com.annimon.stream.Stream;
import com.b44t.messenger.DcChat; import com.b44t.messenger.DcChat;
import com.b44t.messenger.DcContact; import com.b44t.messenger.DcContact;
import com.b44t.messenger.DcContext; import com.b44t.messenger.DcContext;
@ -55,7 +54,6 @@ import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.ViewUtil;
import java.util.Collections; import java.util.Collections;
import java.util.List;
import java.util.Set; import java.util.Set;
public class ConversationListItem extends RelativeLayout public class ConversationListItem extends RelativeLayout
@ -134,6 +132,7 @@ public class ConversationListItem extends RelativeLayout
this.fromView.setText(recipient, state!=DcMsg.DC_STATE_IN_FRESH); this.fromView.setText(recipient, state!=DcMsg.DC_STATE_IN_FRESH);
} }
subjectView.setVisibility(chatId == DcChat.DC_CHAT_ID_ARCHIVED_LINK? GONE : VISIBLE);
this.subjectView.setText(thread.getDisplayBody()); this.subjectView.setText(thread.getDisplayBody());
this.subjectView.setTypeface(state==DcMsg.DC_STATE_IN_FRESH ? BOLD_TYPEFACE : LIGHT_TYPEFACE); this.subjectView.setTypeface(state==DcMsg.DC_STATE_IN_FRESH ? BOLD_TYPEFACE : LIGHT_TYPEFACE);
this.subjectView.setTextColor(state==DcMsg.DC_STATE_IN_FRESH ? ThemeUtil.getThemedColor(getContext(), R.attr.conversation_list_item_unread_color) this.subjectView.setTextColor(state==DcMsg.DC_STATE_IN_FRESH ? ThemeUtil.getThemedColor(getContext(), R.attr.conversation_list_item_unread_color)
@ -164,7 +163,7 @@ public class ConversationListItem extends RelativeLayout
fromView.setCompoundDrawablesWithIntrinsicBounds( fromView.setCompoundDrawablesWithIntrinsicBounds(
thread.isMuted()? R.drawable.ic_volume_off_grey600_18dp : 0, thread.isMuted()? R.drawable.ic_volume_off_grey600_18dp : 0,
0, 0,
thread.isProtected()? R.drawable.ic_verified : 0, 0,
0); 0);
} }
@ -177,7 +176,7 @@ public class ConversationListItem extends RelativeLayout
fromView.setText(getHighlightedSpan(contact.getDisplayName(), highlightSubstring)); fromView.setText(getHighlightedSpan(contact.getDisplayName(), highlightSubstring));
fromView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); fromView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
subjectView.setText(getHighlightedSpan(contact.getAddr(), highlightSubstring)); subjectView.setVisibility(GONE);
dateView.setText(""); dateView.setText("");
dateView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); dateView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
archivedBadgeView.setVisibility(GONE); archivedBadgeView.setVisibility(GONE);
@ -201,6 +200,7 @@ public class ConversationListItem extends RelativeLayout
fromView.setText(recipient, true); fromView.setText(recipient, true);
fromView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); fromView.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);
subjectView.setVisibility(VISIBLE);
subjectView.setText(getHighlightedSpan(messageResult.getSummarytext(512), highlightSubstring)); subjectView.setText(getHighlightedSpan(messageResult.getSummarytext(512), highlightSubstring));
long timestamp = messageResult.getTimestamp(); long timestamp = messageResult.getTimestamp();
@ -316,15 +316,12 @@ public class ConversationListItem extends RelativeLayout
String normalizedValue = value.toLowerCase(Util.getLocale()); String normalizedValue = value.toLowerCase(Util.getLocale());
String normalizedTest = highlight.toLowerCase(Util.getLocale()); String normalizedTest = highlight.toLowerCase(Util.getLocale());
List<String> testTokens;
try (Stream<String> stream = Stream.of(normalizedTest.split(" "))) {
testTokens = stream.filter(s -> !s.trim().isEmpty()).toList();
}
Spannable spanned = new SpannableString(value); Spannable spanned = new SpannableString(value);
int searchStartIndex = 0; int searchStartIndex = 0;
for (String token : testTokens) { for (String token : normalizedTest.split(" ")) {
if (token.trim().isEmpty()) continue;
if (searchStartIndex >= spanned.length()) { if (searchStartIndex >= spanned.length()) {
break; break;
} }

View file

@ -68,17 +68,6 @@ public class ConversationTitleView extends RelativeLayout {
title.setText(dcChat.getName()); title.setText(dcChat.getName());
String subtitleStr = null; String subtitleStr = null;
// set icons etc.
int imgLeft = 0;
int imgRight = 0;
if (dcChat.isMuted()) {
imgLeft = R.drawable.ic_volume_off_white_18dp;
}
if (dcChat.isProtected()) {
imgRight = R.drawable.ic_verified;
}
boolean isOnline = false; boolean isOnline = false;
int[] chatContacts = dcContext.getChatContacts(chatId); int[] chatContacts = dcContext.getChatContacts(chatId);
if (dcChat.isMailingList()) { if (dcChat.isMailingList()) {
@ -87,7 +76,9 @@ public class ConversationTitleView extends RelativeLayout {
} else { } else {
subtitleStr = context.getString(R.string.mailing_list); subtitleStr = context.getString(R.string.mailing_list);
} }
} else if (dcChat.isBroadcast()) { } else if (dcChat.isInBroadcast()) {
subtitleStr = context.getString(R.string.channel);
} else if (dcChat.isOutBroadcast()) {
if (!profileView) { if (!profileView) {
subtitleStr = context.getResources().getQuantityString(R.plurals.n_recipients, chatContacts.length, chatContacts.length); subtitleStr = context.getResources().getQuantityString(R.plurals.n_recipients, chatContacts.length, chatContacts.length);
} }
@ -106,7 +97,7 @@ public class ConversationTitleView extends RelativeLayout {
DcContact dcContact = dcContext.getContact(chatContacts[0]); DcContact dcContact = dcContext.getContact(chatContacts[0]);
if (!profileView && dcContact.isBot()) { if (!profileView && dcContact.isBot()) {
subtitleStr = context.getString(R.string.bot); subtitleStr = context.getString(R.string.bot);
} else if (profileView) { } else if (profileView || !dcChat.isEncrypted()) {
subtitleStr = dcContact.getAddr(); subtitleStr = dcContact.getAddr();
} }
isOnline = dcContact.wasSeenRecently(); isOnline = dcContact.wasSeenRecently();
@ -115,7 +106,8 @@ public class ConversationTitleView extends RelativeLayout {
avatar.setAvatar(glideRequests, new Recipient(getContext(), dcChat), false); avatar.setAvatar(glideRequests, new Recipient(getContext(), dcChat), false);
avatar.setSeenRecently(isOnline); avatar.setSeenRecently(isOnline);
title.setCompoundDrawablesWithIntrinsicBounds(imgLeft, 0, imgRight, 0); int imgLeft = dcChat.isMuted()? R.drawable.ic_volume_off_white_18dp : 0;
title.setCompoundDrawablesWithIntrinsicBounds(imgLeft, 0, 0, 0);
if (!TextUtils.isEmpty(subtitleStr)) { if (!TextUtils.isEmpty(subtitleStr)) {
subtitle.setText(subtitleStr); subtitle.setText(subtitleStr);
subtitle.setVisibility(View.VISIBLE); subtitle.setVisibility(View.VISIBLE);
@ -133,13 +125,7 @@ public class ConversationTitleView extends RelativeLayout {
avatar.setAvatar(glideRequests, new Recipient(getContext(), contact), false); avatar.setAvatar(glideRequests, new Recipient(getContext(), contact), false);
avatar.setSeenRecently(contact.wasSeenRecently()); avatar.setSeenRecently(contact.wasSeenRecently());
int imgRight = 0;
if (contact.isVerified()) {
imgRight = R.drawable.ic_verified;
}
title.setText(contact.getDisplayName()); title.setText(contact.getDisplayName());
title.setCompoundDrawablesWithIntrinsicBounds(0, 0, imgRight, 0);
subtitle.setText(contact.getAddr()); subtitle.setText(contact.getAddr());
subtitle.setVisibility(View.VISIBLE); subtitle.setVisibility(View.VISIBLE);
} }
@ -157,8 +143,4 @@ public class ConversationTitleView extends RelativeLayout {
public void setOnBackClickedListener(@Nullable OnClickListener listener) { public void setOnBackClickedListener(@Nullable OnClickListener listener) {
this.back.setOnClickListener(listener); this.back.setOnClickListener(listener);
} }
public void registerForContextMenu(Activity activity) {
activity.registerForContextMenu(content);
}
} }

View file

@ -26,7 +26,6 @@ public class ConversationUpdateItem extends BaseConversationItem
{ {
private DeliveryStatusView deliveryStatusView; private DeliveryStatusView deliveryStatusView;
private AppCompatImageView appIcon; private AppCompatImageView appIcon;
private AppCompatImageView verifiedIcon;
private int textColor; private int textColor;
public ConversationUpdateItem(Context context) { public ConversationUpdateItem(Context context) {
@ -46,7 +45,6 @@ public class ConversationUpdateItem extends BaseConversationItem
bodyText = findViewById(R.id.conversation_update_body); bodyText = findViewById(R.id.conversation_update_body);
deliveryStatusView = new DeliveryStatusView(findViewById(R.id.delivery_indicator)); deliveryStatusView = new DeliveryStatusView(findViewById(R.id.delivery_indicator));
appIcon = findViewById(R.id.app_icon); appIcon = findViewById(R.id.app_icon);
verifiedIcon = findViewById(R.id.verified_icon);
bodyText.setOnLongClickListener(passthroughClickListener); bodyText.setOnLongClickListener(passthroughClickListener);
@ -113,16 +111,6 @@ public class ConversationUpdateItem extends BaseConversationItem
appIcon.setVisibility(GONE); appIcon.setVisibility(GONE);
} }
if (infoType == DcMsg.DC_INFO_PROTECTION_ENABLED) {
verifiedIcon.setVisibility(VISIBLE);
verifiedIcon.setImageResource(R.drawable.ic_verified);
} else if (infoType == DcMsg.DC_INFO_PROTECTION_DISABLED) {
verifiedIcon.setVisibility(VISIBLE);
verifiedIcon.setImageResource(R.drawable.ic_verified_broken);
} else {
verifiedIcon.setVisibility(GONE);
}
bodyText.setText(messageRecord.getDisplayBody()); bodyText.setText(messageRecord.getDisplayBody());
bodyText.setVisibility(VISIBLE); bodyText.setVisibility(VISIBLE);

View file

@ -35,7 +35,6 @@ import org.thoughtcrime.securesms.mms.AttachmentManager;
import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.profiles.AvatarHelper; import org.thoughtcrime.securesms.profiles.AvatarHelper;
import org.thoughtcrime.securesms.profiles.ProfileMediaConstraints;
import org.thoughtcrime.securesms.scribbles.ScribbleActivity; import org.thoughtcrime.securesms.scribbles.ScribbleActivity;
import org.thoughtcrime.securesms.util.Prefs; import org.thoughtcrime.securesms.util.Prefs;
import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.ViewUtil;
@ -77,6 +76,7 @@ public class CreateProfileActivity extends BaseActionBarActivity {
getSupportActionBar().setTitle(R.string.pref_profile_info_headline); getSupportActionBar().setTitle(R.string.pref_profile_info_headline);
getSupportActionBar().setDisplayHomeAsUpEnabled(!this.fromWelcome); getSupportActionBar().setDisplayHomeAsUpEnabled(!this.fromWelcome);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close_white_24dp); getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close_white_24dp);
getSupportActionBar().setElevation(0); // TODO: use custom toolbar instead
attachmentManager = new AttachmentManager(this, () -> {}); attachmentManager = new AttachmentManager(this, () -> {});
avatarChanged = false; avatarChanged = false;
@ -144,14 +144,13 @@ public class CreateProfileActivity extends BaseActionBarActivity {
} }
private void setAvatarView(Uri output) { private void setAvatarView(Uri output) {
final ProfileMediaConstraints constraints = new ProfileMediaConstraints();
GlideApp.with(this) GlideApp.with(this)
.asBitmap() .asBitmap()
.load(output) .load(output)
.skipMemoryCache(true) .skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)
.centerCrop() .centerCrop()
.override(constraints.getImageMaxWidth(this), constraints.getImageMaxHeight(this)) .override(AvatarHelper.AVATAR_SIZE, AvatarHelper.AVATAR_SIZE)
.into(new SimpleTarget<Bitmap>() { .into(new SimpleTarget<Bitmap>() {
@Override @Override
public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) { public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {

View file

@ -67,6 +67,7 @@ public class EphemeralMessagesDialog {
case 5: burnAfter = TimeUnit.DAYS.toSeconds(1); break; case 5: burnAfter = TimeUnit.DAYS.toSeconds(1); break;
case 6: burnAfter = TimeUnit.DAYS.toSeconds(7); break; case 6: burnAfter = TimeUnit.DAYS.toSeconds(7); break;
case 7: burnAfter = TimeUnit.DAYS.toSeconds(35); break; case 7: burnAfter = TimeUnit.DAYS.toSeconds(35); break;
case 8: burnAfter = TimeUnit.DAYS.toSeconds(365); break;
default: burnAfter = 0; break; default: burnAfter = 0; break;
} }
listener.onTimeSelected(burnAfter); listener.onTimeSelected(burnAfter);
@ -103,7 +104,10 @@ public class EphemeralMessagesDialog {
if (timespan < TimeUnit.DAYS.toSeconds(35)) { if (timespan < TimeUnit.DAYS.toSeconds(35)) {
return 6; // 1 week return 6; // 1 week
} }
return 7; // 5 weeks if (timespan < TimeUnit.DAYS.toSeconds(365)) {
return 7; // 5 weeks
}
return 8; // 1 year
} }
} }

View file

@ -23,6 +23,7 @@ import androidx.loader.app.LoaderManager;
import com.b44t.messenger.DcChat; import com.b44t.messenger.DcChat;
import com.b44t.messenger.DcContact; import com.b44t.messenger.DcContact;
import com.b44t.messenger.DcContext; import com.b44t.messenger.DcContext;
import com.b44t.messenger.rpc.RpcException;
import com.bumptech.glide.load.engine.DiskCacheStrategy; import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.target.CustomTarget; import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition; import com.bumptech.glide.request.transition.Transition;
@ -48,17 +49,18 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
{ {
public static final String EDIT_GROUP_CHAT_ID = "edit_group_chat_id"; public static final String EDIT_GROUP_CHAT_ID = "edit_group_chat_id";
public static final String CREATE_BROADCAST = "group_create_broadcast"; public static final String CREATE_BROADCAST = "create_broadcast";
public static final String UNENCRYPTED = "unencrypted";
public static final String CLONE_CHAT_EXTRA = "clone_chat"; public static final String CLONE_CHAT_EXTRA = "clone_chat";
private static final int PICK_CONTACT = 1; private static final int PICK_CONTACT = 1;
public static final int AVATAR_SIZE = 210;
private static final int REQUEST_CODE_AVATAR = 2759; private static final int REQUEST_CODE_AVATAR = 2759;
private DcContext dcContext; private DcContext dcContext;
private boolean verified; private boolean verified;
private boolean broadcast; private boolean unencrypted;
private boolean broadcast;
private EditText groupName; private EditText groupName;
private ListView lv; private ListView lv;
private ImageView avatar; private ImageView avatar;
@ -75,8 +77,10 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
setContentView(R.layout.group_create_activity); setContentView(R.layout.group_create_activity);
verified = false; verified = false;
broadcast = getIntent().getBooleanExtra(CREATE_BROADCAST, false); broadcast = getIntent().getBooleanExtra(CREATE_BROADCAST, false);
unencrypted = getIntent().getBooleanExtra(UNENCRYPTED, false);
Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true); Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close_white_24dp); getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_close_white_24dp);
getSupportActionBar().setElevation(0); // TODO: use custom toolbar instead
groupChatId = getIntent().getIntExtra(EDIT_GROUP_CHAT_ID, 0); groupChatId = getIntent().getIntExtra(EDIT_GROUP_CHAT_ID, 0);
attachmentManager = new AttachmentManager(this, () -> {}); attachmentManager = new AttachmentManager(this, () -> {});
@ -88,12 +92,15 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
isEdit = true; isEdit = true;
DcChat dcChat = dcContext.getChat(groupChatId); DcChat dcChat = dcContext.getChat(groupChatId);
verified = dcChat.isProtected(); verified = dcChat.isProtected();
broadcast = dcChat.isBroadcast(); broadcast = dcChat.isOutBroadcast();
unencrypted = !dcChat.isEncrypted();
} }
int chatId = getIntent().getIntExtra(CLONE_CHAT_EXTRA, 0); int chatId = getIntent().getIntExtra(CLONE_CHAT_EXTRA, 0);
if (chatId != 0) { if (chatId != 0) {
broadcast = dcContext.getChat(chatId).isBroadcast(); DcChat dcChat = dcContext.getChat(chatId);
broadcast = dcChat.isOutBroadcast();
unencrypted = !dcChat.isEncrypted();
} }
initializeResources(); initializeResources();
@ -120,7 +127,10 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
title = getString(R.string.global_menu_edit_desktop); title = getString(R.string.global_menu_edit_desktop);
} }
else if(broadcast) { else if(broadcast) {
title = getString(R.string.new_broadcast_list); title = getString(R.string.new_channel);
}
else if(unencrypted) {
title = getString(R.string.new_email);
} }
else { else {
title = getString(R.string.menu_new_group); title = getString(R.string.menu_new_group);
@ -136,7 +146,7 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
initializeAvatarView(); initializeAvatarView();
SelectedContactsAdapter adapter = new SelectedContactsAdapter(this, GlideApp.with(this), broadcast); SelectedContactsAdapter adapter = new SelectedContactsAdapter(this, GlideApp.with(this), broadcast, unencrypted);
adapter.setItemClickListener(this); adapter.setItemClickListener(this);
lv.setAdapter(adapter); lv.setAdapter(adapter);
@ -160,9 +170,12 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
} }
if (broadcast) { if (broadcast) {
groupName.setHint(R.string.channel_name);
chatHints.setVisibility(View.VISIBLE);
} else if (unencrypted) {
avatar.setVisibility(View.GONE); avatar.setVisibility(View.GONE);
groupName.setHint(R.string.broadcast_list_name); groupName.setHint(R.string.subject);
chatHints.setVisibility(isEdit()? View.GONE : View.VISIBLE); chatHints.setVisibility(View.GONE);
} else { } else {
chatHints.setVisibility(View.GONE); chatHints.setVisibility(View.GONE);
} }
@ -219,7 +232,7 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
if (groupChatId != 0) { if (groupChatId != 0) {
updateGroup(groupName); updateGroup(groupName);
} else { } else {
verified = !broadcast && allMembersVerified(); verified = !unencrypted && !broadcast && allMembersVerified();
createGroup(groupName); createGroup(groupName);
} }
@ -244,6 +257,7 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
if (contactId == DcContact.DC_CONTACT_ID_ADD_MEMBER) { if (contactId == DcContact.DC_CONTACT_ID_ADD_MEMBER) {
Intent intent = new Intent(this, ContactMultiSelectionActivity.class); Intent intent = new Intent(this, ContactMultiSelectionActivity.class);
intent.putExtra(ContactSelectionListFragment.SELECT_VERIFIED_EXTRA, verified); intent.putExtra(ContactSelectionListFragment.SELECT_VERIFIED_EXTRA, verified);
intent.putExtra(ContactSelectionListFragment.SELECT_UNENCRYPTED_EXTRA, unencrypted);
ArrayList<Integer> preselectedContacts = new ArrayList<>(getAdapter().getContacts()); ArrayList<Integer> preselectedContacts = new ArrayList<>(getAdapter().getContacts());
intent.putExtra(ContactSelectionListFragment.PRESELECTED_CONTACTS, preselectedContacts); intent.putExtra(ContactSelectionListFragment.PRESELECTED_CONTACTS, preselectedContacts);
startActivityForResult(intent, PICK_CONTACT); startActivityForResult(intent, PICK_CONTACT);
@ -257,8 +271,19 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
private void createGroup(String groupName) { private void createGroup(String groupName) {
if (broadcast) { if (broadcast) {
groupChatId = dcContext.createBroadcastList(); try {
dcContext.setChatName(groupChatId, groupName); groupChatId = DcHelper.getRpc(this).createBroadcast(dcContext.getAccountId(), groupName);
} catch (RpcException e) {
e.printStackTrace();
return;
}
} else if (unencrypted) {
try {
groupChatId = DcHelper.getRpc(this).createGroupChatUnencrypted(dcContext.getAccountId(), groupName);
} catch (RpcException e) {
e.printStackTrace();
return;
}
} else { } else {
groupChatId = dcContext.createGroupChat(verified, groupName); groupChatId = dcContext.createGroupChat(verified, groupName);
} }
@ -351,7 +376,7 @@ public class GroupCreateActivity extends PassphraseRequiredActionBarActivity
.skipMemoryCache(true) .skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)
.centerCrop() .centerCrop()
.override(AVATAR_SIZE, AVATAR_SIZE) .override(AvatarHelper.AVATAR_SIZE, AvatarHelper.AVATAR_SIZE)
.into(new CustomTarget<Bitmap>() { .into(new CustomTarget<Bitmap>() {
@Override @Override
public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) { public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {

View file

@ -49,7 +49,6 @@ import org.thoughtcrime.securesms.mms.AttachmentManager;
import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.permissions.Permissions; import org.thoughtcrime.securesms.permissions.Permissions;
import org.thoughtcrime.securesms.profiles.AvatarHelper; import org.thoughtcrime.securesms.profiles.AvatarHelper;
import org.thoughtcrime.securesms.profiles.ProfileMediaConstraints;
import org.thoughtcrime.securesms.proxy.ProxySettingsActivity; import org.thoughtcrime.securesms.proxy.ProxySettingsActivity;
import org.thoughtcrime.securesms.qr.RegistrationQrActivity; import org.thoughtcrime.securesms.qr.RegistrationQrActivity;
import org.thoughtcrime.securesms.scribbles.ScribbleActivity; import org.thoughtcrime.securesms.scribbles.ScribbleActivity;
@ -99,6 +98,7 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
Objects.requireNonNull(getSupportActionBar()).setTitle(R.string.onboarding_create_instant_account); Objects.requireNonNull(getSupportActionBar()).setTitle(R.string.onboarding_create_instant_account);
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setElevation(0); // TODO: use custom toolbar instead
boolean fromWelcome = getIntent().getBooleanExtra(FROM_WELCOME, false); boolean fromWelcome = getIntent().getBooleanExtra(FROM_WELCOME, false);
if (DcHelper.getContext(this).isConfigured() == 1) { if (DcHelper.getContext(this).isConfigured() == 1) {
@ -284,14 +284,13 @@ public class InstantOnboardingActivity extends BaseActionBarActivity implements
} }
private void setAvatarView(Uri output) { private void setAvatarView(Uri output) {
final ProfileMediaConstraints constraints = new ProfileMediaConstraints();
GlideApp.with(this) GlideApp.with(this)
.asBitmap() .asBitmap()
.load(output) .load(output)
.skipMemoryCache(true) .skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)
.centerCrop() .centerCrop()
.override(constraints.getImageMaxWidth(this), constraints.getImageMaxHeight(this)) .override(AvatarHelper.AVATAR_SIZE, AvatarHelper.AVATAR_SIZE)
.into(new CustomTarget<Bitmap>() { .into(new CustomTarget<Bitmap>() {
@Override @Override
public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) { public void onResourceReady(@NonNull Bitmap resource, Transition<? super Bitmap> transition) {

View file

@ -36,6 +36,7 @@ public class LogViewActivity extends BaseActionBarActivity {
transaction.commit(); transaction.commit();
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setElevation(0); // TODO: use custom toolbar instead
} }
@Override @Override

View file

@ -262,16 +262,16 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
finish(); finish();
} }
else if(conversationRecipient.getAddress().isDcChat()) { else if(conversationRecipient.getAddress().isDcChat()) {
Intent intent = new Intent(this, ProfileActivity.class); Intent intent = new Intent(this, AllMediaActivity.class);
intent.putExtra(ProfileActivity.CHAT_ID_EXTRA, conversationRecipient.getAddress().getDcChatId()); intent.putExtra(AllMediaActivity.CHAT_ID_EXTRA, conversationRecipient.getAddress().getDcChatId());
intent.putExtra(ProfileActivity.FORCE_TAB_EXTRA, ProfileActivity.TAB_GALLERY); intent.putExtra(AllMediaActivity.FORCE_GALLERY, true);
startActivity(intent); startActivity(intent);
finish(); finish();
} }
else if(conversationRecipient.getAddress().isDcContact()) { else if(conversationRecipient.getAddress().isDcContact()) {
Intent intent = new Intent(this, ProfileActivity.class); Intent intent = new Intent(this, AllMediaActivity.class);
intent.putExtra(ProfileActivity.CONTACT_ID_EXTRA, conversationRecipient.getAddress().getDcContactId()); intent.putExtra(AllMediaActivity.CONTACT_ID_EXTRA, conversationRecipient.getAddress().getDcContactId());
intent.putExtra(ProfileActivity.FORCE_TAB_EXTRA, ProfileActivity.TAB_GALLERY); intent.putExtra(AllMediaActivity.FORCE_GALLERY, true);
startActivity(intent); startActivity(intent);
finish(); finish();
} }
@ -359,7 +359,7 @@ public class MediaPreviewActivity extends PassphraseRequiredActionBarActivity
finish(); finish();
}); });
if(dcChat.canSend() && !dcChat.isSelfTalk() && dcMsg.isOutgoing()) { if(dcChat.isEncrypted() && dcChat.canSend() && !dcChat.isSelfTalk() && dcMsg.isOutgoing()) {
builder.setNegativeButton(R.string.delete_for_everyone, (d, which) -> { builder.setNegativeButton(R.string.delete_for_everyone, (d, which) -> {
Util.runOnAnyBackgroundThread(() -> dcContext.sendDeleteRequest(messageIds)); Util.runOnAnyBackgroundThread(() -> dcContext.sendDeleteRequest(messageIds));
finish(); finish();

View file

@ -64,7 +64,7 @@ public abstract class MessageSelectorFragment
protected void handleDeleteMessages(int chatId, final int[] messageIds) { protected void handleDeleteMessages(int chatId, final int[] messageIds) {
DcChat dcChat = dcContext.getChat(chatId); DcChat dcChat = dcContext.getChat(chatId);
boolean canDeleteForAll = true; boolean canDeleteForAll = true;
if (dcChat.canSend() && !dcChat.isSelfTalk()) { if (dcChat.isEncrypted() && dcChat.canSend() && !dcChat.isSelfTalk()) {
for(int msgId : messageIds) { for(int msgId : messageIds) {
DcMsg msg = dcContext.getMsg(msgId); DcMsg msg = dcContext.getMsg(msgId);
if (!msg.isOutgoing() || msg.isInfo()) { if (!msg.isOutgoing() || msg.isInfo()) {
@ -86,7 +86,7 @@ public abstract class MessageSelectorFragment
.setCancelable(true) .setCancelable(true)
.setNeutralButton(android.R.string.cancel, null) .setNeutralButton(android.R.string.cancel, null)
.setPositiveButton(positiveBtnLabel, (d, which) -> { .setPositiveButton(positiveBtnLabel, (d, which) -> {
dcContext.deleteMsgs(messageIds); Util.runOnAnyBackgroundThread(() -> dcContext.deleteMsgs(messageIds));
if (actionMode != null) actionMode.finish(); if (actionMode != null) actionMode.finish();
}); });

View file

@ -102,7 +102,11 @@ public class NewConversationActivity extends ContactSelectionActivity {
public void onContactSelected(int contactId) { public void onContactSelected(int contactId) {
if(contactId == DcContact.DC_CONTACT_ID_NEW_GROUP) { if(contactId == DcContact.DC_CONTACT_ID_NEW_GROUP) {
startActivity(new Intent(this, GroupCreateActivity.class)); startActivity(new Intent(this, GroupCreateActivity.class));
} else if(contactId == DcContact.DC_CONTACT_ID_NEW_BROADCAST_LIST) { } else if(contactId == DcContact.DC_CONTACT_ID_NEW_UNENCRYPTED_GROUP) {
Intent intent = new Intent(this, GroupCreateActivity.class);
intent.putExtra(GroupCreateActivity.UNENCRYPTED, true);
startActivity(intent);
} else if(contactId == DcContact.DC_CONTACT_ID_NEW_BROADCAST) {
Intent intent = new Intent(this, GroupCreateActivity.class); Intent intent = new Intent(this, GroupCreateActivity.class);
intent.putExtra(GroupCreateActivity.CREATE_BROADCAST, true); intent.putExtra(GroupCreateActivity.CREATE_BROADCAST, true);
startActivity(intent); startActivity(intent);

View file

@ -11,19 +11,13 @@ import android.view.ContextMenu;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText; import android.widget.EditText;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.view.ActionMode;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.b44t.messenger.DcChat; import com.b44t.messenger.DcChat;
import com.b44t.messenger.DcContact; import com.b44t.messenger.DcContact;
@ -31,11 +25,9 @@ import com.b44t.messenger.DcContext;
import com.b44t.messenger.DcEvent; import com.b44t.messenger.DcEvent;
import com.b44t.messenger.rpc.Rpc; import com.b44t.messenger.rpc.Rpc;
import com.b44t.messenger.rpc.RpcException; import com.b44t.messenger.rpc.RpcException;
import com.google.android.material.tabs.TabLayout;
import org.thoughtcrime.securesms.connect.DcEventCenter; import org.thoughtcrime.securesms.connect.DcEventCenter;
import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme; import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme;
import org.thoughtcrime.securesms.util.Prefs; import org.thoughtcrime.securesms.util.Prefs;
import org.thoughtcrime.securesms.util.RelayUtil; import org.thoughtcrime.securesms.util.RelayUtil;
@ -43,7 +35,6 @@ import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.ViewUtil;
import java.io.File; import java.io.File;
import java.util.ArrayList;
public class ProfileActivity extends PassphraseRequiredActionBarActivity public class ProfileActivity extends PassphraseRequiredActionBarActivity
implements DcEventCenter.DcEventDelegate implements DcEventCenter.DcEventDelegate
@ -51,16 +42,6 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
public static final String CHAT_ID_EXTRA = "chat_id"; public static final String CHAT_ID_EXTRA = "chat_id";
public static final String CONTACT_ID_EXTRA = "contact_id"; public static final String CONTACT_ID_EXTRA = "contact_id";
public static final String FORCE_TAB_EXTRA = "force_tab";
public static final String FROM_CHAT = "from_chat";
public static final int TAB_SETTINGS = 10;
public static final int TAB_GALLERY = 20;
public static final int TAB_AUDIO = 25;
public static final int TAB_DOCS = 30;
public static final int TAB_WEBXDC = 35;
public static final int TAB_LINKS = 40;
public static final int TAB_MAP = 50;
private static final int REQUEST_CODE_PICK_RINGTONE = 1; private static final int REQUEST_CODE_PICK_RINGTONE = 1;
@ -70,15 +51,11 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
private boolean chatIsMultiUser; private boolean chatIsMultiUser;
private boolean chatIsDeviceTalk; private boolean chatIsDeviceTalk;
private boolean chatIsMailingList; private boolean chatIsMailingList;
private boolean chatIsBroadcast; private boolean chatIsOutBroadcast;
private boolean chatIsInBroadcast;
private int contactId; private int contactId;
private boolean fromChat; private boolean contactIsBot;
private Toolbar toolbar;
private final ArrayList<Integer> tabs = new ArrayList<>();
private Toolbar toolbar;
private ConversationTitleView titleView;
private TabLayout tabLayout;
private ViewPager viewPager;
@Override @Override
protected void onPreCreate() { protected void onPreCreate() {
@ -97,38 +74,27 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
setSupportActionBar(this.toolbar); setSupportActionBar(this.toolbar);
ActionBar supportActionBar = getSupportActionBar(); ActionBar supportActionBar = getSupportActionBar();
if (supportActionBar != null) { if (supportActionBar != null) {
if (isGlobalProfile()) { String title = getString(R.string.profile);
supportActionBar.setDisplayHomeAsUpEnabled(true); if (chatIsMailingList) {
supportActionBar.setHomeActionContentDescription(getString(R.string.back)); title = getString(R.string.mailing_list);
} else { } else if (chatIsOutBroadcast || chatIsInBroadcast) {
supportActionBar.setDisplayHomeAsUpEnabled(false); title = getString(R.string.channel);
supportActionBar.setCustomView(R.layout.conversation_title_view); } else if (chatIsMultiUser) {
supportActionBar.setDisplayShowCustomEnabled(true); title = getString(R.string.tab_group);
supportActionBar.setDisplayShowTitleEnabled(false); } else if (contactIsBot) {
Toolbar parent = (Toolbar) supportActionBar.getCustomView().getParent(); title = getString(R.string.bot);
parent.setPadding(0,0,0,0); } else if (!chatIsDeviceTalk && !isSelfProfile()) {
parent.setContentInsetsAbsolute(0,0); title = getString(R.string.tab_contact);
titleView = (ConversationTitleView) supportActionBar.getCustomView();
titleView.setOnBackClickedListener(view -> onBackPressed());
titleView.setOnClickListener(view -> onEnlargeAvatar());
if (isContactProfile() && !isSelfProfile() && !chatIsDeviceTalk) {
titleView.registerForContextMenu(this);
}
} }
supportActionBar.setDisplayHomeAsUpEnabled(true);
supportActionBar.setTitle(title);
} }
updateToolbar(); Bundle args = new Bundle();
args.putInt(ProfileFragment.CHAT_ID_EXTRA, (chatId == 0) ? -1 : chatId);
this.tabLayout.setupWithViewPager(viewPager); args.putInt(ProfileFragment.CONTACT_ID_EXTRA, (contactId == 0) ? -1 : contactId);
this.viewPager.setAdapter(new ProfilePagerAdapter(getSupportFragmentManager())); initFragment(R.id.fragment_container, new ProfileFragment(), args);
int forceTab = getIntent().getIntExtra(FORCE_TAB_EXTRA, -1);
if (forceTab != -1) {
int forceIndex = tabs.indexOf(forceTab);
if (forceIndex != -1) {
this.viewPager.setCurrentItem(forceIndex);
}
}
DcEventCenter eventCenter = DcHelper.getEventCenter(this); DcEventCenter eventCenter = DcHelper.getEventCenter(this);
eventCenter.addObserver(DcContext.DC_EVENT_CHAT_MODIFIED, this); eventCenter.addObserver(DcContext.DC_EVENT_CHAT_MODIFIED, this);
@ -137,22 +103,25 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
@Override @Override
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {
if (!isSelfProfile() && !isGlobalProfile()) { if (!isSelfProfile()) {
getMenuInflater().inflate(R.menu.profile_common, menu); getMenuInflater().inflate(R.menu.profile_common, menu);
boolean canReceive = true; boolean canReceive = true;
if (chatId != 0) { if (chatId != 0) {
DcChat dcChat = dcContext.getChat(chatId);
menu.findItem(R.id.menu_clone).setVisible(chatIsMultiUser && !chatIsMailingList); menu.findItem(R.id.menu_clone).setVisible(chatIsMultiUser && !chatIsMailingList);
if (chatIsDeviceTalk) { if (chatIsDeviceTalk) {
menu.findItem(R.id.edit_name).setVisible(false); menu.findItem(R.id.edit_name).setVisible(false);
menu.findItem(R.id.show_encr_info).setVisible(false); menu.findItem(R.id.show_encr_info).setVisible(false);
menu.findItem(R.id.share).setVisible(false); menu.findItem(R.id.share).setVisible(false);
} else if (chatIsMultiUser) { } else if (chatIsMultiUser) {
if (chatIsBroadcast) { menu.findItem(R.id.edit_name).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
if (chatIsOutBroadcast) {
canReceive = false; canReceive = false;
} else { } else {
DcChat dcChat = dcContext.getChat(chatId); if (!dcChat.isEncrypted()
if (!chatIsMailingList && !dcChat.canSend()) { || !dcChat.canSend()
|| chatIsMailingList) {
menu.findItem(R.id.edit_name).setVisible(false); menu.findItem(R.id.edit_name).setVisible(false);
} }
} }
@ -205,21 +174,6 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
getMenuInflater().inflate(R.menu.profile_title_context, menu); getMenuInflater().inflate(R.menu.profile_title_context, menu);
} }
boolean backPressed = false;
@Override
public void onBackPressed() {
backPressed = true;
super.onBackPressed();
}
@Override
protected void onPause() {
super.onPause();
if (backPressed && fromChat) {
overridePendingTransition(0, 0);
}
}
@Override @Override
public void onDestroy() { public void onDestroy() {
DcHelper.getEventCenter(this).removeObservers(this); DcHelper.getEventCenter(this).removeObservers(this);
@ -228,65 +182,38 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
@Override @Override
public void handleEvent(@NonNull DcEvent event) { public void handleEvent(@NonNull DcEvent event) {
updateToolbar();
} }
private void initializeResources() { private void initializeResources() {
chatId = getIntent().getIntExtra(CHAT_ID_EXTRA, 0); chatId = getIntent().getIntExtra(CHAT_ID_EXTRA, 0);
contactId = getIntent().getIntExtra(CONTACT_ID_EXTRA, 0); contactId = getIntent().getIntExtra(CONTACT_ID_EXTRA, 0);
contactIsBot = false;
chatIsMultiUser = false; chatIsMultiUser = false;
chatIsDeviceTalk = false; chatIsDeviceTalk = false;
chatIsMailingList= false; chatIsMailingList= false;
chatIsBroadcast = false; chatIsInBroadcast = false;
fromChat = getIntent().getBooleanExtra(FROM_CHAT, false); chatIsOutBroadcast = false;
if (contactId!=0) { if (contactId!=0) {
DcContact dcContact = dcContext.getContact(contactId);
chatId = dcContext.getChatIdByContactId(contactId); chatId = dcContext.getChatIdByContactId(contactId);
contactIsBot = dcContact.isBot();
} }
else if(chatId!=0) {
if(chatId!=0) {
DcChat dcChat = dcContext.getChat(chatId); DcChat dcChat = dcContext.getChat(chatId);
chatIsMultiUser = dcChat.isMultiUser(); chatIsMultiUser = dcChat.isMultiUser();
chatIsDeviceTalk = dcChat.isDeviceTalk(); chatIsDeviceTalk = dcChat.isDeviceTalk();
chatIsMailingList = dcChat.isMailingList(); chatIsMailingList = dcChat.isMailingList();
chatIsBroadcast = dcChat.isBroadcast(); chatIsInBroadcast = dcChat.isInBroadcast();
chatIsOutBroadcast = dcChat.isOutBroadcast();
if(!chatIsMultiUser) { if(!chatIsMultiUser) {
final int[] members = dcContext.getChatContacts(chatId); final int[] members = dcContext.getChatContacts(chatId);
contactId = members.length>=1? members[0] : 0; contactId = members.length>=1? members[0] : 0;
} }
} }
if(!isGlobalProfile() && !isSelfProfile() && !chatIsMailingList) {
tabs.add(TAB_SETTINGS);
}
tabs.add(TAB_GALLERY);
tabs.add(TAB_AUDIO);
tabs.add(TAB_DOCS);
tabs.add(TAB_WEBXDC);
//tabs.add(TAB_LINKS);
//if(Prefs.isLocationStreamingEnabled(this)) {
// tabs.add(TAB_MAP);
//}
this.viewPager = ViewUtil.findById(this, R.id.pager);
this.toolbar = ViewUtil.findById(this, R.id.toolbar); this.toolbar = ViewUtil.findById(this, R.id.toolbar);
this.tabLayout = ViewUtil.findById(this, R.id.tab_layout);
}
private void updateToolbar() {
if (isGlobalProfile()){
getSupportActionBar().setTitle(R.string.menu_all_media);
}
else if (chatId > 0) {
DcChat dcChat = dcContext.getChat(chatId);
titleView.setTitle(GlideApp.with(this), dcChat, true);
}
else if (isContactProfile()){
titleView.setTitle(GlideApp.with(this), dcContext.getContact(contactId));
}
}
private boolean isGlobalProfile() {
return contactId==0 && chatId==0;
} }
private boolean isContactProfile() { private boolean isContactProfile() {
@ -298,124 +225,6 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
return isContactProfile() && contactId==DcContact.DC_CONTACT_ID_SELF; return isContactProfile() && contactId==DcContact.DC_CONTACT_ID_SELF;
} }
private class ProfilePagerAdapter extends FragmentStatePagerAdapter {
private Object currentFragment = null;
ProfilePagerAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public void setPrimaryItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
super.setPrimaryItem(container, position, object);
if (currentFragment != null && currentFragment != object) {
ActionMode action = null;
if (currentFragment instanceof MessageSelectorFragment) {
action = ((MessageSelectorFragment) currentFragment).getActionMode();
} else if (currentFragment instanceof ProfileSettingsFragment) {
action = ((ProfileSettingsFragment) currentFragment).getActionMode();
}
if (action != null) {
action.finish();
}
}
currentFragment = object;
}
@NonNull
@Override
public Fragment getItem(int position) {
int tabId = tabs.get(position);
Fragment fragment;
Bundle args = new Bundle();
switch(tabId) {
case TAB_SETTINGS:
fragment = new ProfileSettingsFragment();
args.putInt(ProfileSettingsFragment.CHAT_ID_EXTRA, (chatId==0&&!isGlobalProfile())? -1 : chatId);
args.putInt(ProfileSettingsFragment.CONTACT_ID_EXTRA, (contactId==0&&!isGlobalProfile())? -1 : contactId);
break;
case TAB_GALLERY:
fragment = new ProfileGalleryFragment();
args.putInt(ProfileGalleryFragment.CHAT_ID_EXTRA, (chatId==0&&!isGlobalProfile())? -1 : chatId);
break;
case TAB_AUDIO:
fragment = new ProfileDocumentsFragment();
args.putInt(ProfileDocumentsFragment.CHAT_ID_EXTRA, (chatId==0&&!isGlobalProfile())? -1 : chatId);
args.putBoolean(ProfileDocumentsFragment.SHOW_AUDIO_EXTRA, true);
break;
case TAB_WEBXDC:
fragment = new ProfileDocumentsFragment();
args.putInt(ProfileDocumentsFragment.CHAT_ID_EXTRA, (chatId==0&&!isGlobalProfile())? -1 : chatId);
args.putBoolean(ProfileDocumentsFragment.SHOW_WEBXDC_EXTRA, true);
break;
default:
fragment = new ProfileDocumentsFragment();
args.putInt(ProfileGalleryFragment.CHAT_ID_EXTRA, (chatId==0&&!isGlobalProfile())? -1 : chatId);
break;
}
fragment.setArguments(args);
return fragment;
}
@Override
public int getCount() {
return tabs.size();
}
@Override
public CharSequence getPageTitle(int position) {
int tabId = tabs.get(position);
switch(tabId) {
case TAB_SETTINGS:
if (chatIsDeviceTalk) {
return getString(R.string.profile);
} else if(isContactProfile()) {
if (dcContext.getContact(contactId).isBot()) {
return getString(R.string.bot);
} else {
return getString(R.string.tab_contact);
}
}
else if (chatIsBroadcast) {
return getString(R.string.broadcast_list);
}
else if (chatIsMailingList) {
return getString(R.string.mailing_list);
} else {
return getString(R.string.tab_group);
}
case TAB_GALLERY:
return getString(R.string.tab_gallery);
case TAB_AUDIO:
return getString(R.string.audio);
case TAB_DOCS:
return getString(R.string.files);
case TAB_WEBXDC:
return getString(R.string.webxdc_apps);
case TAB_LINKS:
return getString(R.string.tab_links);
case TAB_MAP:
return getString(R.string.tab_map);
default:
throw new AssertionError();
}
}
}
// handle events // handle events
// ========================================================================= // =========================================================================
@ -425,7 +234,6 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
int itemId = item.getItemId(); int itemId = item.getItemId();
if (itemId == android.R.id.home) { if (itemId == android.R.id.home) {
backPressed = true;
finish(); finish();
return true; return true;
} else if (itemId == R.id.menu_mute_notifications) { } else if (itemId == R.id.menu_mute_notifications) {
@ -503,14 +311,16 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
.show(); .show();
} }
private void onEnlargeAvatar() { public void onEnlargeAvatar() {
String profileImagePath; String profileImagePath;
String title; String title;
Uri profileImageUri; Uri profileImageUri;
boolean enlargeAvatar = true;
if(chatId!=0) { if(chatId!=0) {
DcChat dcChat = dcContext.getChat(chatId); DcChat dcChat = dcContext.getChat(chatId);
profileImagePath = dcChat.getProfileImage(); profileImagePath = dcChat.getProfileImage();
title = dcChat.getName(); title = dcChat.getName();
enlargeAvatar = dcChat.isEncrypted() && !dcChat.isSelfTalk() && !dcChat.isDeviceTalk();
} else { } else {
DcContact dcContact = dcContext.getContact(contactId); DcContact dcContact = dcContext.getContact(contactId);
profileImagePath = dcContact.getProfileImage(); profileImagePath = dcContact.getProfileImage();
@ -519,16 +329,19 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
File file = new File(profileImagePath); File file = new File(profileImagePath);
if (file.exists()) { if (enlargeAvatar && file.exists()) {
profileImageUri = Uri.fromFile(file); profileImageUri = Uri.fromFile(file);
String type = "image/" + profileImagePath.substring(profileImagePath.lastIndexOf(".") + 1); String type = "image/" + profileImagePath.substring(profileImagePath.lastIndexOf(".") + 1);
Intent intent = new Intent(this, MediaPreviewActivity.class); Intent intent = new Intent(this, MediaPreviewActivity.class);
intent.setDataAndType(profileImageUri, type); intent.setDataAndType(profileImageUri, type);
intent.putExtra(MediaPreviewActivity.ACTIVITY_TITLE_EXTRA, title); intent.putExtra(MediaPreviewActivity.ACTIVITY_TITLE_EXTRA, title);
intent.putExtra(MediaPreviewActivity.EDIT_AVATAR_CHAT_ID, chatIsMultiUser ? chatId : 0); // shows edit-button, might be 0 for a contact-profile intent.putExtra( // show edit-button, if the user is allowed to edit the name/avatar
MediaPreviewActivity.EDIT_AVATAR_CHAT_ID,
(chatIsMultiUser && !chatIsInBroadcast && !chatIsMailingList) ? chatId : 0
);
startActivity(intent); startActivity(intent);
} else { } else if (chatIsMultiUser){
onEditName(); onEditName();
} }
} }
@ -577,7 +390,12 @@ public class ProfileActivity extends PassphraseRequiredActionBarActivity
private void onShare() { private void onShare() {
Intent composeIntent = new Intent(); Intent composeIntent = new Intent();
RelayUtil.setSharedContactId(composeIntent, contactId); DcContact dcContact = dcContext.getContact(contactId);
if (dcContact.isKeyContact()) {
RelayUtil.setSharedContactId(composeIntent, contactId);
} else {
RelayUtil.setSharedText(composeIntent, dcContact.getAddr());
}
ConversationListRelayingActivity.start(this, composeIntent); ConversationListRelayingActivity.start(this, composeIntent);
} }

View file

@ -0,0 +1,379 @@
package org.thoughtcrime.securesms;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;
import com.b44t.messenger.DcChat;
import com.b44t.messenger.DcChatlist;
import com.b44t.messenger.DcContact;
import com.b44t.messenger.DcContext;
import com.b44t.messenger.DcLot;
import com.b44t.messenger.DcMsg;
import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.contacts.ContactSelectionListItem;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.Util;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public class ProfileAdapter extends RecyclerView.Adapter
{
public static final int ITEM_AVATAR = 10;
public static final int ITEM_DIVIDER = 20;
public static final int ITEM_SIGNATURE = 25;
public static final int ITEM_ALL_MEDIA_BUTTON = 30;
public static final int ITEM_SEND_MESSAGE_BUTTON = 35;
public static final int ITEM_LAST_SEEN = 40;
public static final int ITEM_INTRODUCED_BY = 45;
public static final int ITEM_ADDRESS = 50;
public static final int ITEM_HEADER = 53;
public static final int ITEM_MEMBERS = 55;
public static final int ITEM_SHARED_CHATS = 60;
private final @NonNull Context context;
private final @NonNull Fragment fragment;
private final @NonNull DcContext dcContext;
private @Nullable DcChat dcChat;
private @Nullable DcContact dcContact;
private final @NonNull ArrayList<ItemData> itemData = new ArrayList<>();
private DcChatlist itemDataSharedChats;
private String itemDataStatusText;
private boolean isOutBroadcast;
private int memberCount;
private final Set<Integer> selectedMembers;
private final LayoutInflater layoutInflater;
private final ItemClickListener clickListener;
private final GlideRequests glideRequests;
static class ItemData {
final int viewType;
final int contactId;
final int chatlistIndex;
final String label;
final int icon;
ItemData(int viewType, String label, int icon) {
this(viewType, 0, 0, label, icon);
}
ItemData(int viewType, int contactId, int chatlistIndex) {
this(viewType, contactId, chatlistIndex, null, 0);
}
private ItemData(int viewType, int contactId, int chatlistIndex, @Nullable String label, int icon) {
this.viewType = viewType;
this.contactId = contactId;
this.chatlistIndex = chatlistIndex;
this.label = label;
this.icon = icon;
}
};
public ProfileAdapter(@NonNull Fragment fragment,
@NonNull GlideRequests glideRequests,
@Nullable ItemClickListener clickListener)
{
super();
this.fragment = fragment;
this.context = fragment.requireContext();
this.glideRequests = glideRequests;
this.clickListener = clickListener;
this.dcContext = DcHelper.getContext(context);
this.layoutInflater = LayoutInflater.from(context);
this.selectedMembers= new HashSet<>();
}
@Override
public int getItemCount() {
return itemData.size();
}
@Override
public int getItemViewType(int i) {
return itemData.get(i).viewType;
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View itemView) {
super(itemView);
}
}
@NonNull
@Override
public ProfileAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == ITEM_HEADER) {
final View item = LayoutInflater.from(context).inflate(R.layout.contact_selection_list_divider, parent, false);
return new ViewHolder(item);
} else if (viewType == ITEM_DIVIDER) {
final View item = LayoutInflater.from(context).inflate(R.layout.profile_divider, parent, false);
return new ViewHolder(item);
} else if (viewType == ITEM_MEMBERS) {
final ContactSelectionListItem item = (ContactSelectionListItem)layoutInflater.inflate(R.layout.contact_selection_list_item, parent, false);
return new ViewHolder(item);
} else if (viewType == ITEM_SHARED_CHATS) {
final ConversationListItem item = (ConversationListItem)layoutInflater.inflate(R.layout.conversation_list_item_view, parent, false);
item.hideItemDivider();
return new ViewHolder(item);
} else if (viewType == ITEM_SIGNATURE) {
final ProfileStatusItem item = (ProfileStatusItem)layoutInflater.inflate(R.layout.profile_status_item, parent, false);
return new ViewHolder(item);
} else if (viewType == ITEM_AVATAR) {
final ProfileAvatarItem item = (ProfileAvatarItem)layoutInflater.inflate(R.layout.profile_avatar_item, parent, false);
return new ViewHolder(item);
} else if (viewType == ITEM_ALL_MEDIA_BUTTON || viewType == ITEM_SEND_MESSAGE_BUTTON) {
final ProfileTextItem item = (ProfileTextItem)layoutInflater.inflate(R.layout.profile_text_item_button, parent, false);
return new ViewHolder(item);
} else if (viewType == ITEM_LAST_SEEN || viewType == ITEM_INTRODUCED_BY || viewType == ITEM_ADDRESS) {
final ProfileTextItem item = (ProfileTextItem)layoutInflater.inflate(R.layout.profile_text_item_small, parent, false);
return new ViewHolder(item);
} else {
final ProfileTextItem item = (ProfileTextItem)layoutInflater.inflate(R.layout.profile_text_item, parent, false);
return new ViewHolder(item);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
ViewHolder holder = (ViewHolder) viewHolder;
ItemData data = itemData.get(i);
if (holder.itemView instanceof ContactSelectionListItem) {
ContactSelectionListItem contactItem = (ContactSelectionListItem) holder.itemView;
int contactId = data.contactId;
DcContact dcContact = null;
String label = null;
String name;
String addr = null;
if (contactId == DcContact.DC_CONTACT_ID_ADD_MEMBER) {
if (isOutBroadcast) {
name = context.getString(R.string.add_recipients);
} else {
name = context.getString(R.string.group_add_members);
}
}
else if (contactId == DcContact.DC_CONTACT_ID_QR_INVITE) {
name = context.getString(R.string.qrshow_title);
}
else {
dcContact = dcContext.getContact(contactId);
name = dcContact.getDisplayName();
addr = dcContact.getAddr();
}
contactItem.unbind(glideRequests);
contactItem.set(glideRequests, contactId, dcContact, name, addr, label, false, true);
contactItem.setSelected(selectedMembers.contains(contactId));
contactItem.setOnClickListener(view -> clickListener.onMemberClicked(contactId));
contactItem.setOnLongClickListener(view -> {clickListener.onMemberLongClicked(contactId); return true;});
}
else if (holder.itemView instanceof ConversationListItem) {
ConversationListItem conversationListItem = (ConversationListItem) holder.itemView;
int chatlistIndex = data.chatlistIndex;
int chatId = itemDataSharedChats.getChatId(chatlistIndex);
DcChat chat = dcContext.getChat(chatId);
DcLot summary = itemDataSharedChats.getSummary(chatlistIndex, chat);
conversationListItem.bind(DcHelper.getThreadRecord(context, summary, chat),
itemDataSharedChats.getMsgId(chatlistIndex), summary, glideRequests,
Collections.emptySet(), false);
conversationListItem.setOnClickListener(view -> clickListener.onSharedChatClicked(chatId));
}
else if(holder.itemView instanceof ProfileStatusItem) {
ProfileStatusItem item = (ProfileStatusItem) holder.itemView;
item.setOnLongClickListener(view -> {clickListener.onStatusLongClicked(); return true;});
item.set(data.label);
}
else if(holder.itemView instanceof ProfileAvatarItem) {
ProfileAvatarItem item = (ProfileAvatarItem) holder.itemView;
item.setAvatarClickListener(view -> clickListener.onAvatarClicked());
item.set(glideRequests, dcChat, dcContact, memberCount);
}
else if(holder.itemView instanceof ProfileTextItem) {
ProfileTextItem item = (ProfileTextItem) holder.itemView;
item.setOnClickListener(view -> clickListener.onSettingsClicked(data.viewType));
boolean tintIcon = data.viewType != ITEM_INTRODUCED_BY;
item.set(data.label, data.icon, tintIcon);
if (data.viewType == ITEM_LAST_SEEN || data.viewType == ITEM_ADDRESS) {
int padding = (int)((float)context.getResources().getDimensionPixelSize(R.dimen.contact_list_normal_padding) * 1.2);
item.setPadding(item.getPaddingLeft(), item.getPaddingTop(), item.getPaddingRight(), padding);
if (data.viewType == ITEM_ADDRESS) {
fragment.registerForContextMenu(item);
}
} else if (data.viewType == ITEM_INTRODUCED_BY) {
int padding = context.getResources().getDimensionPixelSize(R.dimen.contact_list_normal_padding);
item.setPadding(item.getPaddingLeft(), padding, item.getPaddingRight(), item.getPaddingBottom());
} else if (data.viewType == ITEM_ALL_MEDIA_BUTTON && dcChat != null) {
Util.runOnAnyBackgroundThread(() -> {
String c = getAllMediaCountString(dcChat.getId());
Util.runOnMain(() -> {
item.setValue(c);
});
});
}
} else if (data.viewType == ITEM_HEADER) {
TextView textView = holder.itemView.findViewById(R.id.label);
textView.setText(data.label);
}
}
public interface ItemClickListener {
void onSettingsClicked(int settingsId);
void onStatusLongClicked();
void onSharedChatClicked(int chatId);
void onMemberClicked(int contactId);
void onMemberLongClicked(int contactId);
void onAvatarClicked();
}
public void toggleMemberSelection(int contactId) {
if (!selectedMembers.remove(contactId)) {
selectedMembers.add(contactId);
}
notifyDataSetChanged();
}
@NonNull
public Collection<Integer> getSelectedMembers() {
return new HashSet<>(selectedMembers);
}
public int getSelectedMembersCount() {
return selectedMembers.size();
}
@NonNull
public String getStatusText() {
return itemDataStatusText;
}
public void clearSelection() {
selectedMembers.clear();
notifyDataSetChanged();
}
public void changeData(@Nullable int[] memberList, @Nullable DcContact dcContact, @Nullable DcChatlist sharedChats, @Nullable DcChat dcChat) {
this.dcChat = dcChat;
this.dcContact = dcContact;
itemData.clear();
itemDataSharedChats = sharedChats;
itemDataStatusText = "";
isOutBroadcast = dcChat != null && dcChat.isOutBroadcast();
boolean isMailingList = dcChat != null && dcChat.isMailingList();
boolean isSelfTalk = dcChat != null && dcChat.isSelfTalk();
boolean isDeviceTalk = dcChat != null && dcChat.isDeviceTalk();
memberCount = memberList!=null ? memberList.length : 0;
itemData.add(new ItemData(ITEM_AVATAR, null, 0));
if (isSelfTalk || dcContact != null && !dcContact.getStatus().isEmpty()) {
itemDataStatusText = isSelfTalk ? context.getString(R.string.saved_messages_explain) : dcContact.getStatus();
itemData.add(new ItemData(ITEM_SIGNATURE, itemDataStatusText, 0));
} else {
itemData.add(new ItemData(ITEM_DIVIDER, null, 0));
}
itemData.add(new ItemData(ITEM_ALL_MEDIA_BUTTON, context.getString(R.string.apps_and_media), R.drawable.ic_apps_24));
if (dcContact != null && !isDeviceTalk && !isSelfTalk) {
itemData.add(new ItemData(ITEM_SEND_MESSAGE_BUTTON, context.getString(R.string.send_message), R.drawable.ic_send_sms_white_24dp));
}
if (dcContact != null && !isDeviceTalk && !isSelfTalk) {
long lastSeenTimestamp = dcContact.getLastSeen();
String lastSeenTxt;
if (lastSeenTimestamp == 0) {
lastSeenTxt = context.getString(R.string.last_seen_unknown);
}
else {
lastSeenTxt = context.getString(R.string.last_seen_at, DateUtils.getExtendedTimeSpanString(context, lastSeenTimestamp));
}
itemData.add(new ItemData(ITEM_LAST_SEEN, lastSeenTxt, 0));
}
if (memberList!=null && !isMailingList) {
itemData.add(new ItemData(ITEM_DIVIDER, null, 0));
if (dcChat != null) {
if (dcChat.canSend() && dcChat.isEncrypted()) {
itemData.add(new ItemData(ITEM_MEMBERS, DcContact.DC_CONTACT_ID_ADD_MEMBER, 0));
if (!isOutBroadcast) {
itemData.add(new ItemData(ITEM_MEMBERS, DcContact.DC_CONTACT_ID_QR_INVITE, 0));
}
}
}
for (int value : memberList) {
itemData.add(new ItemData(ITEM_MEMBERS, value, 0));
}
}
if (!isDeviceTalk && sharedChats != null && sharedChats.getCnt() > 0) {
itemData.add(new ItemData(ITEM_HEADER, context.getString(R.string.profile_shared_chats), 0));
for (int i = 0; i < sharedChats.getCnt(); i++) {
itemData.add(new ItemData(ITEM_SHARED_CHATS, 0, i));
}
}
if (dcContact != null && !isDeviceTalk && !isSelfTalk) {
int verifierId = dcContact.getVerifierId();
if (verifierId != 0) {
String introducedBy;
if (verifierId == DcContact.DC_CONTACT_ID_SELF) {
introducedBy = context.getString(R.string.verified_by_you);
} else {
introducedBy = context.getString(R.string.verified_by, dcContext.getContact(verifierId).getDisplayName());
}
itemData.add(new ItemData(ITEM_INTRODUCED_BY, introducedBy, dcContact.isVerified()? R.drawable.ic_verified : 0));
} else if (dcContact.isVerified()) {
String introducedBy = context.getString(R.string.verified_by_unknown);
itemData.add(new ItemData(ITEM_INTRODUCED_BY, introducedBy, R.drawable.ic_verified));
}
if (dcContact != null) {
itemData.add(new ItemData(ITEM_ADDRESS, dcContact.getAddr(), 0));
}
}
notifyDataSetChanged();
}
public int ALL_MEDIA_COUNT_MAX = 500;
public int getAllMediaCount(int chatId) {
int c = dcContext.getChatMedia(chatId, DcMsg.DC_MSG_IMAGE, DcMsg.DC_MSG_GIF, DcMsg.DC_MSG_VIDEO).length;
if (c < ALL_MEDIA_COUNT_MAX) {
c += dcContext.getChatMedia(chatId, DcMsg.DC_MSG_AUDIO, DcMsg.DC_MSG_VOICE, 0).length;
}
if (c < ALL_MEDIA_COUNT_MAX) {
c += dcContext.getChatMedia(chatId, DcMsg.DC_MSG_FILE, DcMsg.DC_MSG_WEBXDC, 0).length;
}
return c;
}
public String getAllMediaCountString(int chatId) {
final int c = getAllMediaCount(chatId);
if (c == 0) {
return context.getString(R.string.none);
} else if (c >= ALL_MEDIA_COUNT_MAX) {
return ALL_MEDIA_COUNT_MAX + "+";
} else {
return c + "";
}
}
}

View file

@ -0,0 +1,108 @@
package org.thoughtcrime.securesms;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.b44t.messenger.DcChat;
import com.b44t.messenger.DcContact;
import org.thoughtcrime.securesms.components.AvatarView;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.RecipientModifiedListener;
import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil;
public class ProfileAvatarItem extends LinearLayout implements RecipientModifiedListener {
private AvatarView avatarView;
private TextView nameView;
private TextView subtitleView;
private Recipient recipient;
private GlideRequests glideRequests;
public ProfileAvatarItem(Context context) {
super(context);
}
public ProfileAvatarItem(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
avatarView = findViewById(R.id.avatar);
nameView = findViewById(R.id.name);
subtitleView = findViewById(R.id.subtitle);
ViewUtil.setTextViewGravityStart(nameView, getContext());
}
public void set(@NonNull GlideRequests glideRequests, @Nullable DcChat dcChat, @Nullable DcContact dcContact, int memberCount) {
this.glideRequests = glideRequests;
String name = "";
String subtitle = null;
if (dcChat != null) {
recipient = new Recipient(getContext(), dcChat);
name = dcChat.getName();
if (dcChat.isMailingList()) {
subtitle = dcChat.getMailinglistAddr();
} else if (dcChat.isOutBroadcast()) {
subtitle = getContext().getResources().getQuantityString(R.plurals.n_recipients, memberCount, memberCount);
} else if (dcChat.getType() == DcChat.DC_CHAT_TYPE_GROUP) {
subtitle = getContext().getResources().getQuantityString(R.plurals.n_members, memberCount, memberCount);
}
} else if (dcContact != null) {
recipient = new Recipient(getContext(), dcContact);
name = dcContact.getDisplayName();
}
recipient.addListener(this);
avatarView.setAvatar(glideRequests, recipient, false);
avatarView.setSeenRecently(dcContact != null && dcContact.wasSeenRecently());
nameView.setText(name);
if (subtitle != null) {
subtitleView.setVisibility(View.VISIBLE);
subtitleView.setText(subtitle);
} else {
subtitleView.setVisibility(View.GONE);
}
}
public void setAvatarClickListener(OnClickListener listener) {
avatarView.setAvatarClickListener(listener);
}
public void unbind(GlideRequests glideRequests) {
if (recipient != null) {
recipient.removeListener(this);
recipient = null;
}
avatarView.clear(glideRequests);
}
@Override
public void onModified(final Recipient recipient) {
if (this.recipient == recipient) {
Util.runOnMain(() -> {
avatarView.setAvatar(glideRequests, recipient, false);
DcContact contact = recipient.getDcContact();
avatarView.setSeenRecently(contact != null && contact.wasSeenRecently());
nameView.setText(recipient.toShortString());
});
}
}
}

View file

@ -3,14 +3,12 @@ package org.thoughtcrime.securesms;
import android.app.Activity; import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle; import android.os.Bundle;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.Window;
import android.widget.Toast; import android.widget.Toast;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
@ -31,7 +29,6 @@ import org.thoughtcrime.securesms.connect.DcEventCenter;
import org.thoughtcrime.securesms.connect.DcHelper; import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.mms.GlideApp; import org.thoughtcrime.securesms.mms.GlideApp;
import org.thoughtcrime.securesms.qr.QrShowActivity; import org.thoughtcrime.securesms.qr.QrShowActivity;
import org.thoughtcrime.securesms.util.StickyHeaderDecoration;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.ViewUtil;
@ -39,16 +36,15 @@ import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
public class ProfileSettingsFragment extends Fragment public class ProfileFragment extends Fragment
implements ProfileSettingsAdapter.ItemClickListener, DcEventCenter.DcEventDelegate { implements ProfileAdapter.ItemClickListener, DcEventCenter.DcEventDelegate {
public static final String CHAT_ID_EXTRA = "chat_id"; public static final String CHAT_ID_EXTRA = "chat_id";
public static final String CONTACT_ID_EXTRA = "contact_id"; public static final String CONTACT_ID_EXTRA = "contact_id";
private static final int REQUEST_CODE_PICK_CONTACT = 2; private static final int REQUEST_CODE_PICK_CONTACT = 2;
private StickyHeaderDecoration listDecoration; private ProfileAdapter adapter;
private ProfileSettingsAdapter adapter;
private ActionMode actionMode; private ActionMode actionMode;
private final ActionModeCallback actionModeCallback = new ActionModeCallback(); private final ActionModeCallback actionModeCallback = new ActionModeCallback();
@ -57,10 +53,6 @@ public class ProfileSettingsFragment extends Fragment
protected int chatId; protected int chatId;
private int contactId; private int contactId;
protected ActionMode getActionMode() {
return actionMode;
}
@Override @Override
public void onCreate(Bundle bundle) { public void onCreate(Bundle bundle) {
super.onCreate(bundle); super.onCreate(bundle);
@ -72,14 +64,12 @@ public class ProfileSettingsFragment extends Fragment
@Override @Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.profile_settings_fragment, container, false); View view = inflater.inflate(R.layout.profile_fragment, container, false);
adapter = new ProfileSettingsAdapter(requireContext(), GlideApp.with(this), this); adapter = new ProfileAdapter(this, GlideApp.with(this), this);
RecyclerView list = ViewUtil.findById(view, R.id.recycler_view); RecyclerView list = ViewUtil.findById(view, R.id.recycler_view);
list.setAdapter(adapter); list.setAdapter(adapter);
list.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false)); list.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false));
listDecoration = new StickyHeaderDecoration(adapter, false, true);
list.addItemDecoration(listDecoration);
update(); update();
@ -97,12 +87,6 @@ public class ProfileSettingsFragment extends Fragment
super.onDestroyView(); super.onDestroyView();
} }
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
listDecoration.onConfigurationChanged(newConfig);
}
@Override @Override
public void handleEvent(@NonNull DcEvent event) { public void handleEvent(@NonNull DcEvent event) {
update(); update();
@ -121,12 +105,11 @@ public class ProfileSettingsFragment extends Fragment
if(dcChat!=null && dcChat.isMultiUser()) { if(dcChat!=null && dcChat.isMultiUser()) {
memberList = dcContext.getChatContacts(chatId); memberList = dcContext.getChatContacts(chatId);
} }
else if(contactId>0) { else if(contactId>0 && contactId!=DcContact.DC_CONTACT_ID_SELF) {
sharedChats = dcContext.getChatlist(0, null, contactId); sharedChats = dcContext.getChatlist(0, null, contactId);
} }
adapter.changeData(memberList, dcContact, sharedChats, dcChat); adapter.changeData(memberList, dcContact, sharedChats, dcChat);
listDecoration.invalidateLayouts();
} }
@ -136,10 +119,17 @@ public class ProfileSettingsFragment extends Fragment
@Override @Override
public void onSettingsClicked(int settingsId) { public void onSettingsClicked(int settingsId) {
switch(settingsId) { switch(settingsId) {
case ProfileSettingsAdapter.INFO_SEND_MESSAGE_BUTTON: case ProfileAdapter.ITEM_ALL_MEDIA_BUTTON:
if (chatId > 0) {
Intent intent = new Intent(getActivity(), AllMediaActivity.class);
intent.putExtra(AllMediaActivity.CHAT_ID_EXTRA, chatId);
startActivity(intent);
}
break;
case ProfileAdapter.ITEM_SEND_MESSAGE_BUTTON:
onSendMessage(); onSendMessage();
break; break;
case ProfileSettingsAdapter.INFO_VERIFIED: case ProfileAdapter.ITEM_INTRODUCED_BY:
onVerifiedByClicked(); onVerifiedByClicked();
break; break;
} }
@ -166,7 +156,7 @@ public class ProfileSettingsFragment extends Fragment
if (contactId>DcContact.DC_CONTACT_ID_LAST_SPECIAL || contactId==DcContact.DC_CONTACT_ID_SELF) { if (contactId>DcContact.DC_CONTACT_ID_LAST_SPECIAL || contactId==DcContact.DC_CONTACT_ID_SELF) {
if (actionMode==null) { if (actionMode==null) {
DcChat dcChat = dcContext.getChat(chatId); DcChat dcChat = dcContext.getChat(chatId);
if (dcChat.canSend()) { if (dcChat.canSend() && dcChat.isEncrypted()) {
adapter.toggleMemberSelection(contactId); adapter.toggleMemberSelection(contactId);
actionMode = ((AppCompatActivity) requireActivity()).startSupportActionMode(actionModeCallback); actionMode = ((AppCompatActivity) requireActivity()).startSupportActionMode(actionModeCallback);
} }
@ -202,6 +192,12 @@ public class ProfileSettingsFragment extends Fragment
} }
} }
@Override
public void onAvatarClicked() {
ProfileActivity activity = (ProfileActivity)getActivity();
activity.onEnlargeAvatar();
}
public void onAddMember() { public void onAddMember() {
DcChat dcChat = dcContext.getChat(chatId); DcChat dcChat = dcContext.getChat(chatId);
Intent intent = new Intent(getContext(), ContactMultiSelectionActivity.class); Intent intent = new Intent(getContext(), ContactMultiSelectionActivity.class);
@ -251,8 +247,6 @@ public class ProfileSettingsFragment extends Fragment
private class ActionModeCallback implements ActionMode.Callback { private class ActionModeCallback implements ActionMode.Callback {
private int originalStatusBarColor;
@Override @Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) { public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.getMenuInflater().inflate(R.menu.profile_context, menu); mode.getMenuInflater().inflate(R.menu.profile_context, menu);
@ -265,9 +259,6 @@ public class ProfileSettingsFragment extends Fragment
menu.findItem(R.id.menu_select_all).setVisible(false); menu.findItem(R.id.menu_select_all).setVisible(false);
mode.setTitle("1"); mode.setTitle("1");
Window window = requireActivity().getWindow();
originalStatusBarColor = window.getStatusBarColor();
window.setStatusBarColor(getResources().getColor(R.color.action_mode_status_bar));
return true; return true;
} }
@ -296,7 +287,7 @@ public class ProfileSettingsFragment extends Fragment
mode.finish(); mode.finish();
}) })
.setNegativeButton(android.R.string.cancel, null) .setNegativeButton(android.R.string.cancel, null)
.setMessage(getString(dcChat.isBroadcast() ? R.string.ask_remove_from_broadcast : R.string.ask_remove_members, readableToDelList)) .setMessage(getString(dcChat.isOutBroadcast() ? R.string.ask_remove_from_channel : R.string.ask_remove_members, readableToDelList))
.show(); .show();
Util.redPositiveButton(dialog); Util.redPositiveButton(dialog);
return true; return true;
@ -308,7 +299,6 @@ public class ProfileSettingsFragment extends Fragment
public void onDestroyActionMode(ActionMode mode) { public void onDestroyActionMode(ActionMode mode) {
actionMode = null; actionMode = null;
adapter.clearSelection(); adapter.clearSelection();
requireActivity().getWindow().setStatusBarColor(originalStatusBarColor);
} }
} }

View file

@ -1,352 +0,0 @@
package org.thoughtcrime.securesms;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
import com.b44t.messenger.DcChat;
import com.b44t.messenger.DcChatlist;
import com.b44t.messenger.DcContact;
import com.b44t.messenger.DcContext;
import com.b44t.messenger.DcLot;
import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.contacts.ContactSelectionListItem;
import org.thoughtcrime.securesms.mms.GlideRequests;
import org.thoughtcrime.securesms.util.DateUtils;
import org.thoughtcrime.securesms.util.StickyHeaderDecoration.StickyHeaderAdapter;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public class ProfileSettingsAdapter extends RecyclerView.Adapter
implements StickyHeaderAdapter<ProfileSettingsAdapter.HeaderViewHolder>
{
public static final int INFO_VERIFIED = 118;
public static final int INFO_LAST_SEEN = 119;
public static final int INFO_SEND_MESSAGE_BUTTON = 120;
private final @NonNull Context context;
private final @NonNull DcContext dcContext;
private final @NonNull ArrayList<ItemData> itemData = new ArrayList<>();
private int itemDataMemberCount;
private DcChatlist itemDataSharedChats;
private String itemDataStatusText;
private boolean isMailingList;
private boolean isBroadcast;
private final Set<Integer> selectedMembers;
private final LayoutInflater layoutInflater;
private final ItemClickListener clickListener;
private final GlideRequests glideRequests;
static class ItemData {
static final int CATEGORY_INFO = 1;
static final int CATEGORY_SIGNATURE = 2;
static final int CATEGORY_MEMBERS = 3;
static final int CATEGORY_SHARED_CHATS = 4;
final int type;
final int contactId;
final int chatlistIndex;
final int settingsId;
final String label;
final int labelColor;
final int iconLeft;
ItemData(int type, int settingsId, String label, int labelColor, int iconLeft) {
this(type, 0, 0, settingsId, label, labelColor, iconLeft);
}
ItemData(int type, int contactId, int chatlistIndex) {
this(type, contactId, chatlistIndex, 0, null, 0, 0);
}
ItemData(int type, int contactId, int chatlistIndex, int settingsId, @Nullable String label, int labelColor, int iconLeft) {
this.type = type;
this.contactId = contactId;
this.chatlistIndex = chatlistIndex;
this.settingsId = settingsId;
this.label = label;
this.labelColor = labelColor;
this.iconLeft = iconLeft;
}
};
public ProfileSettingsAdapter(@NonNull Context context,
@NonNull GlideRequests glideRequests,
@Nullable ItemClickListener clickListener)
{
super();
this.context = context;
this.glideRequests = glideRequests;
this.clickListener = clickListener;
this.dcContext = DcHelper.getContext(context);
this.layoutInflater = LayoutInflater.from(context);
this.selectedMembers= new HashSet<>();
}
@Override
public int getItemCount() {
return itemData.size();
}
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View itemView) {
super(itemView);
}
}
static class HeaderViewHolder extends RecyclerView.ViewHolder {
final TextView textView;
HeaderViewHolder(View itemView) {
super(itemView);
textView = itemView.findViewById(R.id.label);
}
}
@NonNull
@Override
public ProfileSettingsAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if (viewType == ItemData.CATEGORY_MEMBERS) {
final ContactSelectionListItem item = (ContactSelectionListItem)layoutInflater.inflate(R.layout.contact_selection_list_item, parent, false);
item.setNoHeaderPadding();
return new ViewHolder(item);
}
else if (viewType == ItemData.CATEGORY_SHARED_CHATS) {
final ConversationListItem item = (ConversationListItem)layoutInflater.inflate(R.layout.conversation_list_item_view, parent, false);
item.hideItemDivider();
return new ViewHolder(item);
}
else if (viewType == ItemData.CATEGORY_SIGNATURE) {
final ProfileStatusItem item = (ProfileStatusItem)layoutInflater.inflate(R.layout.profile_status_item, parent, false);
return new ViewHolder(item);
}
else {
final ProfileSettingsItem item = (ProfileSettingsItem)layoutInflater.inflate(R.layout.profile_settings_item, parent, false);
return new ViewHolder(item);
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
ViewHolder holder = (ViewHolder) viewHolder;
if (holder.itemView instanceof ContactSelectionListItem) {
ContactSelectionListItem contactItem = (ContactSelectionListItem) holder.itemView;
int contactId = itemData.get(i).contactId;
DcContact dcContact = null;
String label = null;
String name;
String addr = null;
if (contactId == DcContact.DC_CONTACT_ID_ADD_MEMBER) {
if (isBroadcast) {
name = context.getString(R.string.add_recipients);
} else {
name = context.getString(R.string.group_add_members);
}
}
else if (contactId == DcContact.DC_CONTACT_ID_QR_INVITE) {
name = context.getString(R.string.qrshow_title);
}
else {
dcContact = dcContext.getContact(contactId);
name = dcContact.getDisplayName();
addr = dcContact.getAddr();
}
contactItem.unbind(glideRequests);
contactItem.set(glideRequests, contactId, dcContact, name, addr, label, false, true);
contactItem.setSelected(selectedMembers.contains(contactId));
contactItem.setOnClickListener(view -> clickListener.onMemberClicked(contactId));
contactItem.setOnLongClickListener(view -> {clickListener.onMemberLongClicked(contactId); return true;});
}
else if (holder.itemView instanceof ConversationListItem) {
ConversationListItem conversationListItem = (ConversationListItem) holder.itemView;
int chatlistIndex = itemData.get(i).chatlistIndex;
int chatId = itemDataSharedChats.getChatId(chatlistIndex);
DcChat chat = dcContext.getChat(chatId);
DcLot summary = itemDataSharedChats.getSummary(chatlistIndex, chat);
conversationListItem.bind(DcHelper.getThreadRecord(context, summary, chat),
itemDataSharedChats.getMsgId(chatlistIndex), summary, glideRequests,
Collections.emptySet(), false);
conversationListItem.setOnClickListener(view -> clickListener.onSharedChatClicked(chatId));
}
else if(holder.itemView instanceof ProfileStatusItem) {
ProfileStatusItem item = (ProfileStatusItem) holder.itemView;
item.setOnLongClickListener(view -> {clickListener.onStatusLongClicked(); return true;});
item.set(itemData.get(i).label);
}
else if(holder.itemView instanceof ProfileSettingsItem) {
int settingsId = itemData.get(i).settingsId;
ProfileSettingsItem profileSettingsItem = (ProfileSettingsItem) holder.itemView;
profileSettingsItem.setOnClickListener(view -> clickListener.onSettingsClicked(settingsId));
profileSettingsItem.set(itemData.get(i).label, itemData.get(i).labelColor, itemData.get(i).iconLeft);
}
}
@Override
public int getItemViewType(int i) {
return itemData.get(i).type;
}
public interface ItemClickListener {
void onSettingsClicked(int settingsId);
void onStatusLongClicked();
void onSharedChatClicked(int chatId);
void onMemberClicked(int contactId);
void onMemberLongClicked(int contactId);
}
@Override
public long getHeaderId(int position) {
return getItemViewType(position);
}
@Override
public HeaderViewHolder onCreateHeaderViewHolder(ViewGroup parent) {
return new HeaderViewHolder(LayoutInflater.from(context).inflate(R.layout.contact_selection_list_divider, parent, false));
}
@Override
public void onBindHeaderViewHolder(HeaderViewHolder viewHolder, int position) {
String txt = "";
switch(getItemViewType(position)) {
case ItemData.CATEGORY_MEMBERS:
if (isMailingList) {
txt = context.getString(R.string.contacts_headline);
} else if (isBroadcast) {
txt = context.getResources().getQuantityString(R.plurals.n_recipients, (int) itemDataMemberCount, (int) itemDataMemberCount);
} else {
txt = context.getResources().getQuantityString(R.plurals.n_members, (int) itemDataMemberCount, (int) itemDataMemberCount);
}
break;
case ItemData.CATEGORY_SHARED_CHATS:
txt = context.getString(R.string.profile_shared_chats);
break;
case ItemData.CATEGORY_INFO:
txt = context.getString(R.string.info);
break;
case ItemData.CATEGORY_SIGNATURE:
txt = context.getString(R.string.pref_default_status_label);
break;
default:
txt = context.getString(R.string.menu_settings);
break;
}
viewHolder.textView.setText(txt);
}
public void toggleMemberSelection(int contactId) {
if (!selectedMembers.remove(contactId)) {
selectedMembers.add(contactId);
}
notifyDataSetChanged();
}
@NonNull
public Collection<Integer> getSelectedMembers() {
return new HashSet<>(selectedMembers);
}
public int getSelectedMembersCount() {
return selectedMembers.size();
}
@NonNull
public String getStatusText() {
return itemDataStatusText;
}
public void clearSelection() {
selectedMembers.clear();
notifyDataSetChanged();
}
public void changeData(@Nullable int[] memberList, @Nullable DcContact dcContact, @Nullable DcChatlist sharedChats, @Nullable DcChat dcChat) {
itemData.clear();
itemDataMemberCount = 0;
itemDataSharedChats = null;
itemDataStatusText = "";
isMailingList = false;
isBroadcast = false;
if (memberList!=null) {
itemDataMemberCount = memberList.length;
if (dcChat != null) {
if (dcChat.isBroadcast()) {
isBroadcast = true;
}
if (dcChat.isMailingList()) {
isMailingList = true;
} else if (dcChat.canSend()) {
itemData.add(new ItemData(ItemData.CATEGORY_MEMBERS, DcContact.DC_CONTACT_ID_ADD_MEMBER, 0));
if (!isBroadcast) {
itemData.add(new ItemData(ItemData.CATEGORY_MEMBERS, DcContact.DC_CONTACT_ID_QR_INVITE, 0));
}
}
}
for (int value : memberList) {
itemData.add(new ItemData(ItemData.CATEGORY_MEMBERS, value, 0));
}
}
else if (sharedChats!=null && dcContact!=null) {
boolean chatIsDeviceTalk = dcChat != null && dcChat.isDeviceTalk();
if (!chatIsDeviceTalk) {
int verifierId = dcContact.getVerifierId();
if (verifierId != 0) {
String verifiedInfo;
if (verifierId == DcContact.DC_CONTACT_ID_SELF) {
verifiedInfo = context.getString(R.string.verified_by_you);
} else {
verifiedInfo = context.getString(R.string.verified_by, dcContext.getContact(verifierId).getDisplayName());
}
itemData.add(new ItemData(ItemData.CATEGORY_INFO, INFO_VERIFIED, verifiedInfo, 0, R.drawable.ic_verified));
}
long lastSeenTimestamp = dcContact.getLastSeen();
String lastSeenTxt;
if (lastSeenTimestamp == 0) {
lastSeenTxt = context.getString(R.string.last_seen_unknown);
}
else {
lastSeenTxt = context.getString(R.string.last_seen_at, DateUtils.getExtendedTimeSpanString(context, lastSeenTimestamp));
}
itemData.add(new ItemData(ItemData.CATEGORY_INFO, INFO_LAST_SEEN, lastSeenTxt, 0, 0));
itemData.add(new ItemData(ItemData.CATEGORY_INFO, INFO_SEND_MESSAGE_BUTTON, context.getString(R.string.send_message), R.color.delta_accent, 0));
}
itemDataStatusText = dcContact.getStatus();
if (!itemDataStatusText.isEmpty()) {
itemData.add(new ItemData(ItemData.CATEGORY_SIGNATURE, 0, itemDataStatusText, 0, 0));
}
itemDataSharedChats = sharedChats;
if (!chatIsDeviceTalk) {
int sharedChatsCnt = sharedChats.getCnt();
for (int i = 0; i < sharedChatsCnt; i++) {
itemData.add(new ItemData(ItemData.CATEGORY_SHARED_CHATS, 0, i));
}
}
}
notifyDataSetChanged();
}
}

View file

@ -1,41 +0,0 @@
package org.thoughtcrime.securesms;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.core.content.ContextCompat;
import org.thoughtcrime.securesms.util.ResUtil;
public class ProfileSettingsItem extends LinearLayout {
private TextView labelView;
public ProfileSettingsItem(Context context) {
super(context);
}
public ProfileSettingsItem(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
labelView = findViewById(R.id.label);
}
public void set(String label, int labelColor, int iconLeft) {
labelView.setText(label==null? "" : label);
labelView.setCompoundDrawablesWithIntrinsicBounds(iconLeft, 0,0,0);
// we need different color getters as `labelColor` is `R.color.name` while default is `R.attr.name`
if (labelColor != 0) {
labelView.setTextColor(ContextCompat.getColor(getContext(), labelColor));
} else {
labelView.setTextColor(ResUtil.getColor(getContext(), R.attr.emoji_text_color));
}
}
}

View file

@ -0,0 +1,59 @@
package org.thoughtcrime.securesms;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.DrawableCompat;
import org.thoughtcrime.securesms.util.ResUtil;
public class ProfileTextItem extends LinearLayout {
private TextView labelView;
private @Nullable TextView valueView;
public ProfileTextItem(Context context) {
super(context);
}
public ProfileTextItem(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
labelView = findViewById(R.id.label);
valueView = findViewById(R.id.value);
}
public void set(String label, int icon, boolean tint) {
labelView.setText(label);
if (icon != 0) {
Drawable orgDrawable = ContextCompat.getDrawable(getContext(), icon);
if (orgDrawable != null) {
Drawable drawable = orgDrawable.mutate(); // avoid global state modification and showing eg. app-icon tinted also elsewhere
drawable = DrawableCompat.wrap(drawable);
if (tint) {
DrawableCompat.setTint(drawable, getResources().getColor(R.color.delta_accent));
}
labelView.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
}
}
}
public void setValue(String value) {
if (valueView != null) {
valueView.setText(value);
valueView.setVisibility(View.VISIBLE);
}
}
}

View file

@ -135,6 +135,7 @@ public class RegistrationActivity extends BaseActionBarActivity implements DcEve
actionBar.setTitle(R.string.login_header); actionBar.setTitle(R.string.login_header);
actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.ic_close_white_24dp); actionBar.setHomeAsUpIndicator(R.drawable.ic_close_white_24dp);
actionBar.setElevation(0); // TODO: use custom toolbar instead
} }
emailInput.addTextChangedListener(new TextWatcher() { emailInput.addTextChangedListener(new TextWatcher() {

View file

@ -32,6 +32,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.ActionBar;
import androidx.appcompat.widget.Toolbar; import androidx.appcompat.widget.Toolbar;
import androidx.core.content.pm.ShortcutManagerCompat;
import com.b44t.messenger.DcContext; import com.b44t.messenger.DcContext;
@ -209,6 +210,16 @@ public class ShareActivity extends PassphraseRequiredActionBarActivity implement
int accId = intent.getIntExtra(EXTRA_ACC_ID, -1); int accId = intent.getIntExtra(EXTRA_ACC_ID, -1);
int chatId = intent.getIntExtra(EXTRA_CHAT_ID, -1); int chatId = intent.getIntExtra(EXTRA_CHAT_ID, -1);
// the intent coming from shortcuts in the share selector might not include the custom extras but the shortcut ID
String shortcutId = intent.getStringExtra(ShortcutManagerCompat.EXTRA_SHORTCUT_ID);
if ((chatId == -1 || accId == -1) && shortcutId != null && shortcutId.startsWith("chat-")) {
String[] args = shortcutId.split("-");
if (args.length == 3) {
accId = Integer.parseInt(args[1]);
chatId = Integer.parseInt(args[2]);
}
}
String[] extraEmail = getIntent().getStringArrayExtra(Intent.EXTRA_EMAIL); String[] extraEmail = getIntent().getStringArrayExtra(Intent.EXTRA_EMAIL);
/* /*
usually, external app will try to start "e-mail sharing" intent, providing it: usually, external app will try to start "e-mail sharing" intent, providing it:

View file

@ -55,6 +55,7 @@ public class WebViewActivity extends PassphraseRequiredActionBarActivity
ActionBar actionBar = getSupportActionBar(); ActionBar actionBar = getSupportActionBar();
if (actionBar != null) { if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setElevation(0); // TODO: use custom toolbar instead
} }
webView = findViewById(R.id.webview); webView = findViewById(R.id.webview);

View file

@ -48,6 +48,7 @@ public class WebxdcStoreActivity extends PassphraseRequiredActionBarActivity {
if (actionBar != null) { if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setTitle(R.string.webxdc_apps); actionBar.setTitle(R.string.webxdc_apps);
actionBar.setElevation(0); // TODO: use custom toolbar instead
} }
webView.setWebViewClient(new WebViewClient() { webView.setWebViewClient(new WebViewClient() {

View file

@ -96,6 +96,8 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen
intent.setAction(DC_REQUEST_ACCOUNT_DATA); intent.setAction(DC_REQUEST_ACCOUNT_DATA);
sendBroadcast(intent); sendBroadcast(intent);
} }
DcHelper.maybeShowMigrationError(this);
} }
protected void initializeActionBar() { protected void initializeActionBar() {
@ -105,6 +107,7 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen
boolean canGoBack = AccountManager.getInstance().canRollbackAccountCreation(this); boolean canGoBack = AccountManager.getInstance().canRollbackAccountCreation(this);
supportActionBar.setDisplayHomeAsUpEnabled(canGoBack); supportActionBar.setDisplayHomeAsUpEnabled(canGoBack);
getSupportActionBar().setTitle(canGoBack? R.string.add_account : R.string.welcome_desktop); getSupportActionBar().setTitle(canGoBack? R.string.add_account : R.string.welcome_desktop);
getSupportActionBar().setElevation(0); // TODO: use custom toolbar instead
} }
private void registerForEvents() { private void registerForEvents() {

View file

@ -41,6 +41,8 @@ import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.Util; import org.thoughtcrime.securesms.util.Util;
import org.thoughtcrime.securesms.util.ViewUtil; import org.thoughtcrime.securesms.util.ViewUtil;
import java.util.Arrays;
public class AccountSelectionListFragment extends DialogFragment implements DcEventCenter.DcEventDelegate public class AccountSelectionListFragment extends DialogFragment implements DcEventCenter.DcEventDelegate
{ {
private static final String TAG = AccountSelectionListFragment.class.getSimpleName(); private static final String TAG = AccountSelectionListFragment.class.getSimpleName();
@ -134,9 +136,35 @@ public class AccountSelectionListFragment extends DialogFragment implements DcEv
onToggleMute(accountId); onToggleMute(accountId);
} else if (itemId == R.id.menu_set_tag) { } else if (itemId == R.id.menu_set_tag) {
onSetTag(accountId); onSetTag(accountId);
} else if (itemId == R.id.menu_move_to_top) {
onMoveToTop(accountId);
} }
} }
private void onMoveToTop(int accountId) {
Activity activity = getActivity();
if (activity == null) return;
int[] accountIds = DcHelper.getAccounts(activity).getAll();
Integer[] ids = new Integer[accountIds.length];
ids[0] = accountId;
int j = 1;
for (int accId : accountIds) {
if (accId != accountId) {
ids[j++] = accId;
}
}
Rpc rpc = DcHelper.getRpc(activity);
try {
rpc.setAccountsOrder(Arrays.asList(ids));
} catch (RpcException e) {
Log.e(TAG, "Error calling rpc.setAccountsOrder()", e);
}
refreshData();
}
private void onSetTag(int accountId) { private void onSetTag(int accountId) {
Activity activity = getActivity(); Activity activity = getActivity();
if (activity == null) return; if (activity == null) return;

View file

@ -22,7 +22,7 @@ public class ConversationItemFooter extends LinearLayout {
private TextView dateView; private TextView dateView;
private TextView editedView; private TextView editedView;
private ImageView bookmarkIndicatorView; private ImageView bookmarkIndicatorView;
private ImageView secureIndicatorView; private ImageView emailIndicatorView;
private ImageView locationIndicatorView; private ImageView locationIndicatorView;
private DeliveryStatusView deliveryStatusView; private DeliveryStatusView deliveryStatusView;
private Integer textColor = null; private Integer textColor = null;
@ -48,7 +48,7 @@ public class ConversationItemFooter extends LinearLayout {
dateView = findViewById(R.id.footer_date); dateView = findViewById(R.id.footer_date);
editedView = findViewById(R.id.footer_edited); editedView = findViewById(R.id.footer_edited);
bookmarkIndicatorView = findViewById(R.id.footer_bookmark_indicator); bookmarkIndicatorView = findViewById(R.id.footer_bookmark_indicator);
secureIndicatorView = findViewById(R.id.footer_secure_indicator); emailIndicatorView = findViewById(R.id.footer_email_indicator);
locationIndicatorView = findViewById(R.id.footer_location_indicator); locationIndicatorView = findViewById(R.id.footer_location_indicator);
deliveryStatusView = new DeliveryStatusView(findViewById(R.id.delivery_indicator)); deliveryStatusView = new DeliveryStatusView(findViewById(R.id.delivery_indicator));
@ -65,7 +65,14 @@ public class ConversationItemFooter extends LinearLayout {
boolean bookmark = messageRecord.getOriginalMsgId() != 0 || messageRecord.getSavedMsgId() != 0; boolean bookmark = messageRecord.getOriginalMsgId() != 0 || messageRecord.getSavedMsgId() != 0;
bookmarkIndicatorView.setVisibility(bookmark ? View.VISIBLE : View.GONE); bookmarkIndicatorView.setVisibility(bookmark ? View.VISIBLE : View.GONE);
editedView.setVisibility(messageRecord.isEdited() ? View.VISIBLE : View.GONE); editedView.setVisibility(messageRecord.isEdited() ? View.VISIBLE : View.GONE);
secureIndicatorView.setVisibility(messageRecord.isSecure() ? View.VISIBLE : View.GONE);
int downloadState = messageRecord.getDownloadState();
if (messageRecord.isSecure() || downloadState == DcMsg.DC_DOWNLOAD_AVAILABLE || downloadState == DcMsg.DC_DOWNLOAD_FAILURE || downloadState == DcMsg.DC_DOWNLOAD_IN_PROGRESS) {
emailIndicatorView.setVisibility(View.GONE);
} else {
emailIndicatorView.setVisibility(View.VISIBLE);
}
locationIndicatorView.setVisibility(messageRecord.hasLocation() ? View.VISIBLE : View.GONE); locationIndicatorView.setVisibility(messageRecord.hasLocation() ? View.VISIBLE : View.GONE);
presentDeliveryStatus(messageRecord); presentDeliveryStatus(messageRecord);
} }
@ -74,7 +81,7 @@ public class ConversationItemFooter extends LinearLayout {
dateView.setTextColor(color); dateView.setTextColor(color);
editedView.setTextColor(color); editedView.setTextColor(color);
bookmarkIndicatorView.setColorFilter(color); bookmarkIndicatorView.setColorFilter(color);
secureIndicatorView.setColorFilter(color); emailIndicatorView.setColorFilter(color);
locationIndicatorView.setColorFilter(color); locationIndicatorView.setColorFilter(color);
deliveryStatusView.setTint(color); deliveryStatusView.setTint(color);
} }

View file

@ -16,7 +16,6 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.annimon.stream.Stream;
import com.b44t.messenger.DcContact; import com.b44t.messenger.DcContact;
import com.b44t.messenger.DcMsg; import com.b44t.messenger.DcMsg;
import com.b44t.messenger.rpc.RpcException; import com.b44t.messenger.rpc.RpcException;
@ -194,18 +193,17 @@ public class QuoteView extends FrameLayout implements RecipientForeverObserver {
} }
private void setQuoteAttachment(@NonNull GlideRequests glideRequests, @NonNull SlideDeck slideDeck) { private void setQuoteAttachment(@NonNull GlideRequests glideRequests, @NonNull SlideDeck slideDeck) {
List<Slide> thumbnailSlides = Stream.of(slideDeck.getSlides()).filter(s -> s.hasImage() || s.hasVideo() || s.hasSticker() || s.isWebxdcDocument() || s.isVcard()).limit(1).toList(); List<Slide> slides = slideDeck.getSlides();
List<Slide> audioSlides = Stream.of(slideDeck.getSlides()).filter(s -> s.hasAudio()).limit(1).toList(); Slide slide = slides.isEmpty()? null : slides.get(0);
List<Slide> documentSlides = Stream.of(attachments.getSlides()).filter(Slide::hasDocument).limit(1).toList();
attachmentVideoOverlayView.setVisibility(GONE); attachmentVideoOverlayView.setVisibility(GONE);
if (!thumbnailSlides.isEmpty() && thumbnailSlides.get(0).getUri() != null) { if (slide != null && slide.hasQuoteThumbnail()) {
thumbnailView.setVisibility(VISIBLE); thumbnailView.setVisibility(VISIBLE);
attachmentContainerView.setVisibility(GONE); attachmentContainerView.setVisibility(GONE);
dismissView.setBackgroundResource(R.drawable.dismiss_background); dismissView.setBackgroundResource(R.drawable.dismiss_background);
if (thumbnailSlides.get(0).isWebxdcDocument()) { if (slide.isWebxdcDocument()) {
try { try {
JSONObject info = quotedMsg.getWebxdcInfo(); JSONObject info = quotedMsg.getWebxdcInfo();
byte[] blob = quotedMsg.getWebxdcBlob(info.getString("icon")); byte[] blob = quotedMsg.getWebxdcBlob(info.getString("icon"));
@ -218,7 +216,7 @@ public class QuoteView extends FrameLayout implements RecipientForeverObserver {
Log.e(TAG, "failed to get webxdc icon", e); Log.e(TAG, "failed to get webxdc icon", e);
thumbnailView.setVisibility(GONE); thumbnailView.setVisibility(GONE);
} }
} else if (thumbnailSlides.get(0).isVcard()) { } else if (slide.isVcard()) {
try { try {
VcardContact vcardContact = DcHelper.getRpc(getContext()).parseVcard(quotedMsg.getFile()).get(0); VcardContact vcardContact = DcHelper.getRpc(getContext()).parseVcard(quotedMsg.getFile()).get(0);
Recipient recipient = new Recipient(getContext(), vcardContact); Recipient recipient = new Recipient(getContext(), vcardContact);
@ -233,22 +231,24 @@ public class QuoteView extends FrameLayout implements RecipientForeverObserver {
thumbnailView.setVisibility(GONE); thumbnailView.setVisibility(GONE);
} }
} else { } else {
Uri thumbnailUri = thumbnailSlides.get(0).getUri(); Uri thumbnailUri = slide.getUri();
if (thumbnailSlides.get(0).hasVideo()) { if (slide.hasVideo()) {
attachmentVideoOverlayView.setVisibility(VISIBLE); attachmentVideoOverlayView.setVisibility(VISIBLE);
MediaUtil.createVideoThumbnailIfNeeded(getContext(), thumbnailSlides.get(0).getUri(), thumbnailSlides.get(0).getThumbnailUri(), null); MediaUtil.createVideoThumbnailIfNeeded(getContext(), slide.getUri(), slide.getThumbnailUri(), null);
thumbnailUri = thumbnailSlides.get(0).getThumbnailUri(); thumbnailUri = slide.getThumbnailUri();
}
if (thumbnailUri != null) {
glideRequests.load(new DecryptableUri(thumbnailUri))
.centerCrop()
.override(getContext().getResources().getDimensionPixelSize(R.dimen.quote_thumb_size))
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.into(thumbnailView);
} }
glideRequests.load(new DecryptableUri(thumbnailUri))
.centerCrop()
.override(getContext().getResources().getDimensionPixelSize(R.dimen.quote_thumb_size))
.diskCacheStrategy(DiskCacheStrategy.RESOURCE)
.into(thumbnailView);
} }
} else if(!audioSlides.isEmpty()) { } else if(slide != null && slide.hasAudio()) {
thumbnailView.setVisibility(GONE); thumbnailView.setVisibility(GONE);
attachmentContainerView.setVisibility(GONE); attachmentContainerView.setVisibility(GONE);
} else if (!documentSlides.isEmpty()) { } else if (slide != null && slide.hasDocument()) {
thumbnailView.setVisibility(GONE); thumbnailView.setVisibility(GONE);
attachmentContainerView.setVisibility(VISIBLE); attachmentContainerView.setVisibility(VISIBLE);
} else { } else {

View file

@ -51,8 +51,13 @@ public class DcContactsLoader extends AsyncLoader<DcContactsLoader.Ret> {
} }
if (query == null && addCreateGroupLinks) { if (query == null && addCreateGroupLinks) {
additional_items = Util.appendInt(additional_items, DcContact.DC_CONTACT_ID_NEW_GROUP); additional_items = Util.appendInt(additional_items, DcContact.DC_CONTACT_ID_NEW_GROUP);
final boolean broadcastsEnabled = Prefs.isNewBroadcastListAvailable(getContext());
if (broadcastsEnabled) additional_items = Util.appendInt(additional_items, DcContact.DC_CONTACT_ID_NEW_BROADCAST_LIST); final boolean broadcastsEnabled = Prefs.isNewBroadcastAvailable(getContext());
if (broadcastsEnabled) additional_items = Util.appendInt(additional_items, DcContact.DC_CONTACT_ID_NEW_BROADCAST);
if (!dcContext.isChatmail()) {
additional_items = Util.appendInt(additional_items, DcContact.DC_CONTACT_ID_NEW_UNENCRYPTED_GROUP);
}
} }
int[] all_ids = new int[contact_ids.length + additional_items.length]; int[] all_ids = new int[contact_ids.length + additional_items.length];
System.arraycopy(additional_items, 0, all_ids, 0, additional_items.length); System.arraycopy(additional_items, 0, all_ids, 0, additional_items.length);

View file

@ -23,6 +23,7 @@ import com.b44t.messenger.DcContext;
import com.b44t.messenger.DcLot; import com.b44t.messenger.DcLot;
import com.b44t.messenger.DcMsg; import com.b44t.messenger.DcMsg;
import com.b44t.messenger.rpc.Rpc; import com.b44t.messenger.rpc.Rpc;
import com.b44t.messenger.rpc.RpcException;
import org.thoughtcrime.securesms.ApplicationContext; import org.thoughtcrime.securesms.ApplicationContext;
import org.thoughtcrime.securesms.BuildConfig; import org.thoughtcrime.securesms.BuildConfig;
@ -36,6 +37,7 @@ import org.thoughtcrime.securesms.qr.QrActivity;
import org.thoughtcrime.securesms.recipients.Recipient; import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.util.FileUtils; import org.thoughtcrime.securesms.util.FileUtils;
import org.thoughtcrime.securesms.util.MediaUtil; import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.Util;
import java.io.File; import java.io.File;
import java.util.Date; import java.util.Date;
@ -150,11 +152,8 @@ public class DcHelper {
dcContext.setStockTranslation(11, context.getString(R.string.audio)); dcContext.setStockTranslation(11, context.getString(R.string.audio));
dcContext.setStockTranslation(12, context.getString(R.string.file)); dcContext.setStockTranslation(12, context.getString(R.string.file));
dcContext.setStockTranslation(23, context.getString(R.string.gif)); dcContext.setStockTranslation(23, context.getString(R.string.gif));
dcContext.setStockTranslation(24, context.getString(R.string.encrypted_message));
dcContext.setStockTranslation(29, context.getString(R.string.systemmsg_cannot_decrypt)); dcContext.setStockTranslation(29, context.getString(R.string.systemmsg_cannot_decrypt));
dcContext.setStockTranslation(35, context.getString(R.string.contact_verified)); dcContext.setStockTranslation(35, context.getString(R.string.contact_verified));
dcContext.setStockTranslation(36, context.getString(R.string.contact_not_verified));
dcContext.setStockTranslation(37, context.getString(R.string.contact_setup_changed));
dcContext.setStockTranslation(40, context.getString(R.string.chat_archived_label)); dcContext.setStockTranslation(40, context.getString(R.string.chat_archived_label));
dcContext.setStockTranslation(60, context.getString(R.string.login_error_cannot_login)); dcContext.setStockTranslation(60, context.getString(R.string.login_error_cannot_login));
dcContext.setStockTranslation(66, context.getString(R.string.location)); dcContext.setStockTranslation(66, context.getString(R.string.location));
@ -188,7 +187,6 @@ public class DcHelper {
dcContext.setStockTranslation(112, context.getString(R.string.error_x)); dcContext.setStockTranslation(112, context.getString(R.string.error_x));
dcContext.setStockTranslation(113, context.getString(R.string.not_supported_by_provider)); dcContext.setStockTranslation(113, context.getString(R.string.not_supported_by_provider));
dcContext.setStockTranslation(114, context.getString(R.string.messages)); dcContext.setStockTranslation(114, context.getString(R.string.messages));
dcContext.setStockTranslation(115, context.getString(R.string.broadcast_list));
dcContext.setStockTranslation(116, context.getString(R.string.part_of_total_used)); dcContext.setStockTranslation(116, context.getString(R.string.part_of_total_used));
dcContext.setStockTranslation(117, context.getString(R.string.secure_join_started)); dcContext.setStockTranslation(117, context.getString(R.string.secure_join_started));
dcContext.setStockTranslation(118, context.getString(R.string.secure_join_replies)); dcContext.setStockTranslation(118, context.getString(R.string.secure_join_replies));
@ -228,28 +226,24 @@ public class DcHelper {
dcContext.setStockTranslation(155, context.getString(R.string.ephemeral_timer_days_by_other)); dcContext.setStockTranslation(155, context.getString(R.string.ephemeral_timer_days_by_other));
dcContext.setStockTranslation(156, context.getString(R.string.ephemeral_timer_weeks_by_you)); dcContext.setStockTranslation(156, context.getString(R.string.ephemeral_timer_weeks_by_you));
dcContext.setStockTranslation(157, context.getString(R.string.ephemeral_timer_weeks_by_other)); dcContext.setStockTranslation(157, context.getString(R.string.ephemeral_timer_weeks_by_other));
dcContext.setStockTranslation(158, context.getString(R.string.ephemeral_timer_1_year_by_you));
dcContext.setStockTranslation(159, context.getString(R.string.ephemeral_timer_1_year_by_other));
// HACK: svg does not handle entities correctly and shows `&quot;` as the text `quot;`. // HACK: svg does not handle entities correctly and shows `&quot;` as the text `quot;`.
// until that is fixed, we fix the most obvious errors (core uses encode_minimal, so this does not affect so many characters) // until that is fixed, we fix the most obvious errors (core uses encode_minimal, so this does not affect so many characters)
// cmp. https://github.com/deltachat/deltachat-android/issues/2187 // cmp. https://github.com/deltachat/deltachat-android/issues/2187
dcContext.setStockTranslation(120, context.getString(R.string.qrshow_join_group_hint).replace("\"", "")); dcContext.setStockTranslation(120, context.getString(R.string.qrshow_join_group_hint).replace("\"", ""));
dcContext.setStockTranslation(121, context.getString(R.string.connectivity_not_connected)); dcContext.setStockTranslation(121, context.getString(R.string.connectivity_not_connected));
dcContext.setStockTranslation(122, context.getString(R.string.aeap_addr_changed));
dcContext.setStockTranslation(162, context.getString(R.string.multidevice_qr_subtitle)); dcContext.setStockTranslation(162, context.getString(R.string.multidevice_qr_subtitle));
dcContext.setStockTranslation(163, context.getString(R.string.multidevice_transfer_done_devicemsg)); dcContext.setStockTranslation(163, context.getString(R.string.multidevice_transfer_done_devicemsg));
// The next two strings should only be set if the UI actually shows more info when the user clicks on the
// DC_INFO_PROTECTION_{EN|DIS}ABLED info message
dcContext.setStockTranslation(170, context.getString(R.string.chat_protection_enabled_tap_to_learn_more)); dcContext.setStockTranslation(170, context.getString(R.string.chat_protection_enabled_tap_to_learn_more));
dcContext.setStockTranslation(171, context.getString(R.string.chat_protection_broken_tap_to_learn_more));
dcContext.setStockTranslation(172, context.getString(R.string.chat_new_group_hint)); dcContext.setStockTranslation(172, context.getString(R.string.chat_new_group_hint));
dcContext.setStockTranslation(173, context.getString(R.string.member_x_added)); dcContext.setStockTranslation(173, context.getString(R.string.member_x_added));
dcContext.setStockTranslation(174, context.getString(R.string.invalid_unencrypted_tap_to_learn_more)); dcContext.setStockTranslation(174, context.getString(R.string.invalid_unencrypted_tap_to_learn_more));
dcContext.setStockTranslation(176, context.getString(R.string.reaction_by_you)); dcContext.setStockTranslation(176, context.getString(R.string.reaction_by_you));
dcContext.setStockTranslation(177, context.getString(R.string.reaction_by_other)); dcContext.setStockTranslation(177, context.getString(R.string.reaction_by_other));
dcContext.setStockTranslation(190, context.getString(R.string.secure_join_wait)); dcContext.setStockTranslation(190, context.getString(R.string.secure_join_wait));
dcContext.setStockTranslation(192, context.getString(R.string.secure_join_takes_longer)); dcContext.setStockTranslation(193, context.getString(R.string.donate_device_msg));
} }
public static File getImexDir() { public static File getImexDir() {
@ -461,20 +455,10 @@ public class DcHelper {
} }
} }
public static void showVerificationBrokenDialog(Context context, String name) {
new AlertDialog.Builder(context)
.setMessage(context.getString(R.string.chat_protection_broken_explanation, name))
.setNeutralButton(R.string.learn_more, (d, w) -> openHelp(context, "#nocryptanymore"))
.setNegativeButton(R.string.qrscan_title, (d, w) -> context.startActivity(new Intent(context, QrActivity.class)))
.setPositiveButton(R.string.ok, null)
.setCancelable(true)
.show();
}
public static void showProtectionEnabledDialog(Context context) { public static void showProtectionEnabledDialog(Context context) {
new AlertDialog.Builder(context) new AlertDialog.Builder(context)
.setMessage(context.getString(R.string.chat_protection_enabled_explanation)) .setMessage(context.getString(R.string.chat_protection_enabled_explanation))
.setNeutralButton(R.string.learn_more, (d, w) -> openHelp(context, "#e2eeguarantee")) .setNeutralButton(R.string.learn_more, (d, w) -> openHelp(context, "#e2ee"))
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)
.setCancelable(true) .setCancelable(true)
.show(); .show();
@ -495,4 +479,62 @@ public class DcHelper {
if (section != null) { intent.putExtra(LocalHelpActivity.SECTION_EXTRA, section); } if (section != null) { intent.putExtra(LocalHelpActivity.SECTION_EXTRA, section); }
context.startActivity(intent); context.startActivity(intent);
} }
/**
* For the PGP-Contacts migration, things can go wrong.
* The migration happens when the account is setup, at which point no events can be sent yet.
* So, instead, if something goes wrong, it's returned by getLastError().
* This function shows the error message to the user.
* <p>
* A few releases after the PGP-contacts migration (which happened in 2025-05),
* we can remove this function again.
*/
public static void maybeShowMigrationError(Context context) {
try {
String lastError = DcHelper.getRpc(context).getMigrationError(DcHelper.getContext(context).getAccountId());
if (lastError != null && !lastError.isEmpty()) {
Log.w(TAG, "Opening account failed, trying to share error: " + lastError);
String subject = "Delta Chat failed to update";
String email = "delta@merlinux.eu";
new AlertDialog.Builder(context)
.setMessage(context.getString(R.string.error_x, lastError))
.setNeutralButton(R.string.global_menu_edit_copy_desktop, (d, which) -> {
Util.writeTextToClipboard(context, lastError);
})
.setPositiveButton(R.string.menu_send, (d, which) -> {
Intent sharingIntent = new Intent(
Intent.ACTION_SENDTO, Uri.fromParts(
"mailto", email, null
)
);
sharingIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{email});
sharingIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
sharingIntent.putExtra(Intent.EXTRA_TEXT, lastError);
if (sharingIntent.resolveActivity(context.getPackageManager()) == null) {
Log.w(TAG, "No email client found to send crash report");
sharingIntent = new Intent(Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
sharingIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
sharingIntent.putExtra(Intent.EXTRA_TEXT, lastError);
sharingIntent.putExtra(Intent.EXTRA_EMAIL, email);
}
Intent chooser =
Intent.createChooser(sharingIntent, "Send using...");
chooser.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
chooser.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
context.startActivity(chooser);
})
.setCancelable(false)
.show();
}
} catch (RpcException e) {
e.printStackTrace();
}
}
} }

View file

@ -128,7 +128,7 @@ public class DirectShareUtil {
Recipient recipient = new Recipient(context, chat); Recipient recipient = new Recipient(context, chat);
Bitmap avatar = getIconForShortcut(context, recipient); Bitmap avatar = getIconForShortcut(context, recipient);
results.add(new ShortcutInfoCompat.Builder(context, Integer.toString(chat.getId())) results.add(new ShortcutInfoCompat.Builder(context, "chat-" + dcContext.getAccountId() + "-" + chat.getId())
.setShortLabel(chat.getName()) .setShortLabel(chat.getName())
.setLongLived(true) .setLongLived(true)
.setRank(i+1) .setRank(i+1)

View file

@ -268,8 +268,10 @@ public class ContactSelectionListAdapter extends RecyclerView.Adapter<ContactSel
itemMultiSelect = false; // the item creates a new contact in the list that will be selected instead itemMultiSelect = false; // the item creates a new contact in the list that will be selected instead
} else if (id == DcContact.DC_CONTACT_ID_NEW_GROUP) { } else if (id == DcContact.DC_CONTACT_ID_NEW_GROUP) {
name = context.getString(R.string.menu_new_group); name = context.getString(R.string.menu_new_group);
} else if (id == DcContact.DC_CONTACT_ID_NEW_BROADCAST_LIST) { } else if (id == DcContact.DC_CONTACT_ID_NEW_UNENCRYPTED_GROUP) {
name = context.getString(R.string.new_broadcast_list); name = context.getString(R.string.new_email);
} else if (id == DcContact.DC_CONTACT_ID_NEW_BROADCAST) {
name = context.getString(R.string.new_channel);
} else if (id == DcContact.DC_CONTACT_ID_QR_INVITE) { } else if (id == DcContact.DC_CONTACT_ID_QR_INVITE) {
name = context.getString(R.string.menu_new_contact); name = context.getString(R.string.menu_new_contact);
} else { } else {

View file

@ -64,10 +64,12 @@ public class ContactSelectionListItem extends LinearLayout implements RecipientM
this.name = name; this.name = name;
this.number = number; this.number = number;
if (specialId==DcContact.DC_CONTACT_ID_NEW_CLASSIC_CONTACT || specialId==DcContact.DC_CONTACT_ID_NEW_GROUP if (specialId==DcContact.DC_CONTACT_ID_NEW_CLASSIC_CONTACT
|| specialId==DcContact.DC_CONTACT_ID_NEW_BROADCAST_LIST || specialId==DcContact.DC_CONTACT_ID_NEW_GROUP
|| specialId==DcContact.DC_CONTACT_ID_ADD_MEMBER || specialId==DcContact.DC_CONTACT_ID_QR_INVITE) { || specialId==DcContact.DC_CONTACT_ID_NEW_UNENCRYPTED_GROUP
this.recipient = null; || specialId==DcContact.DC_CONTACT_ID_NEW_BROADCAST
|| specialId==DcContact.DC_CONTACT_ID_ADD_MEMBER
|| specialId==DcContact.DC_CONTACT_ID_QR_INVITE) {
this.nameView.setTypeface(null, Typeface.BOLD); this.nameView.setTypeface(null, Typeface.BOLD);
} }
else { else {
@ -79,7 +81,7 @@ public class ContactSelectionListItem extends LinearLayout implements RecipientM
this.nameView.setTypeface(null, Typeface.NORMAL); this.nameView.setTypeface(null, Typeface.NORMAL);
} }
if (specialId == DcContact.DC_CONTACT_ID_QR_INVITE) { if (specialId == DcContact.DC_CONTACT_ID_QR_INVITE) {
this.avatar.setImageDrawable(new ResourceContactPhoto(R.drawable.baseline_qr_code_24).asDrawable(getContext(), ThemeUtil.getDummyContactColor(getContext()))); this.avatar.setImageDrawable(new ResourceContactPhoto(R.drawable.ic_qr_code_24).asDrawable(getContext(), ThemeUtil.getDummyContactColor(getContext())));
} else { } else {
this.avatar.setAvatar(glideRequests, recipient, false); this.avatar.setAvatar(glideRequests, recipient, false);
} }
@ -109,7 +111,7 @@ public class ContactSelectionListItem extends LinearLayout implements RecipientM
this.nameView.setEnabled(true); this.nameView.setEnabled(true);
this.nameView.setText(name==null? "#" : name); this.nameView.setText(name==null? "#" : name);
if (contact != null && contact.isVerified()) { if (contact != null && contact.isKeyContact()) {
number = null; number = null;
} }
@ -121,11 +123,6 @@ public class ContactSelectionListItem extends LinearLayout implements RecipientM
else { else {
this.numberContainer.setVisibility(View.GONE); this.numberContainer.setVisibility(View.GONE);
} }
if (contact != null && contact.isVerified()) {
nameView.setCompoundDrawablesWithIntrinsicBounds(0,0,R.drawable.ic_verified,0);
} else {
nameView.setCompoundDrawablesWithIntrinsicBounds(0,0, 0,0);
}
} }
public int getSpecialId() { public int getSpecialId() {
@ -163,9 +160,4 @@ public class ContactSelectionListItem extends LinearLayout implements RecipientM
}); });
} }
} }
public void setNoHeaderPadding() {
int paddinglr = getContext().getResources().getDimensionPixelSize(R.dimen.contact_list_normal_padding);
setPadding(paddinglr, 0, paddinglr, 0);
}
} }

View file

@ -42,6 +42,7 @@ public class NewContactActivity extends PassphraseRequiredActionBarActivity
actionBar.setTitle(R.string.menu_new_classic_contact); actionBar.setTitle(R.string.menu_new_classic_contact);
actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.ic_close_white_24dp); actionBar.setHomeAsUpIndicator(R.drawable.ic_close_white_24dp);
actionBar.setElevation(0); // TODO: use custom toolbar instead
} }
nameInput = ViewUtil.findById(this, R.id.name_text); nameInput = ViewUtil.findById(this, R.id.name_text);

View file

@ -6,7 +6,6 @@ import android.content.Context;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.loader.content.AsyncTaskLoader; import androidx.loader.content.AsyncTaskLoader;
import com.annimon.stream.Stream;
import com.b44t.messenger.DcContext; import com.b44t.messenger.DcContext;
import com.b44t.messenger.DcMsg; import com.b44t.messenger.DcMsg;
@ -128,28 +127,38 @@ public class BucketedThreadMediaLoader extends AsyncTaskLoader<BucketedThreadMed
} }
public int getSectionCount() { public int getSectionCount() {
return (int)Stream.of(TIME_SECTIONS) int count = 0;
.filter(timeBucket -> !timeBucket.isEmpty()) for (TimeBucket section : TIME_SECTIONS) {
.count() + if (!section.isEmpty()) count++;
OLDER.getSectionCount(); }
return count + OLDER.getSectionCount();
} }
public int getSectionItemCount(int section) { public int getSectionItemCount(int section) {
List<TimeBucket> activeTimeBuckets = Stream.of(TIME_SECTIONS).filter(timeBucket -> !timeBucket.isEmpty()).toList(); List<TimeBucket> activeTimeBuckets = new ArrayList<>();
for (TimeBucket bucket : TIME_SECTIONS) {
if (!bucket.isEmpty()) activeTimeBuckets.add(bucket);
}
if (section < activeTimeBuckets.size()) return activeTimeBuckets.get(section).getItemCount(); if (section < activeTimeBuckets.size()) return activeTimeBuckets.get(section).getItemCount();
else return OLDER.getSectionItemCount(section - activeTimeBuckets.size()); else return OLDER.getSectionItemCount(section - activeTimeBuckets.size());
} }
public DcMsg get(int section, int item) { public DcMsg get(int section, int item) {
List<TimeBucket> activeTimeBuckets = Stream.of(TIME_SECTIONS).filter(timeBucket -> !timeBucket.isEmpty()).toList(); List<TimeBucket> activeTimeBuckets = new ArrayList<>();
for (TimeBucket bucket : TIME_SECTIONS) {
if (!bucket.isEmpty()) activeTimeBuckets.add(bucket);
}
if (section < activeTimeBuckets.size()) return activeTimeBuckets.get(section).getItem(item); if (section < activeTimeBuckets.size()) return activeTimeBuckets.get(section).getItem(item);
else return OLDER.getItem(section - activeTimeBuckets.size(), item); else return OLDER.getItem(section - activeTimeBuckets.size(), item);
} }
public String getName(int section) { public String getName(int section) {
List<TimeBucket> activeTimeBuckets = Stream.of(TIME_SECTIONS).filter(timeBucket -> !timeBucket.isEmpty()).toList(); List<TimeBucket> activeTimeBuckets = new ArrayList<>();
for (TimeBucket bucket : TIME_SECTIONS) {
if (!bucket.isEmpty()) activeTimeBuckets.add(bucket);
}
if (section < activeTimeBuckets.size()) return activeTimeBuckets.get(section).getName(); if (section < activeTimeBuckets.size()) return activeTimeBuckets.get(section).getName();
else return OLDER.getName(section - activeTimeBuckets.size()); else return OLDER.getName(section - activeTimeBuckets.size());

View file

@ -76,6 +76,11 @@ public abstract class Slide {
return attachment.getSize(); return attachment.getSize();
} }
/* Return true if this slide has a thumbnail when being quoted, false otherwise */
public boolean hasQuoteThumbnail() {
return (hasImage() || hasVideo() || hasSticker() || isWebxdcDocument() || isVcard()) && getUri() != null;
}
public boolean hasImage() { public boolean hasImage() {
return false; return false;
} }

View file

@ -21,15 +21,13 @@ import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat; import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import com.annimon.stream.Stream;
import com.annimon.stream.function.Consumer;
import org.thoughtcrime.securesms.R; import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.util.LRUCache; import org.thoughtcrime.securesms.util.LRUCache;
import org.thoughtcrime.securesms.util.ServiceUtil; import org.thoughtcrime.securesms.util.ServiceUtil;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.security.SecureRandom; import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@ -70,10 +68,6 @@ public class Permissions {
private Runnable anyPermanentlyDeniedListener; private Runnable anyPermanentlyDeniedListener;
private Runnable anyResultListener; private Runnable anyResultListener;
private Consumer<List<String>> someGrantedListener;
private Consumer<List<String>> someDeniedListener;
private Consumer<List<String>> somePermanentlyDeniedListener;
private @DrawableRes int[] rationalDialogHeader; private @DrawableRes int[] rationalDialogHeader;
private String rationaleDialogMessage; private String rationaleDialogMessage;
@ -148,29 +142,13 @@ public class Permissions {
return this; return this;
} }
public PermissionsBuilder onSomeGranted(Consumer<List<String>> someGrantedListener) {
this.someGrantedListener = someGrantedListener;
return this;
}
public PermissionsBuilder onSomeDenied(Consumer<List<String>> someDeniedListener) {
this.someDeniedListener = someDeniedListener;
return this;
}
public PermissionsBuilder onSomePermanentlyDenied(Consumer<List<String>> somePermanentlyDeniedListener) {
this.somePermanentlyDeniedListener = somePermanentlyDeniedListener;
return this;
}
public void execute() { public void execute() {
if (alwaysGranted) { if (alwaysGranted) {
allGrantedListener.run(); allGrantedListener.run();
return; return;
} }
PermissionsRequest request = new PermissionsRequest(allGrantedListener, anyDeniedListener, anyPermanentlyDeniedListener, anyResultListener, PermissionsRequest request = new PermissionsRequest(allGrantedListener, anyDeniedListener, anyPermanentlyDeniedListener, anyResultListener);
someGrantedListener, someDeniedListener, somePermanentlyDeniedListener);
if (ifNecesary && (permissionObject.hasAll(requestedPermissions) || !condition)) { if (ifNecesary && (permissionObject.hasAll(requestedPermissions) || !condition)) {
executePreGrantedPermissionsRequest(request); executePreGrantedPermissionsRequest(request);
@ -183,7 +161,7 @@ public class Permissions {
private void executePreGrantedPermissionsRequest(PermissionsRequest request) { private void executePreGrantedPermissionsRequest(PermissionsRequest request) {
int[] grantResults = new int[requestedPermissions.length]; int[] grantResults = new int[requestedPermissions.length];
for (int i=0;i<grantResults.length;i++) grantResults[i] = PackageManager.PERMISSION_GRANTED; Arrays.fill(grantResults, PackageManager.PERMISSION_GRANTED);
request.onResult(requestedPermissions, grantResults, new boolean[requestedPermissions.length]); request.onResult(requestedPermissions, grantResults, new boolean[requestedPermissions.length]);
} }
@ -218,7 +196,8 @@ public class Permissions {
} }
String[] permissions = filterNotGranted(permissionObject.getContext(), requestedPermissions); String[] permissions = filterNotGranted(permissionObject.getContext(), requestedPermissions);
int[] grantResults = Stream.of(permissions).mapToInt(permission -> PackageManager.PERMISSION_DENIED).toArray(); int[] grantResults = new int[permissions.length];
Arrays.fill(grantResults, PackageManager.PERMISSION_DENIED);
boolean[] showDialog = new boolean[permissions.length]; boolean[] showDialog = new boolean[permissions.length];
Arrays.fill(showDialog, true); Arrays.fill(showDialog, true);
@ -236,22 +215,29 @@ public class Permissions {
} }
private static String[] filterNotGranted(@NonNull Context context, String... permissions) { private static String[] filterNotGranted(@NonNull Context context, String... permissions) {
return Stream.of(permissions) List<String> notGranted = new ArrayList<>();
.filter(permission -> ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) for (String permission : permissions) {
.toList() if (ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
.toArray(new String[0]); notGranted.add(permission);
}
}
return notGranted.toArray(new String[0]);
} }
public static boolean hasAny(@NonNull Context context, String... permissions) { public static boolean hasAny(@NonNull Context context, String... permissions) {
return Build.VERSION.SDK_INT < Build.VERSION_CODES.M || if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return true;
Stream.of(permissions).anyMatch(permission -> ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED); for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED) return true;
}
return false;
} }
public static boolean hasAll(@NonNull Context context, String... permissions) { public static boolean hasAll(@NonNull Context context, String... permissions) {
return Build.VERSION.SDK_INT < Build.VERSION_CODES.M || if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) return true;
Stream.of(permissions).allMatch(permission -> ContextCompat.checkSelfPermission(context, permission) == PackageManager.PERMISSION_GRANTED); for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) return false;
}
return true;
} }
public static void onRequestPermissionsResult(Fragment fragment, int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { public static void onRequestPermissionsResult(Fragment fragment, int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {

View file

@ -5,8 +5,6 @@ import android.content.pm.PackageManager;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.annimon.stream.function.Consumer;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -22,27 +20,16 @@ class PermissionsRequest {
private final @Nullable Runnable anyPermanentlyDeniedListener; private final @Nullable Runnable anyPermanentlyDeniedListener;
private final @Nullable Runnable anyResultListener; private final @Nullable Runnable anyResultListener;
private final @Nullable Consumer<List<String>> someGrantedListener;
private final @Nullable Consumer<List<String>> someDeniedListener;
private final @Nullable Consumer<List<String>> somePermanentlyDeniedListener;
PermissionsRequest(@Nullable Runnable allGrantedListener, PermissionsRequest(@Nullable Runnable allGrantedListener,
@Nullable Runnable anyDeniedListener, @Nullable Runnable anyDeniedListener,
@Nullable Runnable anyPermanentlyDeniedListener, @Nullable Runnable anyPermanentlyDeniedListener,
@Nullable Runnable anyResultListener, @Nullable Runnable anyResultListener)
@Nullable Consumer<List<String>> someGrantedListener,
@Nullable Consumer<List<String>> someDeniedListener,
@Nullable Consumer<List<String>> somePermanentlyDeniedListener)
{ {
this.allGrantedListener = allGrantedListener; this.allGrantedListener = allGrantedListener;
this.anyDeniedListener = anyDeniedListener; this.anyDeniedListener = anyDeniedListener;
this.anyPermanentlyDeniedListener = anyPermanentlyDeniedListener; this.anyPermanentlyDeniedListener = anyPermanentlyDeniedListener;
this.anyResultListener = anyResultListener; this.anyResultListener = anyResultListener;
this.someGrantedListener = someGrantedListener;
this.someDeniedListener = someDeniedListener;
this.somePermanentlyDeniedListener = somePermanentlyDeniedListener;
} }
void onResult(String[] permissions, int[] grantResults, boolean[] shouldShowRationaleDialog) { void onResult(String[] permissions, int[] grantResults, boolean[] shouldShowRationaleDialog) {
@ -56,9 +43,9 @@ class PermissionsRequest {
} else { } else {
boolean preRequestShouldShowRationaleDialog = PRE_REQUEST_MAPPING.get(permissions[i]); boolean preRequestShouldShowRationaleDialog = PRE_REQUEST_MAPPING.get(permissions[i]);
if ((somePermanentlyDeniedListener != null || anyPermanentlyDeniedListener != null) && if (anyPermanentlyDeniedListener != null
!preRequestShouldShowRationaleDialog && !shouldShowRationaleDialog[i]) && !preRequestShouldShowRationaleDialog
{ && !shouldShowRationaleDialog[i]) {
permanentlyDenied.add(permissions[i]); permanentlyDenied.add(permissions[i]);
} else { } else {
denied.add(permissions[i]); denied.add(permissions[i]);
@ -68,18 +55,14 @@ class PermissionsRequest {
if (allGrantedListener != null && !granted.isEmpty() && (denied.isEmpty() && permanentlyDenied.isEmpty())) { if (allGrantedListener != null && !granted.isEmpty() && (denied.isEmpty() && permanentlyDenied.isEmpty())) {
allGrantedListener.run(); allGrantedListener.run();
} else if (someGrantedListener != null && !granted.isEmpty()) {
someGrantedListener.accept(granted);
} }
if (!denied.isEmpty()) { if (!denied.isEmpty()) {
if (anyDeniedListener != null) anyDeniedListener.run(); if (anyDeniedListener != null) anyDeniedListener.run();
if (someDeniedListener != null) someDeniedListener.accept(denied);
} }
if (!permanentlyDenied.isEmpty()) { if (!permanentlyDenied.isEmpty()) {
if (anyPermanentlyDeniedListener != null) anyPermanentlyDeniedListener.run(); if (anyPermanentlyDeniedListener != null) anyPermanentlyDeniedListener.run();
if (somePermanentlyDeniedListener != null) somePermanentlyDeniedListener.accept(permanentlyDenied);
} }
if (anyResultListener != null) { if (anyResultListener != null) {

View file

@ -176,9 +176,8 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment
newBroadcastList.setOnPreferenceChangeListener((preference, newValue) -> { newBroadcastList.setOnPreferenceChangeListener((preference, newValue) -> {
if ((Boolean)newValue) { if ((Boolean)newValue) {
new AlertDialog.Builder(requireActivity()) new AlertDialog.Builder(requireActivity())
.setTitle("Thanks for trying out \"Broadcast Lists\"!") .setTitle("Thanks for trying out \"Channels\"!")
.setMessage("• You can now create new \"Broadcast Lists\" from the \"New Chat\" dialog\n\n" .setMessage("• You can now create new \"Channels\" from the \"New Chat\" dialog\n\n"
+ "• In case you are using more than one device, broadcast lists are currently not synced between them\n\n"
+ "• If you want to quit the experimental feature, you can disable it at \"Settings / Advanced\"") + "• If you want to quit the experimental feature, you can disable it at \"Settings / Advanced\"")
.setCancelable(false) .setCancelable(false)
.setPositiveButton(R.string.ok, null) .setPositiveButton(R.string.ok, null)

View file

@ -71,6 +71,7 @@ public class ChatBackgroundActivity extends PassphraseRequiredActionBarActivity
actionBar.setTitle(R.string.pref_background); actionBar.setTitle(R.string.pref_background);
actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.ic_close_white_24dp); actionBar.setHomeAsUpIndicator(R.drawable.ic_close_white_24dp);
actionBar.setElevation(0); // TODO: use custom toolbar instead
} }
} }

View file

@ -20,6 +20,8 @@ import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
public class AvatarHelper { public class AvatarHelper {
/* the maximum width/height an avatar should have */
public static final int AVATAR_SIZE = 640;
public static void setGroupAvatar(Context context, int chatId, Bitmap bitmap) { public static void setGroupAvatar(Context context, int chatId, Bitmap bitmap) {
DcContext dcContext = DcHelper.getContext(context); DcContext dcContext = DcHelper.getContext(context);
@ -30,7 +32,7 @@ public class AvatarHelper {
try { try {
File avatar = File.createTempFile("groupavatar", ".jpg", context.getCacheDir()); File avatar = File.createTempFile("groupavatar", ".jpg", context.getCacheDir());
FileOutputStream out = new FileOutputStream(avatar); FileOutputStream out = new FileOutputStream(avatar);
bitmap.compress(Bitmap.CompressFormat.JPEG, 85, out); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
out.close(); out.close();
dcContext.setChatProfileImage(chatId, avatar.getPath()); // The avatar is copied to the blobs directory here... dcContext.setChatProfileImage(chatId, avatar.getPath()); // The avatar is copied to the blobs directory here...
//noinspection ResultOfMethodCallIgnored //noinspection ResultOfMethodCallIgnored

View file

@ -1,23 +0,0 @@
package org.thoughtcrime.securesms.profiles;
import android.content.Context;
import org.thoughtcrime.securesms.mms.MediaConstraints;
public class ProfileMediaConstraints extends MediaConstraints {
@Override
public int getImageMaxWidth(Context context) {
return 640;
}
@Override
public int getImageMaxHeight(Context context) {
return 640;
}
@Override
public int getImageMaxSize(Context context) {
return 5 * 1024 * 1024;
}
}

View file

@ -50,6 +50,7 @@ public class ProxySettingsActivity extends BaseActionBarActivity
if (actionBar != null) { if (actionBar != null) {
actionBar.setTitle(R.string.proxy_settings); actionBar.setTitle(R.string.proxy_settings);
actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setElevation(0); // TODO: use custom toolbar instead
} }
adapter = new ProxyListAdapter(this); adapter = new ProxyListAdapter(this);

View file

@ -80,6 +80,7 @@ public class BackupReceiverFragment extends Fragment implements DcEventCenter.Dc
Log.i(TAG,"DC_EVENT_IMEX_PROGRESS, " + permille); Log.i(TAG,"DC_EVENT_IMEX_PROGRESS, " + permille);
if (permille == 0) { if (permille == 0) {
DcHelper.maybeShowMigrationError(getTransferActivity());
getTransferActivity().setTransferError("Receiving Error"); getTransferActivity().setTransferError("Receiving Error");
} else if (permille < 1000) { } else if (permille < 1000) {
percent = permille/10; percent = permille/10;

View file

@ -73,11 +73,11 @@ public class BackupTransferActivity extends BaseActionBarActivity {
switch(transferMode) { switch(transferMode) {
case SENDER_SHOW_QR: case SENDER_SHOW_QR:
initFragment(android.R.id.content, new BackupProviderFragment(), icicle); initFragment(R.id.backup_provider_fragment, new BackupProviderFragment(), icicle);
break; break;
case RECEIVER_SCAN_QR: case RECEIVER_SCAN_QR:
initFragment(android.R.id.content, new BackupReceiverFragment(), icicle); initFragment(R.id.backup_provider_fragment, new BackupReceiverFragment(), icicle);
break; break;
} }
@ -85,6 +85,7 @@ public class BackupTransferActivity extends BaseActionBarActivity {
supportActionBar.setDisplayHomeAsUpEnabled(true); supportActionBar.setDisplayHomeAsUpEnabled(true);
supportActionBar.setHomeAsUpIndicator(R.drawable.ic_close_white_24dp); supportActionBar.setHomeAsUpIndicator(R.drawable.ic_close_white_24dp);
supportActionBar.setTitle(title); supportActionBar.setTitle(title);
supportActionBar.setElevation(0); // TODO: use custom toolbar instead
} }
@Override @Override

View file

@ -42,6 +42,7 @@ public class RegistrationQrActivity extends BaseActionBarActivity {
getSupportActionBar().setTitle(R.string.scan_invitation_code); getSupportActionBar().setTitle(R.string.scan_invitation_code);
} }
getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setElevation(0); // TODO: use custom toolbar instead
barcodeScannerView = findViewById(R.id.zxing_barcode_scanner); barcodeScannerView = findViewById(R.id.zxing_barcode_scanner);
barcodeScannerView.setStatusText(getString(R.string.qrscan_hint) + "\n "); barcodeScannerView.setStatusText(getString(R.string.qrscan_hint) + "\n ");

View file

@ -179,7 +179,7 @@ final class UriGlideRenderer implements Renderer {
.diskCacheStrategy(DiskCacheStrategy.NONE) .diskCacheStrategy(DiskCacheStrategy.NONE)
.override(width, height) .override(width, height)
.centerInside() .centerInside()
.load(decryptable ? new DecryptableStreamUriLoader.DecryptableUri(imageUri) : imageUri); .load(decryptable && imageUri!=null ? new DecryptableStreamUriLoader.DecryptableUri(imageUri) : imageUri);
} }
@Override @Override

Some files were not shown because too many files have changed in this diff Show more