From: Luiz Capitulino <lcapitulino@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: kwolf@redhat.com, aliguori@us.ibm.com, qemu-devel@nongnu.org,
mdroth@linux.vnet.ibm.com, pbonzini@redhat.com,
eblake@redhat.com
Subject: Re: [Qemu-devel] [PATCH 11/34] qmp: query-block: add 'valid_encryption_key' field
Date: Mon, 13 Aug 2012 10:35:48 -0300 [thread overview]
Message-ID: <20120813103548.0768d209@doriath.home> (raw)
In-Reply-To: <87pq6xlvn9.fsf@blackfin.pond.sub.org>
On Sat, 11 Aug 2012 09:45:14 +0200
Markus Armbruster <armbru@redhat.com> wrote:
> Luiz Capitulino <lcapitulino@redhat.com> writes:
>
> > On Fri, 10 Aug 2012 19:17:22 +0200
> > Markus Armbruster <armbru@redhat.com> wrote:
> >
> >> Luiz Capitulino <lcapitulino@redhat.com> writes:
> >>
> >> > On Fri, 10 Aug 2012 18:35:26 +0200
> >> > Markus Armbruster <armbru@redhat.com> wrote:
> >> >
> >> >> Luiz Capitulino <lcapitulino@redhat.com> writes:
> >> >>
> >> >> > On Fri, 10 Aug 2012 09:56:11 +0200
> >> >> > Markus Armbruster <armbru@redhat.com> wrote:
> >> >> >
> >> >> >> Revisited this one on review of v2, replying here for context.
> >> >> >>
> >> >> >> Luiz Capitulino <lcapitulino@redhat.com> writes:
> >> >> >>
> >> >> >> > On Thu, 02 Aug 2012 13:35:54 +0200
> >> >> >> > Markus Armbruster <armbru@redhat.com> wrote:
> >> >> >> >
> >> >> >> >> Luiz Capitulino <lcapitulino@redhat.com> writes:
> >> >> >> >>
> >> >> >> >> > Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
> >> >> >> >> > ---
> >> >> >> >> > block.c | 1 +
> >> >> >> >> > qapi-schema.json | 7 +++++--
> >> >> >> >> > 2 files changed, 6 insertions(+), 2 deletions(-)
> >> >> >> >> >
> >> >> >> >> > diff --git a/block.c b/block.c
> >> >> >> >> > index b38940b..9c113b8 100644
> >> >> >> >> > --- a/block.c
> >> >> >> >> > +++ b/block.c
> >> >> >> >> > @@ -2445,6 +2445,7 @@ BlockInfoList *qmp_query_block(Error **errp)
> >> >> >> >> > info->value->inserted->ro = bs->read_only;
> >> >> >> >> > info->value->inserted->drv = g_strdup(bs->drv->format_name);
> >> >> >> >> > info->value->inserted->encrypted = bs->encrypted;
> >> >> >> >> > + info->value->inserted->valid_encryption_key = bs->valid_key;
> >> >> >> >> > if (bs->backing_file[0]) {
> >> >> >> >> > info->value->inserted->has_backing_file = true;
> >> >> >> >> > info->value->inserted->backing_file = g_strdup(bs->backing_file);
> >> >> >> >> > diff --git a/qapi-schema.json b/qapi-schema.json
> >> >> >> >> > index bc55ed2..1b2d7f5 100644
> >> >> >> >> > --- a/qapi-schema.json
> >> >> >> >> > +++ b/qapi-schema.json
> >> >> >> >> > @@ -400,6 +400,8 @@
> >> >> >> >> > #
> >> >> >> >> > # @encrypted: true if the backing device is encrypted
> >> >> >> >> > #
> >> >> >> >> > +# @valid_encryption_key: true if a valid encryption key has been set
> >> >> >> >> > +#
> >> >> >> >> > # @bps: total throughput limit in bytes per second is specified
> >> >> >> >> > #
> >> >> >> >> > # @bps_rd: read throughput limit in bytes per second is specified
> >> >> >> >> > @@ -419,8 +421,9 @@
> >> >> >> >> > { 'type': 'BlockDeviceInfo',
> >> >> >> >> > 'data': { 'file': 'str', 'ro': 'bool', 'drv': 'str',
> >> >> >> >> > '*backing_file': 'str', 'encrypted': 'bool',
> >> >> >> >> > - 'bps': 'int', 'bps_rd': 'int', 'bps_wr': 'int',
> >> >> >> >> > - 'iops': 'int', 'iops_rd': 'int', 'iops_wr': 'int'} }
> >> >> >> >> > + 'valid_encryption_key': 'bool', 'bps': 'int',
> >> >> >> >> > + 'bps_rd': 'int', 'bps_wr': 'int', 'iops': 'int',
> >> >> >> >> > + 'iops_rd': 'int', 'iops_wr': 'int'} }
> >> >> >> >> >
> >> >> >> >> > ##
> >> >> >> >> > # @BlockDeviceIoStatus:
> >> >> >> >>
> >> >> >> >> BlockDeviceInfo is API, isn't it?
> >> >> >> >
> >> >> >> > Yes.
> >> >> >> >
> >> >> >> >> Note that bs->valid_key currently implies bs->encrypted.
> >> >> >> >> bs->valid_key
> >> >> >> >> && !bs->encrypted is impossible. Should we make valid_encryption_key
> >> >> >> >> only available when encrypted?
> >> >> >> >
> >> >> >> > I don't think so. It's a bool, so it's ok for it to be false when
> >> >> >> > encrypted is false.
> >> >> >>
> >> >> >> What bothers me is encrypted=false, valid_encryption_key=true.
> >> >> >
> >> >> > Disappearing keys is worse, IMHO (assuming that that situation
> >> >> > is impossible
> >> >> > in practice, of course).
> >> >>
> >> >> It's fundamentally three states: unencrypted, encrypted-no-key,
> >> >> encrypted-got-key. I'm fine with mapping these onto two bools, it's how
> >> >> the block layer does it. You may want to consider a single enumeration
> >> >> instead.
> >> >
> >> > That's arguable. But I like the bools slightly better because they allow
> >> > clients to do a true/false check vs. having to check against an enum value.
> >> >
> >> > Again, that's arguable.
> >> >
> >> >> >> >> valid_encryption_key is a bit long for my taste. Yours may be
> >> >> >> >> different.
> >> >> >> >
> >> >> >> > We should choose more descriptive and self-documenting names for the
> >> >> >> > protocol. Besides, I can't think of anything shorter that won't get
> >> >> >> > cryptic.
> >> >> >> >
> >> >> >> > Suggestions are always welcome though :)
> >> >> >>
> >> >> >> valid_encryption_key sounds like the value is the valid key.
> >> >> >
> >> >> > That's exactly what it is.
> >> >>
> >> >> Err, isn't the value bool? The key value is a string...
> >> >
> >> > Ah, sorry, I read "sounds like true means the key is valid even for an
> >> > invalid key". I've renamed it to encryption_key_missing, should be better
> >> > (although I could also do encryption_key_is_missing).
> >> >
> >> >> >> got_crypt_key? Also avoids "valid". Good, because current encrypted
> >> >> >> formats don't actually validate the key; they happily accept any key.
> >> >> >
> >> >> > That's a block layer bug, not QMP's.
> >> >> >
> >> >> > QMP clients are going to be misguided by valid_encryption_key
> >> >> > the same way
> >> >> > they are with the block_passwd command or how we suffer from it
> >> >> > internally
> >> >> > when calling bdrv_set_key() (which also manifests itself in HMP).
> >> >> >
> >> >> > Fixing the bug where it is will automatically fix all its instances.
> >> >>
> >> >> It's not fixable for existing image formats, and thus existing images.
> >> >
> >> > Why not? I'd expect that changing AES_set_decrypt_key() to fail for an
> >> > invalid key wouldn't affect images, am I wrong?
> >>
> >> AES_set_decrypt_key() and AES_set_encrypt_key() accept any key with 128,
> >> 192 or 256 bits. Decrypting with an incorrect key simply produces
> >> garbage. That's what ciphers do.
> >
> > (That's not my area of expertise, so hope I won't embarass myself)
> >
> > But how is ssh or any other software using encryption capable of telling
> > you that you entered a wrong password? Do they check against known data?
>
> SSH password authentication boils down to the remote's password
> authentication, with the communication channel secured against
> eavesdroppers.
>
> More relevant: if you secure your private SSH key with a passphrase,
> it's stored encrypted. I don't know how exactly SSH determines that a
> passphrase is correct. A plausible guess is it encrypts (key,h(key)).
> Decrypt, split into key and checksum, compare h(key) to checksum.
>
> > Even if that's the case, any possible fix should be done in the block layer.
>
> It's not fixable there. Which makes it a feature.
>
> Best we could do is extend QCOW2 so that invalid keys can be rejected.
> Will work only with new QCOW2 driver and new images.
It's fixable in the block layer then :)
It can be acceptable to have workarounds in QMP if a severe issue is found
with current images, but this bug exists for ages and nobody has complained
so far. So, I'd go for the Right fix.
next prev parent reply other threads:[~2012-08-13 13:35 UTC|newest]
Thread overview: 85+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-08-02 1:02 [Qemu-devel] [PATCH v1 00/34]: add new error format Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 01/34] monitor: drop unused monitor debug code Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 02/34] qerror: QERR_AMBIGUOUS_PATH: drop %(object) from human msg Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 03/34] qerror: QERR_DEVICE_ENCRYPTED: add filename info to " Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 04/34] qerror: reduce public exposure Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 05/34] qerror: drop qerror_abort() Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 06/34] qerror: avoid passing qerr pointer Luiz Capitulino
2012-08-02 11:23 ` Markus Armbruster
2012-08-02 13:44 ` Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 07/34] qerror: QError: drop file, linenr, func Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 08/34] qerror: qerror_format(): return an allocated string Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 09/34] qerror: don't delay error message construction Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 10/34] error: " Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 11/34] qmp: query-block: add 'valid_encryption_key' field Luiz Capitulino
2012-08-02 11:35 ` Markus Armbruster
2012-08-02 13:54 ` Luiz Capitulino
2012-08-10 7:56 ` Markus Armbruster
2012-08-10 13:33 ` Luiz Capitulino
2012-08-10 16:35 ` Markus Armbruster
2012-08-10 17:00 ` Luiz Capitulino
2012-08-10 17:17 ` Markus Armbruster
2012-08-10 17:50 ` Luiz Capitulino
2012-08-11 7:45 ` Markus Armbruster
2012-08-13 13:35 ` Luiz Capitulino [this message]
2012-08-13 13:50 ` Markus Armbruster
2012-08-13 14:02 ` Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 12/34] hmp: hmp_cont(): don't rely on QERR_DEVICE_ENCRYPTED Luiz Capitulino
2012-08-02 11:53 ` Markus Armbruster
2012-08-02 14:22 ` Luiz Capitulino
2012-08-10 8:42 ` Markus Armbruster
2012-08-10 14:22 ` Luiz Capitulino
2012-08-10 16:37 ` Markus Armbruster
2012-08-02 1:02 ` [Qemu-devel] [PATCH 13/34] hmp: hmp_change(): " Luiz Capitulino
2012-08-02 13:27 ` Markus Armbruster
2012-08-02 13:46 ` Paolo Bonzini
2012-08-02 13:53 ` Markus Armbruster
2012-08-02 13:57 ` Paolo Bonzini
2012-08-02 14:53 ` Luiz Capitulino
2012-08-02 14:51 ` Luiz Capitulino
2012-08-02 14:42 ` Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 14/34] net: inet_connect(), inet_connect_opts(): add in_progress argument Luiz Capitulino
2012-08-02 15:12 ` Markus Armbruster
2012-08-02 1:02 ` [Qemu-devel] [PATCH 15/34] net: inet_connect(), inet_connect_opts(): return -errno Luiz Capitulino
2012-08-02 13:41 ` Luiz Capitulino
2012-08-02 15:50 ` Markus Armbruster
2012-08-02 16:49 ` Luiz Capitulino
2012-08-06 6:52 ` Amos Kong
2012-08-06 19:59 ` Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 16/34] migration: don't rely on QERR_SOCKET_* Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 17/34] qerror: drop QERR_SOCKET_CONNECT_IN_PROGRESS Luiz Capitulino
2012-08-02 15:58 ` Markus Armbruster
2012-08-06 7:04 ` Amos Kong
2012-08-02 16:54 ` Michael Roth
2012-08-02 17:08 ` Luiz Capitulino
2012-08-03 18:26 ` Michael Roth
2012-08-03 20:31 ` Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 18/34] error: drop unused functions Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 19/34] block: block_int: include qerror.h Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 20/34] hmp: hmp.h: include qdict.h Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 21/34] qapi: qapi-types.h: don't include qapi/qapi-types-core.h Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 22/34] qapi: generate correct enum names for camel case enums Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 23/34] qapi: don't convert enum strings to lowercase Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 24/34] qapi-schema: add ErrorClass enum Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 25/34] qerror: qerror_table: don't use C99 struct initializers Luiz Capitulino
2012-08-02 16:48 ` Markus Armbruster
2012-08-02 1:02 ` [Qemu-devel] [PATCH 26/34] error, qerror: add ErrorClass argument to error functions Luiz Capitulino
2012-08-02 16:57 ` Markus Armbruster
2012-08-02 1:02 ` [Qemu-devel] [PATCH 27/34] qerror: add proper ErrorClass value for QERR_ macros Luiz Capitulino
2012-08-02 17:01 ` Markus Armbruster
2012-08-02 1:02 ` [Qemu-devel] [PATCH 28/34] error: add error_get_class() Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 29/34] qmp: switch to the new error format on the wire Luiz Capitulino
2012-08-02 17:12 ` Markus Armbruster
2012-08-02 17:19 ` Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 30/34] qemu-ga: " Luiz Capitulino
2012-08-03 17:44 ` Michael Roth
2012-08-03 17:56 ` Eric Blake
2012-08-03 18:02 ` Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 31/34] error, qerror: pass desc string to error calls Luiz Capitulino
2012-08-02 17:19 ` Markus Armbruster
2012-08-02 1:02 ` [Qemu-devel] [PATCH 32/34] qerror: drop qerror_table and qerror_format() Luiz Capitulino
2012-08-02 1:02 ` [Qemu-devel] [PATCH 33/34] error: drop error_get_qobject()/error_set_qobject() Luiz Capitulino
2012-08-02 17:20 ` Markus Armbruster
2012-08-02 1:02 ` [Qemu-devel] [PATCH 34/34] error, qerror: drop QDict member Luiz Capitulino
2012-08-02 13:41 ` [Qemu-devel] [PATCH v1 00/34]: add new error format Luiz Capitulino
2012-08-02 17:22 ` Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20120813103548.0768d209@doriath.home \
--to=lcapitulino@redhat.com \
--cc=aliguori@us.ibm.com \
--cc=armbru@redhat.com \
--cc=eblake@redhat.com \
--cc=kwolf@redhat.com \
--cc=mdroth@linux.vnet.ibm.com \
--cc=pbonzini@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).